ФорумРазработкаУстановка и администрирование ПОРазное ПО → Системы деплоя и у правления конфигурациями. Кто чем пользуется?

Системы деплоя и у правления конфигурациями. Кто чем пользуется?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 20 октября 2014 г. 11:06

    Интересно мнение знатоков, лично я пользуюсь Ansible для более-менее больши проектов и Fabric для мелких.

    Кто пользовался Chef/Puppet/Salt/Ansible? Каковы впечатления в сравнении с альтернативами?

    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 21 октября 2014 г. 2:31, спустя 15 часов 24 минуты 28 секунд

    пробовал chef и puppet. чото короче решил что мне пока не так надо ))))

    в будущем хотелось развернуть это решение, потратив 2 или 3 дня на знакомство и почти не получив результатов отложил задачу.

    Спустя 13 сек.

    а обещаю все красиво ага)

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 октября 2014 г. 2:49, спустя 18 минут 27 секунд

    Да, я тоже несколько раз брался использовать Chef и Puppet, но как-то они не приживались. Мне Ansible больше нравится, потому что:

    • Нет "агентов", а используется SSH
    • Он объективно проще и более понятный на мой взгляд
    • Он современный и меньше трудозатрат на написание сценариев, т.к. учтены текущие технологии, не надо городить огороды в сценариях как люди парятся в Chef и Puppet (это я понял по камментам к статьям в инете)
    • Он на Python и если что я легко могу исправить что-то, пройтись дебагером и найти проблему
    • Плагины можно писать на чем угодно, а нетолько на Ruby, главное чтобы они отдавали JSON. Т.е. контрибьютить плагины к нему проще людям и по идее их станет значительно больше со временем чем в Chef/Puppet

    Спустя 101 сек.

    Единственный минус это более простой веб-интерфейс, который называется сейчас Ansible Tower, но он мне не нужен, мне нужен только "playbook"

    У Chef и Puppet веб-интерфейс добротный и удобный, так по крайней мере говорят

    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 октября 2014 г. 5:46, спустя 2 часа 56 минут 46 секунд

    Во, статью встретил Ansible vs Chef [scriptrock.com]

    • У Chef не YAML, а JSON, что менее читабельно
    • Chef не поддерживает push, т.е. вы что-то изменили и ноды через агент сами когда-нибудь (про "крону") обновят что вы хотите. Puppet имеет push, а Ansible так и так пушной) т.к. через ssh делает сразу по запросу, без агентов

    Ну а минусы Ansible по версии статьи

    • слишком молодой
    • документация меньше
    • веб-интерфейс меньше
    • не работает под Windows/MacOSX

    Последнее конечно бред) Он будет везде работать как сервер, если есть SSH и как клиент при наличии питона

    Спустя 67 сек.

    По поводу документации, ее хоть и меньше, но она полна. Я когда его изучал - на все нашел ответ

    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 21 октября 2014 г. 6:18, спустя 32 минуты 19 секунд

    @adw0rd, you choose the best for me, dude! take this "KLASS!" please :)

    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 15 ноября 2014 г. 19:42, спустя 25 дней 14 часов 24 минуты

    @adw0rd, в Ansible есть возможность помещать сервера не в /etc/ansible/hosts, т.е. не в глобальный конфиг, а в пользовательскую директорию или директорию проекта?
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 15 ноября 2014 г. 19:59, спустя 16 минут 13 секунд

    нашёл, можно указывать директорию с настройками с ключом -i
    а можно чтобы без ключа подхватывал текущую директорию? типа как git подхватывает папку, если находит в ней .git
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 15 ноября 2014 г. 22:38, спустя 2 часа 39 минут 2 секунды

    ещё вопрос: как решается вопрос с sudo-доступом?
    я нашёл советы дать логину право на sudo без ввода пароля
    ну или каждый раз вводить пароль в консоли. но если серверов много - это значит что у них у всех будут одинаковые пароли.
    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 16 ноября 2014 г. 3:16, спустя 4 часа 37 минут 55 секунд

    Там есть опции sudo и sudo_user, я никаких паролей не делаю и явно sudoers не меняю, чуть позже скину конфиг

    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 16 ноября 2014 г. 4:28, спустя 1 час 11 минут 53 секунды

    В общем, я забыл сказать что я под рутом авторизуюсь на нодах, а после чего уже делаю sudo, поэтому sudoers не трогаю. Ну и авторизуюсб по ключу, который я указал при заказе сервера, поэтому как только я узнаю IP нового сервера, то запускаю для него разворачивание инфрастуктуры

    Спустя 186 сек.

    Пример запуска, допустим у меня есть тег init для разворачивания новой ноды:

    ansible-playbook -i inventories/node -l name_of_server site.yml --tags='init'
    ansible-playbook -i inventories/node -l name1,name2,name4 site.yml --tags='init'
    

    Либо всех нод в "inventories/node":

    ansible-playbook -i inventories/node site.yml --tags='init'
    ansible-playbook -i inventories/node site.yml --tags='init' --extra-vars='something=vars'
    

    Спустя 194 сек.

    Структура

    $ tree
    .
    ├── group_vars
    │   └── node
    ├── host_vars
    │   └── name1
    ├── inventories
    │   └── node
    ├── roles
    │   └── node
    │       ├── files
    │       │   └── ssh
    │       │       ├── config
    │       │       └── id_rsa
    │       ├── handlers
    │       │   └── main.yml
    │       ├── tasks
    │       │   ├── django.yml
    │       │   ├── main.yml
    │       │   ├── packages.yml
    │       │   └── user.yml
    │       └── templates
    │           ├── django
    │           │   └── local_settings.py.j2
    │           ├── postgresql
    │           │   └── ext.conf.j2
    │           └── something
    │               └── something.conf.j2
    └── site.yml
    

    Спустя 47 сек.

    site.yml

    ---
    - hosts: node
      roles:
      - node
    

    Спустя 87 сек.

    group_vars/node

    ansible_ssh_host: 127.0.0.1
    ansible_ssh_port: 22
    ansible_ssh_user: root
    ansible_ssh_private_key_file: roles/node/files/ssh/id_rsa
    sudo_user: ubuntu
    ... остальные общие переменные
    

    Спустя 94 сек.

    inventories/node

    [node]
    name1 ansible_ssh_host=203.0.113.1
    name2 ansible_ssh_host=203.0.113.2
    name3 ansible_ssh_host=203.0.113.3
    

    Спустя 109 сек.

    roles/node/tasks/main.yml

    ---
    
    - include: user.yml
    - include: packages.yml
    - include: django.yml
    

    roles/node/tasks/user.yml

    ---
    - name: Creating User
      user: name={{ sudo_user }}
            state=present
            shell=/bin/bash
            home="/home/{{ sudo_user }}"
      tags: [init]
    
    - name: Making ~/.ssh
      file: path="/home/{{ sudo_user }}/.ssh"
            owner={{ sudo_user }}
            group={{ sudo_user }}
            state=directory
            recurse=yes
            mode=0700
      tags: [init]
    
    - name: Putting ~/.ssh/id_rsa
      copy: src=ssh/id_rsa
            owner={{ sudo_user }}
            group={{ sudo_user }}
            dest="/home/{{ sudo_user }}/.ssh/id_rsa"
            mode=0600
      tags: [init, update]
    
    - name: Putting ~/.ssh/config
      copy: src=ssh/config
            owner={{ sudo_user }}
            group={{ sudo_user }}
            dest="/home/{{ sudo_user }}/.ssh/config"
            mode=0600
      tags: [init, update]
    

    roles/node/tasks/packages.yml

    ---
    
    - name: Setting Locale
      command: locale-gen en_US.UTF-8 en_US
      tags: [init]
    
    - name: Reconfigure Locales
      command: dpkg-reconfigure locales
      tags: [init]
    
    - name: Update Locale
      command: update-locale en_US.UTF-8
      tags: [init]
    
    - name: Apt-get Update
      command: apt-get update
      tags: [init]
    
    - name: Installing user specific env
      command: "apt-get -y install curl htop screen emacs24-nox mc git supervisor ntp make"
      tags: [init]
    
    ....
    
    adw/0
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 17 ноября 2014 г. 0:48, спустя 20 часов 20 минут 9 секунд

    дело в том, что иногда бывает нужен запуск команды через sudo, не от рута. например, rvm так ставится. я решил ситуацию созданием специального пользователя для ansible и добавлением его в группу sudo
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 17 ноября 2014 г. 2:07, спустя 1 час 19 минут 40 секунд

    воу воу воу! палехче с такими вкусняшками с утра!

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 17 ноября 2014 г. 7:58, спустя 5 часов 50 минут 9 секунд

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

    @master, ну да, у нас разные ситуации, но я бы также сделал как и ты, особо других вариантов не вижу

    adw/0
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 18 февраля 2015 г. 9:36, спустя 93 дня 1 час 38 минут

    @adw0rd, создал группу из серверов, задал им доступ по ключу, но при запуске ansible-playbook пароль для ключа запрашивается несколько раз. Подскажи, если знаешь, как сделать, чтобы пароль запрашивался один раз.
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 18 февраля 2015 г. 10:07, спустя 31 минуту 16 секунд

    Разобрался. Перед запуском ansible-playbook нужно ввести команды

    $ ssh-agent bash
    $ ssh-add ~/.ssh/id_rsa
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!