Как создать новый файл config в Ansible playbook

Я хотел создать файл с именем /etc/apt/apt.conf.d/1000-force-ipv4-transport  со значением, установленным на «Acquire :: ForceIPv4 true;» на 20 облачных серверах, размещенных в AWS. Я уже настроил Ansible playbook для автоматизации работы. Как создать новый файл с помощью Ansible playbook? Возможно ли, создать сложный файл со многими строками текста (скажем, squid.conf) с использованием инструмента автоматизации Ansible IT?

Вы можете использовать любой из следующих модулей для создания нового файла:

  1. Copy модуль – Копирует файлы в удаленные местоположения.
  2. Template модуль – Создает шаблон файла на удаленном сервере.

Как написать однострочный контент на удаленном сервере и создать файл

Синтаксис является довольно таки простым:

    - copy:
           content: "your config line here"
           dest: "/path/to/file"

Согласно документации:

При использовании вместо ‘src’, устанавливается содержимое файла непосредственно на указанное значение. Это подходит только для простых значений, для чего-либо сложного или требующего форматирование, пожалуйста, переключитесь на модуль шаблона (template).

Вот образец файла create-file.yml:

# create a file to force apt-get to use IPv4 only
  - copy:
         content: "Acquire::ForceIPv4 true;"
         dest: "/etc/apt/apt.conf.d/1000-force-ipv4-transport"

Где,

  1. content: «Acquire::ForceIPv4 true;» – устанавливает содержимое файла непосредственно в указанную строку;
  2. dest: «/etc/apt/apt.conf.d/1000-force-ipv4-transport » – устанавливает удаленный абсолютный путь, где файл должен быть скопирован/создан;
  3. backup: yes – удаленный абсолютный путь, куда должен быть скопирован файл;
  4. owner: root – задает пользователя, которому должен принадлежать файл/директория;
  5. group: root – задает группу, которой должен принадлежать файл/директория;
  6. mode: 0600 – задает разрешение файла, используя восьмеричные числа.

Итак, вот пример файла инвентаризации:

$ cat ~/hosts
[kvmhost]
192.168.2.45 ansible_user=root
192.168.2.46 ansible_user=root

Вот пример обновленного файла create-file.yml специально для вас:

---
# same config file
- hosts: kvmhost
  remote_user: root
  tasks:
          # create a new file on each host
          - copy: 
                  content: "Acquire::ForceIPv4 true;" 
                  dest: "/etc/apt/apt.conf.d/1000-force-ipv4-transport"
                  backup: yes
                  owner: root
                  group: root
                  mode: 0644
          # run apt-get too using IPv4 
          - apt:
                  update_cache: yes
                  cache_valid_time: 3600
                  upgrade: dist

Вы можете запускать его как обычно:

$ ANSIBLE_HOSTS=~/hosts; ansible-playbook create-file.yml

Примеры возможных выводов данных:

Как создать новый файл config в Ansible playbook
Рисунок 01: Playbook в действии

Как создать пустой файл в Ansible playbook

Синтаксис является довольно таки простым:

  file: 
       path: /usr/local/etc/my.conf
       state: touch
       owner: root
       group: root
       mode: 0600

Где,

  1. path: /usr/local/etc/my.conf  – устанавливает путь к управляемому файлу;
  2. state: touch – создает файл по пути;
  3. owner: root – задает пользователя, которому должен принадлежать файл/директория;
  4. group: root – задает группу, которой должен принадлежать файл/директория;
  5. mode: 0600 – задает разрешение файла, используя восьмеричные числа.

Как создать сложный файл с помощью ansible

Если вам нужно добавить несколько строк, используйте templates шаблонов. Шаблоны обрабатываются языком шаблонов Jinja2 и файлом, созданным на удаленном сервере.

Шаг – 1 Создание Ansible Playbook под названием squid.yml

$ cat squid.yml

Примеры возможных выводов данных:

# Create squid.conf
- hosts: kvmhost
  remote_user: root
  tasks:
          - template:
                  src: squid.conf.j2
                  dest: /etc/squid/squid.conf
                  owner: root
                  group: root
                  mode: '0644'
                  validate: '/usr/sbin/squid -k check'
                  backup: yes
          - service:
                  name: squid
                  state: restarted

Шаг – 2 Создание Jinja2 шаблона под названием squid.conf.j2

$ cat squid.conf.j2

Примеры возможных выводов данных:

acl mylan src {{ nixcraft_vlan_lan_subnet }}
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow mylan
http_access deny all
http_port {{ nixcraft_http_port }}
tcp_outgoing_address {{ nixcraft_cloud_server_ip }}
cache_mem {{ nixcraft_memory }} MB
cache_dir diskd /var/spool/squid 1024 16 256 Q1=72 Q2=64
access_log daemon:/var/log/squid/access.log squid
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .		0	20%	4320
forwarded_for delete
via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access X-Forwarded-For deny all

Шаг – 3 Обновление файла инвентаризации с именем ~ / hosts

Обновленный файл инвентаризации с помощью переменных для вашего шаблона squid.conf.j2:

$ cat ~/hosts
### my hosts ##
[kvmhost]
192.168.2.45 ansible_user=root
192.168.2.46 ansible_user=root
## variables with values ##
[kvmhost:vars]
nixcraft_vlan_lan_subnet=10.8.0.0/24
nixcraft_http_port=10.8.0.1:3128
nixcraft_cloud_server_ip=72.xxx.yyy.zzz
nixcraft_memory=1024

Шаг 4 – Запуск playbook для создания сложного файла squid.conf на удаленных серверах

Введите следующую команду:

$ ANSIBLE_HOSTS=~/hosts; ansible-playbook squid.yml

Для получения большей информации ознакомьтесь с документацией copytemplate и file модулей.

Перевод: Анна Давыдова
Источник: cyberciti.biz

Это интересно:

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *