如何通过ansible-playbook运行本地命令

时间:2017-05-16 14:47:16

标签: ansible

我正在尝试运行一些本地命令,遍历库存文件并将每个主机名作为参数传递给本地命令。

例如:我想运行命令"刀节点创建{{hostname}}"在我的本地机器(笔记本电脑)。剧本是:

- name: Prep node
  hosts: 127.0.0.1
  connection: local
  gather_facts: no
  tasks:
  - name: node create
    command: "knife node create {{ hostname | quote }}"

我的库存文件如下:

[qa-hosts]
10.10.10.11 hostname=example-server-1

当然,它不会起作用,因为库存有' qa-hosts'因为我希望播放从我的本地机器上播放,所以该播放用于' 127.0.0.1&#39 ;.

有人会帮我理解如何完成它。基本上,我想要变量'主机名'并将其传递到上面的游戏块。

3 个答案:

答案 0 :(得分:5)

我喜欢 delegate_to 。以下示例在 localhost 上为每个主机运行 getent hosts

---
- 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

答案 1 :(得分:4)

您可以使用以下播放来访问主机名,因为广告资源信息可用作hostvars。

- 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'] }}"

答案 2 :(得分:0)

另一种选择是local_action

对于delegate_tolocal_action而言,请注意,如果become = yes,那么Ansible当然会隐式尝试使用sudo来调用动作,然后可能会失败,因为本地sudo的密码将不同于您为远程sudo输入的任何密码。