вторник, 9 декабря 2014 г.

Плавная миграция Puppet -> Ansible

Надоели мучения с puppet. Иногда лучше час потерять, а затем за пять минут долететь — решил я, и начал принудительно все новые настройки раскатывать через ansible.

Пока доволен. В зависимости ролей через meta/main.yml вообще влюбился уже.

Почти ничего с работы показать нельзя, но вот мелкий рецептик, который для себя сделал ­— без секретов.

Поделюсь им.

Для нетерпеливых, вот целиком репозиторий на github.

Ничего особенного. но мне полезно.
Что оно делает, берет некий стабильный debian 7, который выдается почти любым провайдером vds.

Обновляет его до debian/testing, настраивает минимально необходимый софт, screen, git, vim, zsh.

Клонирует мои настройки vim с github, и настраивает zsh с помощью oh-my-zsh.

Ставит docker и несколько сетевых пакетов.


Мне это нужно, для очень простой вещи. В рамках своего импортозамещения я тестирую российские vds просто пачками.

Провожу эти операции что я перечислил, затем в докерах поднимаю свои образы, и несколько дней снимаю статистику.

Подробные результаты будут позже, но забегая вперед: уже есть кандидаты на замену Digital Ocean.


Итак, какие фокусы я использую в этом репозитории.

Первый: установка simplejson модуля питона через модуль ansible raw.

Благодаря этому, я совсем никогда не захожу на эти vds что б создать условия для работы ansible. Он создает их себе сам.

Второй: модифицируем PATH для команды apt-get install.
Удивительный какой то факт, не на всех хостингах, но иногда я сталкиваюсь с тем что start-stop-daemon и прочие команды из /sbin не могут быть выполнены.
Делаем это прописав в роли
  environment:                
    PATH: /usr/sbin:/sbin/:{{ ansible_env.PATH }}
Третий: Используем простые зависимости, типа:
dependencies:
      - { role: zsh }         
      - { role: sudo }        
      - { role: vim }

Я для теста использовал многоуровневые зависимости, и был очень доволен как они разрешаются.

Четвертый: Используем как файлы и из этого репозитория
  copy: src="screenrc" dest="/root/.screenrc"
 так и файлы из хост машины
key="{{ lookup('file', '/home/iv/.ssh/id_dsa.pub') }}"

Пока всё. 

Следующая серия будет про управление docker контейнерами через ansible.