Skip to main content

Запуск и элементы управления ansible скриптами

Запуск одного действия
ansible [host/group/all] [action parameters]
Действия 
-a "shell command" shell command
-m exec_name installed module
-i <filename> inventory file
--become все команды + sudo
--become-user user1 обязательно с become, переключается на выбранного пользователя
-f 1 использование одного потока. По умолчанию процессы параллельно для всех хостов. 
Пример:
ansible multi -a "hostname"

Запуск через ansible playbook

Список действий сохраняется в файле *.yml (playbook)
ansible-playbook filename.yml
Структура playbook файла
---
- hosts: [host ip | host group | all]
    remote_user: []
    become: true
    tasks:
      - [task 1]
      - [task n]
---
- hosts: [host ip | host group | all]
    remote_user: []
    become: true
    tasks:
      - [task 1]
      - [task n]

Параметры задачи

gather_facts: False Проводить сбор данных по умолчанию
ignore_errors: True Прекращать или нет работу при ошибке

Условия (handlers)

when: ansible_os_family == "Debian"

Получить список фактов:

- name: Show facts available on the system
  ansible.builtin.debug:
  var: ansible_facts

В папке /etc/ansible/facts.d/*.fact файлы с локальными фактами о машине. Обращение к фактам в yaml: 

ansible_local.<fact file name>.<fact group inside file>.<varname>

Создание новой переменной: 

set_fact:<valname>=<...>

Циклы (loops)

Цикл с объявленной переменной:

 - name: use apt to install multiple apps
   apt:
     name: '{{ app }}'
     state: latest
     update_cache: yes
     vars:
       app:
         - htop
         - mc
         - nload
     become: yes

Цикл с необъявленной переменной:

- name: use apt to install multiple apps
  apt:
    name: '{{ item }}'
    state: latest
    update_cache: yes
    loop:
      - htop
      - mc
      - nload
    become: yes


Цикл с переменной-словарем 

- name: install python packages
  pip: name={{item.name}} version={{item.version}}
  become: True
  with_items:
    - {name=mezzanine, version=1.2.1}
	- {name=guincorn, version=3.2.9}