Я хотел создать файл с именем /etc/apt/apt.conf.d/1000-force-ipv4-transport со значением, установленным на «Acquire :: ForceIPv4 true;» на 20 облачных серверах, размещенных в AWS. Я уже настроил Ansible playbook для автоматизации работы. Как создать новый файл с помощью Ansible playbook? Возможно ли, создать сложный файл со многими строками текста (скажем, squid.conf) с использованием инструмента автоматизации Ansible IT?
Вы можете использовать любой из следующих модулей для создания нового файла:
- Copy модуль – Копирует файлы в удаленные местоположения.
- 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"
Где,
- content: «Acquire::ForceIPv4 true;» – устанавливает содержимое файла непосредственно в указанную строку;
- dest: «/etc/apt/apt.conf.d/1000-force-ipv4-transport » – устанавливает удаленный абсолютный путь, где файл должен быть скопирован/создан;
- backup: yes – удаленный абсолютный путь, куда должен быть скопирован файл;
- owner: root – задает пользователя, которому должен принадлежать файл/директория;
- group: root – задает группу, которой должен принадлежать файл/директория;
- 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
Примеры возможных выводов данных:
Как создать пустой файл в Ansible playbook
Синтаксис является довольно таки простым:
file: path: /usr/local/etc/my.conf state: touch owner: root group: root mode: 0600
Где,
- path: /usr/local/etc/my.conf – устанавливает путь к управляемому файлу;
- state: touch – создает файл по пути;
- owner: root – задает пользователя, которому должен принадлежать файл/директория;
- group: root – задает группу, которой должен принадлежать файл/директория;
- 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
Для получения большей информации ознакомьтесь с документацией copy, template и file модулей.
Перевод: Анна Давыдова
Источник: cyberciti.biz
Это интересно: