我正在尝试运行一些本地命令,迭代库存文件并将每个主机名作为参数传递给本地命令.
例如:我想在我的本地机器(笔记本电脑)中运行命令"knife node create {{hostname}}".该剧本是:
- name: Prep node
hosts: 127.0.0.1
connection: local
gather_facts: no
tasks:
- name: node create
command: "knife node create {{ hostname | quote }}"
Run Code Online (Sandbox Code Playgroud)
和我的库存文件看起来像:
[qa-hosts]
10.10.10.11 hostname=example-server-1
Run Code Online (Sandbox Code Playgroud)
当然,它不会工作,因为库存有'qa-hosts'而且游戏是'127.0.0.1',因为我希望该游戏从我的本地机器运行.
有人会帮我理解如何完成它.基本上,我想获取变量'hostname'并将其传递给上面的play块.
我喜欢委托。这是一个在localhost 上为每个主机运行getent主机的示例:
---
- hosts: all
connection: ssh
gather_facts: true
tasks:
- name: Lookup ansible_hostname in getent database
command: getent hosts {{ ansible_hostname }}
delegate_to: localhost
register: result
- name: Show results
debug:
var: result.stdout
delegate_to: localhost
Run Code Online (Sandbox Code Playgroud)
您可以使用以下 play 访问主机名,因为清单信息可作为主机变量使用。
- hosts: 127.0.0.1
connection: local
gather_facts: no
tasks:
- debug: var=hostvars
- name: node create
command: "knife node create {{ hostvars[item]['hostname'] }}"
with_items:
- "{{ groups['qa-hosts'] }}"
Run Code Online (Sandbox Code Playgroud)
另一种选择是local_action。
在两者delegate_to
和的情况下local_action
,请注意,如果become = yes
那么 Ansible 当然会隐式地尝试调用操作 using sudo
,然后可能会失败,因为 local 的密码sudo
将与您为 remote 输入的任何密码不同sudo
。
归档时间: |
|
查看次数: |
18643 次 |
最近记录: |