Ansible set_fact 本地并在远程主机上使用
Ansible set_fact local and use on remote hosts
我正在尝试在本地获取一个版本并将其用作其他远程主机中的 var
在ansible中使用set_fact模块
本地
- name: Set code version
shell: wget -O - -o /dev/null wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
register: shell_output
- name: set version
set_fact:
code_version: "{{ shell_output.stdout }}"
debug: var=code_version
run_once: true
远程
- name: test code version
debug:
msg: code version is " {{ code_version }} "
出现以下错误:The task includes an option with an undefined variable. The error was: 'code_version'
有什么方法可以实现吗??
您可以使用以下共享方法注册一个变量以在 Ansible 中的播放之间保持不变 – 不同的目标主机
本地
- name: Set code version
shell: wget -O - -o /dev/null wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
register: shell_output
- name: Register dummy host with variable
add_host:
name: "DUMMY_HOST"
code_version: "{{ shell_output.stdout }}"
远程
- name: test code version
debug:
msg: code version is " {{ hostvars['DUMMY_HOST']['code_version'] }} "
有效。
您可以使用 hostvars
变量访问在其他主机中定义的变量。
例如:
- debug:
msg: "{{ hostvars['localhost']['code_version'] }}"
使用委托和 运行 同一剧本上的所有任务怎么样?我用它来将 kubernetes 加入集群。我将 shell 命令委托给主节点,然后在剧本的其他主机上执行该命令的输出。我很确定您可以将相同的委派给本地主机:
hosts: all
tasks:
- name: Set code version
shell: wget -O - -o /dev/null wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
register: shell_output
delegate_to: localhost
- name: set version
set_fact:
code_version: "{{ shell_output.stdout }}"
cacheable: yes
- name: test code version
debug:
msg: code version is " {{ code_version }} "
我正在尝试在本地获取一个版本并将其用作其他远程主机中的 var
在ansible中使用set_fact模块
本地
- name: Set code version
shell: wget -O - -o /dev/null wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
register: shell_output
- name: set version
set_fact:
code_version: "{{ shell_output.stdout }}"
debug: var=code_version
run_once: true
远程
- name: test code version
debug:
msg: code version is " {{ code_version }} "
出现以下错误:The task includes an option with an undefined variable. The error was: 'code_version'
有什么方法可以实现吗??
您可以使用以下共享方法注册一个变量以在 Ansible 中的播放之间保持不变 – 不同的目标主机
本地
- name: Set code version
shell: wget -O - -o /dev/null wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
register: shell_output
- name: Register dummy host with variable
add_host:
name: "DUMMY_HOST"
code_version: "{{ shell_output.stdout }}"
远程
- name: test code version
debug:
msg: code version is " {{ hostvars['DUMMY_HOST']['code_version'] }} "
有效。
您可以使用 hostvars
变量访问在其他主机中定义的变量。
例如:
- debug:
msg: "{{ hostvars['localhost']['code_version'] }}"
使用委托和 运行 同一剧本上的所有任务怎么样?我用它来将 kubernetes 加入集群。我将 shell 命令委托给主节点,然后在剧本的其他主机上执行该命令的输出。我很确定您可以将相同的委派给本地主机:
hosts: all
tasks:
- name: Set code version
shell: wget -O - -o /dev/null wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
register: shell_output
delegate_to: localhost
- name: set version
set_fact:
code_version: "{{ shell_output.stdout }}"
cacheable: yes
- name: test code version
debug:
msg: code version is " {{ code_version }} "