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 }} "