使用ansible读取主机IP地址并在以后使用它的最佳方法是什么?

时间:2017-08-18 12:39:37

标签: ansible

我有3个主机,第一个是控制器,另外两个用作灯。我必须在ansible中编写一个剧本,找到每个主机的IP地址,然后在相同的ansible剧本中进行设置。    基本上我想将它保存在一个变量中并在以后使用它。

以下是我的阅读方式

---
- hosts: localhost
  connection: local
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - debug: var=ansible_default_ipv4.address 

这是我想要使用的地方:

---
- hosts: laborator
  become: yes
  become_user: root

  tasks:
    - name: Create directory for php page
      file:
        path: /var/www/html/virtual1
        state: directory
        owner: apache
        group: apache
        mode: 0775
        recurse: yes
    - name: ensure file exists
      copy:
        content: ""
        dest: /var/www/html/virtual1/info.php
        owner: apache
        group: apache
        force: no
        mode: 0555
    - name: Add a string to the new file
      lineinfile: dest=/var/www/html/virtual1/info.php
                regexp='^'
                line='<?php phpinfo(); ?>'
                state=present
    - name: Change file permissions
      file:
        path: /var/www/virtual1/info.php
        owner: apache
        group: apache
        mode: 0644
    - name: Set some kernel parameters
      lineinfile:
        path: /etc/hosts
        regexp: '^'
        line: '192.168.115.198 laborator1'  <<<-here*****

你可以看到我需要ip的行。我是新手,这是我的第二天,请指出我正确的方向。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您在游戏中使用gather_fact: yes(除非您在gathering config上禁用了,否则它是默认值),您将能够访问当前主机的ansible_default_ipv4.address值。
如果您想访问另一个主机(有一个gather_fact),您可以使用hostvars[INVENTORY_HOSTNAME].ansible_default_ipv4.address 每个界面也有ansible_ethX.ipv4.address

您可以使用setup module

查看所有可用变量
ansible all -m setup

变量doc:http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts

在您的情况下,可能是:

- name: Put IP of each laborator hosts in /etc/hosts
  lineinfile:
    path: /etc/hosts
    regexp: '^'
    line: '{{ hostvars[item].ansible_default_ipv4.address }} {{ hostvars[item].ansible_hostname }}'
  with_items: '{{ groups.laborator }}'