我正在尝试获取本地版本,并将其用作其他远程主机中的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'
是否有实现此目标的方法?
答案 0 :(得分:2)
您可以使用hostvars
变量访问其他主机中定义的变量。
例如:
- debug:
msg: "{{ hostvars['localhost']['code_version'] }}"
答案 1 :(得分:0)
您可以使用以下共享方法注册一个变量,以在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'] }} "
有效。
答案 2 :(得分:0)
使用委托并在同一个剧本上运行所有任务该怎么办?我用它来将kubernetes加入集群。我将Shell命令委派给主节点,然后在剧本的其他主机上执行该命令的输出。我很确定您可以对localhost进行相同的委派:
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 }} "