【问题标题】:How to run a command on localhost to define variable for an Ansible playbook?如何在 localhost 上运行命令来为 Ansible 剧本定义变量?
【发布时间】:2022-01-24 16:09:24
【问题描述】:

我对 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=$(...),但我宁愿让它在 playbook 中自动设置。

【问题讨论】:

    标签: ansible ansible-facts


    【解决方案1】:

    认为给定的命令只返回 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
    

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多