Как ansible может вызывать несколько файлов в параметре пути в качестве переменной - PullRequest
0 голосов
/ 12 июля 2020

Я просто изучаю ansible и пытаюсь понять, как я могу включить несколько файлов в путь option в ansible replace модуль.

У меня есть три файла, в которых мне нужно заменить a old hostname с new hostanme.

Файлы:

 - /etc/hosts
 - /etc/hosts.custom
 - /etc/hosts-backup

Ниже Simple Play отлично работает:

- name: Replace string in hosts file
  hosts: all
  gather_facts: false
  tasks:
    - name: Replace string in host file
      replace:
        path: /etc/hosts
        regexp: "171.20.20.16   fostrain.example.com"
        replace: "171.20.20.16   dbfoxtrain.example.com"
        backup: yes

Однако после большого количества поисковых запросов я вижу это можно сделать следующим образом, но в случае, если у меня несколько файлов, и они должны вызываться как переменные в разных модулях, как мы можем определить их таким образом, чтобы вызывать их по имени переменной.

Ниже показано то, что я пытаюсь понять ..

- name: Replace string in hosts file
  hosts: all
  gather_facts: false
  tasks:
    - name: Checking file contents
      slurp:
        path: "{{ ?? }}"  <-- How to check these three files here
      register: fileCheck.out

    - debug:
        msg: "{{ (fileCheck.out.content | b64decode).split('\n') }}"

    - name: Replace string in host file
      replace:
        path: "{{ item.path }}"
        regexp: "{{ item:from }}"
        replace: "{{ item:to }}"
        backup: yes
     loop:
       - { path: "/etc/hosts", From: "171.20.20.16   fostrain.example.com", To: "171.20.20.16   dbfoxtrain.example.com"}
       - { Path: "/etc/hosts.custom", From: "171.20.20.16   fostrain.example.com", To: "171.20.20.16   dbfoxtrain.example.com"}
       - { Path: "/etc/hosts-backup", From: "171.20.20.16   fostrain.example.com", To: "171.20.20.16   dbfoxtrain.example.com"}

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 12 июля 2020

Создать пару переменных; список со всеми файлами, от и до заменяющих строк или разделить их по ip и домену. Затем l oop по всем файлам, используя переменную списка файлов, и переменные от и до замены для каждого файла. Если требуется несколько IP-адресов и сопоставление доменов, вам необходимо дополнительно настроить структуру. Поэтому рекомендуем просмотреть ansible документацию по , используя переменные и циклы для получения дополнительной информации.

Playbook может выглядеть так, как показано ниже. Вы использовали второстепенное регулярное выражение, и вы можете настроить его по мере необходимости.

- name: Replace string in hosts file
  hosts: all
  gather_facts: false
  vars:
    files:
      - /etc/hosts
      - /etc/hosts.custom
      - /etc/hosts-backup
    from_ip: "171.20.20.16"
    from_dn: "fostrain.example.com"
    to_ip: "171.20.20.16"
    to_dn: "dbfoxtrain.example.com"
  tasks:
    - name: Replace string in host file
      replace:
        path: "{{ item }}"
        regexp: "{{ from_ip }}\\s+{{ from_dn }}"
        replace: "{{ to_ip }} {{ to_dn }}"
      loop: "{{ files }}"

Если вы хотите увидеть содержимое каждого файла, то можно использовать модули slurp и debug, как показано ниже:

    - slurp:
        path: "{{ item }}"
      loop: "{{ files }}"
      register: contents
    
    - debug:
        msg: "{{ (item.content | b64decode).split('\n') }}"
      loop: "{{ contents.results }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...