Инструменты пользователя

Инструменты сайта


service:ansible

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:ansible [27.02.2025 10:23] – [Collection ansible.posix does not support Ansible version] viacheslavservice:ansible [26.03.2025 13:33] (текущий) – [Литература] viacheslav
Строка 23: Строка 23:
 //Роли// в Ansible - это список //задач//.\\  //Роли// в Ansible - это список //задач//.\\ 
 //Плейбук// - это список //плеев//, где перечисляются роли и к каким серверам они применяются. //Плейбук// - это список //плеев//, где перечисляются роли и к каким серверам они применяются.
 +
 +===== ad-hoc команды =====
 +<code bash>
 +# k3 - имя целевого хоста, -m - модуль, -a - аргументы
 +# Создать каталог (рекурсивно, аналог mkdir -p)
 +ansible k3 -m file -a "path=/home/vasya/.config/systemd/user state=directory"
 +# проверка доступа к хосту
 +ansible k3 -m ping
 +</code>
  
 ===== Задача ===== ===== Задача =====
Строка 528: Строка 537:
 </code> </code>
 Т. е., ставить кавычки сами по себе и дополнительно применять команду. Одни кавычки отбросятся, вторые останутся. Т. е., ставить кавычки сами по себе и дополнительно применять команду. Одни кавычки отбросятся, вторые останутся.
 +
 +=== Копирование нескольких шаблонов одной задачей ===
 +<code yaml>
 +- name: Copy templates
 +  template:
 +    src: "{{ item }}"
 +    dest: /tmp/{{ item | basename | regex_replace('\\.j2$', '') }}
 +  with_fileglob:
 +    - ../templates/*.j2
 +</code>
 +:!: Note ''with_fileglob'' always operates from ''files/'', you can get to templates with ''../templates/mytemplate/*''
 +
 +https://serverfault.com/questions/578544/deploying-a-folder-of-template-files-using-ansible
 +
 ==== Динамические переменные ==== ==== Динамические переменные ====
 Используются для нескольких ОС, где разные пути к конфигам и один и тот же пакет называется по-разному, например apache2 в Debian и httpd в CentOS. Создаётся несколько файлов с переменными: Используются для нескольких ОС, где разные пути к конфигам и один и тот же пакет называется по-разному, например apache2 в Debian и httpd в CentOS. Создаётся несколько файлов с переменными:
Строка 881: Строка 904:
 <code bash> <code bash>
 {% if inventory_hostname in groups['t01'] or inventory_hostname in groups['t03'] %} {% if inventory_hostname in groups['t01'] or inventory_hostname in groups['t03'] %}
-Секция, которую надо вставить+Секция, которую надо вставить для хостов в группах t01 и t03 
 +{% else %} 
 +Секция, которую надо вставить для прочих хостов
 {% endif %} {% endif %}
 </code> </code>
 Если используются переменные из //фактов// (в примере ''inventory_hostname'' из [[https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html|спец. переменных]]), то в плейбуке надо не запрещать сбор этих фактов, т. е., ''gather_facts: false'' не применять. Если используются переменные из //фактов// (в примере ''inventory_hostname'' из [[https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html|спец. переменных]]), то в плейбуке надо не запрещать сбор этих фактов, т. е., ''gather_facts: false'' не применять.
  
-Дополнительно про инвентори: [[https://habr.com/ru/articles/509938/|Основы Ansible, без которых ваши плейбуки — комок слипшихся макарон, часть 2]]+Дополнительно про инвентори: [[https://habr.com/ru/articles/509938/|Основы Ansible, без которых ваши плейбуки — комок слипшихся макарон, часть 2]]\\ 
 +Template Designer Documentation: https://jinja.palletsprojects.com/en/stable/templates/ 
 + 
 +===== Выборка из словаря по значениям из списка ===== 
 +В зависимости от набора работающих служб получать набор строк для формирования API-запроса. Если есть работающие службы, которые отсутствуют в словаре, они будут пропущены по условию. 
 + 
 +<file yaml services_status.yml> 
 +- hosts: k3 
 +  roles: 
 +    - services_status 
 +  vars: 
 +    services: 
 +      project-service1: main 
 +      project-service2: thingy 
 +      project-service3: bonanza 
 +</file> 
 + 
 +<file yaml roles/services_status/tasks/main.yml> 
 +- name: Gather running services 
 +  shell: 
 +    cmd: systemctl --user --type service --state running --plain --quiet |grep ^project- |sed -E 's#\.service.*##' 
 +  register: running_services 
 + 
 +# В curl body - это --data '{"dataSources": ["main","thingy","bonanza"]}' 
 +- name: Update API 
 +  uri: 
 +    url: https://localhost/admin/api/update_metadata 
 +    user: admin 
 +    password: {{ pass }} 
 +    force_basic_auth: true 
 +    method: POST 
 +    validate_certs: false 
 +    body_format: json 
 +    body: 
 +      dataSources: 
 +        - "{{ services[item] }}" 
 +  with_items: 
 +    - "{{ running_services['stdout_lines'] }}" 
 +  when: item in services | list 
 +</file> 
 + 
 +Работают 1-я и 3-я службы, 2-я не работает. Значения получаются main и bonanza соответственно. 
 +<code bash> 
 +ansible-playbook services_status.yml  
 + 
 +TASK [services_status : debug] ********************************************************************************************************** 
 +ok: [k3] => (item=project-service1) => { 
 +    "msg": "Values are: main" 
 +
 +ok: [k3] => (item=project-service3) => { 
 +    "msg": "Values are: bonanza" 
 +
 +</code> 
 ====== Ошибки, проблемы ====== ====== Ошибки, проблемы ======
  
Строка 905: Строка 983:
 </code> </code>
  
-==== The processing instruction target matching "[xX][mM][lL]" is not allowed ==== +===== The processing instruction target matching "[xX][mM][lL]" is not allowed ===== 
-Ошибка после запуска jar, где 'log4j2.xml' настроен как конфигурация логов. Проблема в том, что первой строкой стоял комментарий, а на первой строке всегда должна стоять XML declaration. Вот так будет работать корректно:+Ошибка после запуска jar, где ''log4j2.xml'' настроен как конфигурация логов. Проблема в том, что первой строкой стоял комментарий, а там всегда должен быть XML declaration. Вот так будет работать корректно:
 <code xml> <code xml>
 <?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
Строка 918: Строка 996:
 [[https://www.youtube.com/playlist?list=PLg5SS_4L6LYufspdPupdynbMQTBnZd31N|ADV-IT - Уроки Ansible на Русском]]\\ [[https://www.youtube.com/playlist?list=PLg5SS_4L6LYufspdPupdynbMQTBnZd31N|ADV-IT - Уроки Ansible на Русском]]\\
 [[https://www.youtube.com/playlist?list=PLT98CRl2KxKEUHie1m24-wkyHpEsa4Y70|Getting started with Ansible (Learn Linux TV)]]\\ [[https://www.youtube.com/playlist?list=PLT98CRl2KxKEUHie1m24-wkyHpEsa4Y70|Getting started with Ansible (Learn Linux TV)]]\\
 +[[https://ezhvsalate.ru/posts/ansible-peredaem-json-v-tele-zaprosa-ispolzuia-modul-uri|Ansible: передаем json в теле запроса, используя модуль uri]]\\
  
  
service/ansible.1740651814.txt.gz · Последнее изменение: 27.02.2025 10:23 — viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki