代码之家  ›  专栏  ›  技术社区  ›  GaryO

如何在localhost上运行命令为Ansible playbook定义变量?

  •  0
  • GaryO  · 技术社区  · 4 年前

    我对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 . 理想情况下,我希望它存储到一个变量或事实中,可以在整个剧本中使用。我知道我能通过 project_id=$(...) 在ansible命令行上,但我宁愿在剧本中自动设置它。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Zeitounator Vladimir Botka    4 年前

    想当然地,给定的命令只返回id,其他什么都不返回。

    将任务委派给localhost时:

    - 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