如何 运行 本地主机上的命令来为 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
我是 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