Добавить строку в файл после строки инвентаризации в ansible? - PullRequest
0 голосов
/ 27 апреля 2020

Это мой инвентарь:

[servers1]
ubuntu-vm1
ubuntu-vm2
ubuntu-vm3

[servers2]
centos-vm1
centos-vm2
centos-vm3

Что делает моя книга игр, так это проверяет необходимость перезагрузки сервера (я выяснил эту часть, поэтому я не буду публиковать ее здесь, это часть переменная reboot_stat). Теперь я хочу добавить строку ansible_hostname (имя сервера в инвентаре) в файл на моем локальном хосте, когда будет выполнено условие, что сервер должен быть перезагружен.

Вот как это выглядит сейчас:

- name: add to file what server needs a reboot
  lineinfile:
    path: /root/reboot-servers
    line: '{{ inventory_hostname }}'
  delegate_to: localhost 
  when: reboot_stat.stat.exists

Допустим, файл root/reboot-servers выглядит следующим образом:

[servers1]



[servers2]

И, скажем, только ubuntu-vm1 и centos-vm2 требуется перезагрузка. Я хочу, чтобы при запуске playbook он добавлял строку под своей переменной hostname, чтобы файл выглядел следующим образом:

[servers1]
ubuntu-vm1



[servers2]
centos-vm2

1 Ответ

1 голос
/ 27 апреля 2020

Редактировать: Изменено для комментария OP.

Попробуйте добавить опцию insertafter в задачу, чтобы указать lineinfile, куда поместить имя хоста:

- name: add to file what server needs a reboot
  lineinfile:
    path: /root/reboot-servers
    line: '{{ inventory_hostname }}'
    # insertafter: "{{ 'servers1' if inventory_host in groups['servers1'] else 'servers2' }}"
    insertafter: "{{ primary_group_tag }}"
  delegate_to: localhost 
  when: reboot_stat.stat.exists

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

[servers1:vars]
primary_group_tag="[servers1]"

[servers2:vars]
primary_group_tag="[servers2]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...