Ansible

From Efnez wiki
Jump to navigation Jump to search

Ansible — yet another система управления конфигурациями.

Установка

epmi ansible ansible-shell

Настройка

Включить копирование файлов

Без этой опции возникали ошибки при копировании файлов. Указанная настройка полезна в целях совместимости с различными системами.

cd /etc/ansible

diff ansible.cfg ansible.cfg.rpmnew 
209c209
< scp_if_ssh = True
---
> #scp_if_ssh = True

Указать список машин

Видимо, в /etc/ansible/hosts

[servers]
server1
server2
server3

[clients]
user1
user2


[test]
testcpu

Запуск

  • Посмотреть доступную память
ansible servers -m shell -a 'sudo dmidecode --type memory | egrep "(Size:*|Type: DDR*)" | egrep -v "(Installed S |Enabled|Not I)" | sort | uniq -c'
  • Альтернативный вариант, используя модуль setup:
ansible -m setup -a 'filter=ansible_memtotal_mb' all:
  • Установить nano
ansible test -m shell -a 'sudo epmu; sudo epmi nano'

Пример вывода

Вывод "цветастый": зеленый в случае успеха (exit 0), красный - в других случаях.

 ansible pc -m shell -a 'sudo dmidecode --type memory | egrep "(Size:*|Type: DDR*)" | egrep -v "(Installed S |Enabled|Not I)" | sort | 

atlant | success | rc=0 >>
      2 	Installed Size: 512 MB (Double-bank Connection)
      1 	Maximum Memory Module Size: 1024 MB
      1 	Maximum Total Memory Size: 2048 MB
      2 	Size: 512 MB

buh | FAILED => SSH Error: ssh: connect to host buh port 22: No route to host
    while connecting to 192.168.0.49:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

Задача установки пакетов

В нашем случае использование epm предпочтительно:

# ansible test -m shell -a 'epm Install vim'

В Ansible 2.0+ есть простой модуль package (позволяет поставить пакет и выбрать систему AUTO/apt/yum/...), но в AltLinux p7 версия 1.9.2 - тут такой модуль отсутствует.

Задача внесения правки в какой-либо конфиг

Используется модуль lineinfile, целевой файл задается параметром dest:

 ansible testgroup -m lineinfile -a "dest=/tmp/testfile regexp='^PARAM=' line='PARAM=hohoho' "

Особенности применения команды:

  • файл должен существовать, иначе - ошибка, иначе следует добавить, например, 'create=yes owner=anton group=users mode=0600';
  • каталог с dest-файлом должен быть доступен на запись даже, если бекап не делается (по умолчанию, он не делается);
  • бекапный файл имеет вид: testfile.2016-02-16@16:55:14~
  • если строка в конфиге именно такая, какую мы хотим вписать, то результат операции - success, но изменений файла нет (указывается в выводе-отчете) и его бекап не делается;
  • исправление вносится только в последнее вхождение regexp, а в случае его отсутствия или незадания - добавляется в конец файла.

Ссылки