Ранее мы использовали Playbook для работы с серверами. Пора изучить Ansible Roles т.к. это считается более профессиональная запись Playbook. В нашем случае мы переходим в следующий каталог и создаем там роль:
cd /etc/ansible # Создаем каталог sudo mkdir roles # Переходим в каталог rools cd roles/ # Создаем роль sudo ansible-galaxy init install_apache2 - install_apache2 was created successfully # Переходим в созданный каталог cd install_apache2/ # Смотрим структуру tree . ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml 8 directories, 8 files
Разберем подробнее, каждый элемент (пока они пустые, шаблоны):
* многие каталоги вверху часто и не нужны, далее их будем создавать сами.
Теперь воспользуемся кодом из:
Playbook: Блоки, условия и циклы. Lesson 7
--- - name: Install Apache hosts: all become: yes vars: source_folder: ./MyWebFiles destin_folder: /var/www/html tasks: - name: Check version Linux debug: var=ansible_os_family - block: - name: Install Apache web Server Debian apt: name=apache2 update_cache=yes state=latest - name: Start Debian service: name=apache2 state=started enabled=yes when: ansible_os_family== "Debian" when: ansible_os_family == "Debian" - block: - name: Install Apache web Server CentOS yum: name=httpd update_cache=yes state=latest - name: Start CentOS service: name=httpd state=started enabled=yes when: ansible_os_family== "CentOS" when: ansible_os_family == "CentOS" - name: Copy files in www CentOS&Debian copy: src={{ source_folder }}/{{ item }} dest={{ destin_folder }} mode=0555 loop: - "index.html" - "ico.png" notify: - Restart Apache CentOS - Restart Apache Debian handlers: - name: Restart Apache CentOS service: name=httpd state=restarted when: ansible_os_family == "CentOS" - name: Restart Apache Debian service: name=apache2 state=restarted when: ansible_os_family == "Debian"
Начнем перенос в Роль:
1. Переносим файлы
sudo mv MyWebFiles/*.html roles/install_apache2/files
sudo mv MyWebFiles/*.png roles/install_apache2/files
В итоге у нас будет:
tree ... ├── files │ └── index.html │ └── ico.png ...
2. Переносим vars
... vars: source_folder: ./MyWebFiles destin_folder: /var/www/html ...
Так как файлы мы уже перенесли, строчку "source_folder" нам больше не надо. Переносим только "destin_folder: /var/www/html" в файл "vars -> main.yml". Сам "vars:" нам ненужен.
Открываем файл:
sudo nano roles/install_apache2/vars/main.yml
Копируем данные в этот файл:
--- # vars file for install_apache2 destin_folder: /var/www/html
3. Переносим handlers
Открываем файл:
sudo nano roles/install_apache2/handlers/main.yml
Копируем данные в этот файл:
--- # handlers file for install_apache2 - name: Restart Apache CentOS service: name=httpd state=restarted when: ansible_os_family == "CentOS" - name: Restart Apache Debian service: name=apache2 state=restarted when: ansible_os_family == "Debian"
4. Переносим tasks
Открываем файл:
sudo nano roles/install_apache2/tasks/main.yml
Копируем данные в этот файл и немного меняем (см. в коде):
--- # tasks file for install_apache2 - name: Check version Linux debug: var=ansible_os_family - block: - name: Install Apache web Server Debian apt: name=apache2 update_cache=yes state=latest - name: Start Debian service: name=apache2 state=started enabled=yes when: ansible_os_family== "Debian" when: ansible_os_family == "Debian" - block: - name: Install Apache web Server CentOS yum: name=httpd update_cache=yes state=latest - name: Start CentOS service: name=httpd state=started enabled=yes when: ansible_os_family== "CentOS" when: ansible_os_family == "CentOS" - name: Copy files in www CentOS&Debian # ИСПРАВЛЯЕМ: src={{ source_folder }}/{{ item }} меняем на src={{ item }} copy: src={{ item }} dest={{ destin_folder }} mode=0555 loop: - "index.html" - "ico.png" notify: - Restart Apache CentOS - Restart Apache Debian
5. Исправляем основной Playbook
Возвращаемся к исходному файлу и убираем остатки:
--- - name: Install Apache hosts: all become: yes # удаляем vars, tasks, handlers - эти заголовки тут больше не нужны! vars: tasks: handlers:
в итоге получится чистый файл install_apache.yml:
--- - name: Install Apache hosts: all become: yes
Чтобы запустить этот файл с ролью, дополняем в него следующее:
--- - name: Install Apache hosts: all become: yes roles: - install_apache2 # можно указать несколько ролей # - install_mc # - install_mysql # Если хотите запускать роль только на Linux: # - { role: install_apache2, when: ansible_system == 'Linux' }
Запускаем наш playbook с roles:
ansible-playbook install_apache.yml PLAY [Install Apache] *********************** ... debi : ok=6 changed=2 unreachable=0 failed=0
Все работает. Спасибо всем!
Источник: http://linuxsql.ru