如何 运行 本地主机上的命令来为 Ansible 剧本定义变量?

How to run a command on localhost to define variable for an Ansible playbook?

我是 Ansible 的新手,正在尝试解决问题。我在远程主机上有一个 运行 的简单剧本。彻底简化:

- hosts: all
  name: build render VM
  tasks:
    - copy:
        src: ./project_{{ project_id }}.yaml
        dest: /app/project.yaml
        owner: root

我想将 project_id 设置为此命令的输出,运行 在本地主机上:gcloud config get-value project。理想情况下,我希望将其存储到可在整个剧本中使用的变量或事实中。我知道我可以在 ansible cmd 行上传递 project_id=$(...),但我宁愿在剧本中自动设置它。

仅将给定的命令视为理所当然 returns id,没有其他。

将任务委派给本地主机:

- hosts: all
  name: build render VM
  tasks:
    - name: get project id
      command: gcloud config get-value project
      register: gcloud_cmd
      run_once: true
      delegate_to: localhost

    - name: set project id
      set_fact:
        project_id: "{{ gcloud_cmd.stdout }}"

    - copy:
        src: ./project_{{ project_id }}.yaml
        dest: /app/project.yaml
        owner: root

pipe lookup:

- hosts: all
  name: build render VM
  tasks:

    - name: set project id from localhost command
      set_fact:
        project_id: "{{ lookup('pipe', 'gcloud config get-value project') }}"
      run_once: true

    - copy:
        src: ./project_{{ project_id }}.yaml
        dest: /app/project.yaml
        owner: root