一项任务将不同的lineinfile分配到不同的域

时间:2018-08-13 19:21:15

标签: ansible

我试图创建一个剧本来将行插入到/ etc / hosts中。 棘手的部分是-主机域的确切区别是不同的。 我以下面的(有效的)剧本结束了两个任务:

- hosts: all
  tasks:
    - name: "Add line to /etc/hosts -UK"
      lineinfile: path=/etc/hosts
                  line='192.168.1.2 hostname.uk.com'
      when: ansible_domain == ".uk.com"
    - name: "Add line to /etc/hosts -US"
      lineinfile: path=/etc/hosts
                  line='192.168.255.255 hostname.us'
      when: ansible_domain == "us"

但是我只是不喜欢它:) 当我拥有10个域名时,我该怎么办? 有没有一种方法可以创建仅需完成一项任务的剧本?

1 个答案:

答案 0 :(得分:0)

您在这里:

- hosts: all

  vars:
    my_mapping:
      .uk.com:
        ip: 192.168.1.2
        fqdn: hostname.uk.com
      us:
        ip: 192.168.255.255
        fqdn: hostname.us

  tasks:
    - name: Add line to /etc/hosts
      lineinfile:
        path: /etc/hosts
        line: "{{ my_mapping[ansible_domain].ip }} {{ my_mapping[ansible_domain].fqdn }}"
  • 创建字典以域为键来映射值
  • 请参考模块参数中的字典值