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

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


service:ansible

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:ansible [27.02.2025 12:32] – [Переменная в кавычках] 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>
  
 ===== Задача ===== ===== Задача =====
Строка 538: Строка 547:
     - ../templates/*.j2     - ../templates/*.j2
 </code> </code>
-:!: Note with_fileglob always operates from ''files/'', you can get to templates with ''../templates/mytemplate/*''+:!: 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 https://serverfault.com/questions/578544/deploying-a-folder-of-template-files-using-ansible
Строка 895: Строка 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> 
 ====== Ошибки, проблемы ====== ====== Ошибки, проблемы ======
  
Строка 932: Строка 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.1740659555.txt.gz · Последнее изменение: 27.02.2025 12:32 — viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki