Примеры ролей ansible для установки сервисов и настройки системы

Шаг – 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

Examples

- name: Ensure SELinux is set to enforcing mode
  ansible.builtin.lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=enforcing

- name: Make sure group wheel is not in the sudoers configuration
  ansible.builtin.lineinfile:
    path: /etc/sudoers
    state: absent
    regexp: '^%wheel'

- name: Replace a localhost entry with our own
  ansible.builtin.lineinfile:
    path: /etc/hosts
    regexp: '^127\.0\.0\.1'
    line: 127.0.1 localhost
    owner: root
    group: root
    mode: '0644'

- name: Replace a localhost entry searching for a literal string to avoid escaping
  lineinfile:
    path: /etc/hosts
    search_string: '127.0.0.1'
    line: 127.0.1 localhost
    owner: root
    group: root
    mode: '0644'

- name: Ensure the default Apache port is 8080
  ansible.builtin.lineinfile:
    path: /etc/httpd/conf/httpd.conf
    regexp: '^Listen '
    insertafter: '^#Listen '
    line: Listen 8080

- name: Ensure php extension matches new pattern
  lineinfile:
    path: /etc/httpd/conf/httpd.conf
    search_string: '<FilesMatch ".php?$">'
    insertafter: '^\t<Location \/>\n'
    line: '        <FilesMatch ".php?$">'

- name: Ensure we have our own comment added to /etc/services
  ansible.builtin.lineinfile:
    path: /etc/services
    regexp: '^# port for http'
    insertbefore: '^www.*80/tcp'
    line: '# port for http by default'

- name: Add a line to a file if the file does not exist, without passing regexp
  ansible.builtin.lineinfile:
    path: /tmp/testfile
    line: 192.168.1.99 foo.lab.net foo
    create: yes


- name: Ensure the JBoss memory settings are exactly as needed
  ansible.builtin.lineinfile:
    path: /opt/jboss-as/bin/standalone.conf
    regexp: '^(.*)Xms(\d+)m(.*)$'
    line: '\1Xms${xms}m\3'
    backrefs: yes


- name: Validate the sudoers file before saving
  ansible.builtin.lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%ADMIN ALL='
    line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
    validate: /usr/sbin/visudo -cf %s


- name: Use backrefs with alternative group syntax to avoid conflicts with variable values
  ansible.builtin.lineinfile:
    path: /tmp/config
    regexp: ^(host=).*
    line: \g<1>{{ hostname }}
    backrefs: yes

Authors

  • Даниэль Хокка Закриссони (@dhozac)
  • Ахти Китсик (@ahtik)
  • Хосе Анхель Муньос (@imjoseangel)

2012–2018 Майкл ДеХан 2018–2021 Red Hat, Inc.Лицензируется по версии 3 Стандартной общественной лицензии GNU.https://docs.ansible.com/ansible/2.11/collections/ansible/builtin/lineinfile_module.html

Один, with_file

Предположим, что на вашем доступном хосте есть несколько файлов (примечание: это файл на доступном хосте, а не файл на удаленном целевом хосте), и вы хотите получить содержимое этих файлов, вы можете использовать ключевое слово with_file для цикла Получите содержимое этих файлов, примеры следующие:

Как показано в приведенном выше примере, мы определили список. В этом списке есть два пути к файлам, а именно «/testdir/testdir/a.log» и «/ opt / testfile», оба из которых находятся на доступном хосте. File, мы обработали этот список с помощью ключевого слова with_file, затем мы выполняем вышеприведенную книгу воспроизведения, чтобы увидеть, можно ли получить соответствующее содержимое файла.После выполнения приведенного выше примера модуль отладки выводит следующую информацию:

Как показано выше, playbook в приведенном выше примере успешно получил содержимое каждого файла в списке файлов, и мы можем обнаружить, что целевым хостом playbook в приведенном выше примере является testB, а testB не является доступным хостом. Это удаленный целевой хост. В моей тестовой среде server4 является доступным хостом. Таким образом, мы можем обнаружить, что независимо от того, кто является целевым хостом, мы можем получить содержимое файла на доступном хосте с помощью ключевого слова with_file.

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

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

    - 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

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

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

Рисунок 01: Playbook в действии

11 ответов

Лучший ответ

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

Он копирует оба элемента в другой каталог. В этом примере один из элементов является каталогом, а другой — нет. Работает отлично.

30

Jay
2 Янв 2018 в 17:42

Как скопировать каталог и поддиректории и файлы с сервера ansible на удаленный хост

namasivayam.cse
21 Июл 2020 в 09:34

Я тоже занимался целый день! и наконец нашел решение в команде вместо copy: или command: , как показано ниже:

Строго уведомить: 1. src_path и des_path заканчиваются символом 2. в оболочке команда src_path заканчивается , которая показывает все содержимое каталога 3. Я использовал свое имя-удаленного-сервера как в hosts:, так и в командной оболочке. раздел jenkins вместо спецификатора в playbook.

Я думаю, это хороший совет запустить команду ниже в разделе Execute Shell в jenkins:

2

foad322
24 Май 2018 в 08:20

Чтобы рекурсивно скопировать содержимое папки и убедиться, что задача остается идемпотентной, я обычно делаю это следующим образом:

Обратной стороной является то, что команда find по-прежнему отображается как измененная.

4

dvanrensburg
16 Авг 2016 в 14:01

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

Это решает следующий вопрос @ surfer190:

— это глобус оболочки, поскольку он полагается на вашу оболочку для перечисления всех файлов в папке перед запуском , в то время как напрямую инструктирует { {X3}}, чтобы получить содержимое каталога (см. https://askubuntu.com/questions/86822/how-can-i-copy-the-contents-of-a-folder-to-another-folder-in-a -different-directo )

10

fractalic
20 Ноя 2017 в 04:05

Вы можете использовать модуль синхронизировать. Пример из документации:

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

48

Aidan Feldman
28 Авг 2017 в 04:55

Это я нашел идеальное решение для копирования файла с сервера Ansible на удаленный.

копирование файла yaml

Dilip
7 Дек 2017 в 09:22

Чтобы скопировать содержимое каталога в другой каталог, вы можете использовать модуль ansibles :

Из :

Если (src!) Path — это каталог, он копируется рекурсивно … … если путь заканчивается на «/», в место назначения копируется только внутреннее содержимое этого каталога . … если он не заканчивается на «/», копируется сам каталог со всем содержимым.

1

andymel
18 Июн 2020 в 09:02

Ниже работал у меня,

1

Sakharam Thorat
25 Сен 2017 в 12:27

Я нашел обходной путь для рекурсивного копирования с удаленного на удаленный:

2

agrimal
23 Фев 2018 в 01:11

Модуль Ansible Copy по умолчанию копирует файлы / каталоги с управляющей машины на удаленную. Если вы хотите скопировать файлы / каталоги на удаленный компьютер и у вас установлен Ansible 2.0 , установите для значение

31

helloV
13 Окт 2020 в 15:46

Два, with_fileglob

Поняв ключевое слово with_file, давайте поговорим о другом ключевом слове, которым является with_fileglob.

«with_file» используется для получения содержимого файла, а «with_fileglob» используется для сопоставления имени файла. Мы можем использовать ключевое слово «with_fileglob» для сопоставления имени файла, которое соответствует шаблону в указанном каталоге, «with_file» и «with_fileglob» «Есть также те же места, все они работают с файлами доступного хоста, а не целевого хоста. Затем давайте посмотрим на небольшой пример« with_fileglob », пример выглядит следующим образом:

Из возвращенной информации мы можем видеть, что «/ testdir /» в playbook в приведенном выше примере соответствует в общей сложности 5 файлам, поэтому есть ли только эти 5 файлов в каталоге «/ testdir», мы Для подтверждения проверьте файлы в каталоге «/ testdir» следующим образом: Как видно из приведенной выше информации, в каталоге «/ testdir» всего шесть элементов. Два элемента — это каталоги, а четыре элемента — файлы

Предыдущая книга воспроизведения соответствует только файлам, не включая Каталог, поэтому нам нужно обратить внимание на то, что «with_fileglob» будет соответствовать только файлам в указанном каталоге, но не будет соответствовать каталогам в указанном каталоге

В playbook в приведенном выше примере мы указали только один путь. Конечно, мы также можем указать несколько путей. Пример playbook выглядит следующим образом:

Видно, что те, которые не соответствуют правилу подстановочных знаков, не будут возвращены.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: