Файл обновления Ansible с использованием номеров строк

Как я могу заставить Ansible обновлять все строки после строки 9 с изменениями моего файла, оставив только предыдущие строки?

Я использую Ansible, чтобы файлы на моих серверах были единообразными. Я собрал удобный файл, который можно развернуть на сервере, чтобы быстро получить настройки и конфигурации. Этот файл используется несколькими пользователями, и каждый пользователь имеет свою уникальную информацию в файле.

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

Кроме того, если есть способ не переопределять информацию, специфичную для пользователя, я могу создать функцию bash, позволяющую мне указать, каких пользователей я хочу обновить.

Вот моя текущая инструкция:

---
- hosts: dmz
  vars: 
      curUser: "{{ ansible_ssh_user }}"
      allUsers:
        - { name: johnDoe, gecos: "John D, XXXX S Sad Ln" }
        - { name: janeFrank, gecos: "Jane F, XXXX W Happy Dr" }
  tasks:
## =============== Updates the user's /foo/bar/user/FILE with the /foo/bar/FILE
    - name: distribute_File
      sudo: yes
      template: src=/home/{{ curUser }}/FILE dest=/home/{{ item.name }}/FILE owner={{ item.name }} backup=yes
      with_items: allUsers
      ignore_errors: true

## ===================================== Update user specific information
    - name: updateName
      sudo: yes
      lineinfile: dest=/home/{{ item.name }}/FILE regexp="^username=" line="username={{ item.name }}"
      with_items: allUsers

    - name: updateGecos
      sudo: yes
      lineinfile: dest=/home/{{ item.name }}/FILE regexp="^usergecos=" line="usergecos=\"{{ item.gecos }}\""
      with_items: allUsers

person Andrew Smith    schedule 05.06.2015    source источник
comment
Могут ли у вас быть маркеры (комментарии) в этом файле? Тогда можно будет с lineinfile записать и ваш базовый шаблон. Я еще не пробовал, но в Galaxy есть blockinfile модуль: galaxy.ansible.com / list # / roles / 1475 - что ускорит вашу игру, если вы напишете несколько строк.   -  person udondan    schedule 06.06.2015
comment
Не могли бы вы дать нам больше информации о том, чего вы на самом деле пытаетесь достичь? Что это за файл и каков пример того, во что вы хотите его превратить? Может быть, есть более простой способ сделать это.   -  person Antonis Christofides    schedule 06.06.2015
comment
@udondan Да, я могу помещать комментарии в любой файл. Хотя blockinfile выглядит так, будто ищет строку и заменяет ее. На самом деле я ищу противоположную функциональность. Я хочу найти строку и сохранить ее, изменив все остальное.   -  person Andrew Smith    schedule 08.06.2015
comment
@AntonisChristofides Это файл настройки учетной записи, содержащий множество скриптов и информации для быстрого и точного создания учетной записи. У каждого пользователя есть множество уникальных данных учетной записи, которые необходимо сохранить во время обновления. Остальная часть файла является универсальной и работает для всех пользователей. Это помогает объяснить ситуацию?   -  person Andrew Smith    schedule 08.06.2015
comment
Итак, первые 9 строк содержат конфигурацию для конкретного пользователя, тогда как остальные строки всегда содержат одну и ту же информацию? Было бы предпочтительнее разделить этот файл на две части - первые 9 строк будут одним файлом конфигурации для конкретного пользователя, остальные будут общим для всех файлом. Это похоже на отделение программы от ее конфигурации.   -  person Antonis Christofides    schedule 09.06.2015
comment
@AntonisChristofides Спасибо за идею, но я уже исследовал этот путь. Чтобы реализовать это изменение, нам придется серьезно переработать скрипты и вспомогательные файлы. В моих экспериментах и ​​исследованиях есть функция Replace, хотя я не могу понять, как (или если) я могу использовать другой файл в качестве источника. Вы знакомы с такой функциональностью?   -  person Andrew Smith    schedule 09.06.2015


Ответы (1)


Итак, что я в итоге сделал: сначала зарегистрируйте информацию с помощью причудливой оболочки и зарегистрируйте команды.

Затем я использовал шаблон, чтобы скопировать новый файл.

Наконец, я использовал зарегистрированную информацию в командах lineinfile, чтобы заменить определенные строки зарегистрированной информацией.

Это не так элегантно и просто, как я надеялся, но работает. Спасибо Антонису и Удондану за идеи, они помогли мне обдумать проблему в целом.

person Andrew Smith    schedule 12.06.2015