Назад | Перейти на главную страницу

Ansible - можно ли пропустить выполнение роли?

Вот моя основная игра, в которой запускаются роли, перечисленные ниже.

---
 - hosts: slaves
   roles:
      - ntp
      - nmap
      - tcpdump
      - unattended-upgrades
      - traceroute
      - apache
      - mysql

Я хочу, чтобы пользователь сам решил, хочет ли он установить apache и mysql, набрав yes или no в предложении, которое появится во время выполнения playbook. Я пробовал разные вещи вроде vars_prompt, except и when но безуспешно. есть ли способ достичь моей цели? Спасибо !

Действительно, специальное взаимодействие с пользователем - это не то, о чем идет речь. Но вы можете просто хешировать несколько строк из своей книги перед ее запуском:

---
 - hosts: slaves
   roles:
      - ntp
      - nmap
      - tcpdump
      - unattended-upgrades
      - traceroute
# leave these today:
#     - apache
#     - mysql

Если вы можете использовать include_role вместо того roles тогда вы можете запустить такую ​​пьесу.

Просто укажите в приглашении список, разделенный пробелами.

---
- hosts: localhost
  gather_facts: no
  vars_prompt:
  - name: run_roles
    prompt: Which roles do you want to run
  tasks:
  - include_role:
      name: "{{ role.role }}"
    loop_control:
      loop_var: role
    when: role.role in run_roles
    loop:
    - role: ntp
    - role: nmap
    - role: tcpdump
    - role: unattended-upgrades
    - role: traceroute
    - role: apache
    - role: mysql

Я наконец нашел что-то, что работает. Это руководство, включенное в папку ролей apache, которая устанавливает эту службу.

---
    - name: Installation apache sur Centos et RedHat
      yum:
        name: httpd
        state: present
      when: (ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat') and reponse_apache == 'oui'

Я объявил переменную reponse_apache. Если пользователь говорит «oui», начинается установка.

Моя основная игра:

---
 - hosts: slaves
   roles:
#      - ntp
#      - nmap
#      - tcpdump
#      - unattended-upgrades
#      - traceroute
      - apache
#      - mysql


   vars_prompt:
     - name: "reponse_apache"
       prompt: "Voulez vous installer apache ? Une exception pare-feu pour le service http sera créée sur les systèmes CentOS 7 (oui/non) "
       private: no

     - name: "reponse_mysql"
       prompt: "Voulez vous installer mysql ? (oui/non) "
       private: no

Я создал раздел vars_prompt который содержит переменную reponse_apache. Я сделал то же самое для mysql с переменной reponse_mysql

---
   - name: Installation python sur les systèmes Debian et Ubuntu
     apt:
       name: python3
       state: present
     when: (ansible_distribution == 'Debian' or ansible_distribution) == 'Ubuntu' and reponse_mysql == 'oui'

   - name: Installation wget sur les systèmes CentOS et RedHat
     yum:
       name: wget
       state: present
     when: (ansible_distribution == 'CentOS' or ansible_distribution) == 'RedHat' and reponse_mysql == 'oui'

   - file:
      path: /etc/repo_mysql
      state: directory
     when: reponse_mysql == 'oui'

   - name: Téléchargement dépôt mysql sur les systèmes CentOS et RedHat
     get_url:
       url: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
       dest: /etc/repo_mysql/mysql-community-release-el7-5.noarch.rpm
     when: (ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat') and reponse_mysql == 'oui'

   - name: Installation dépôt mysql sur les systèmes CentOS et RedHat
     yum:
       name: /etc/repo_mysql/mysql-community-release-el7-5.noarch.rpm
       state: present
     when: (ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat') and reponse_mysql == 'oui'

   - name: Installation mysql sur tous les systèmes
     yum:
       name: mysql-server
       state: present
     when: reponse_mysql == 'oui'

   - name: Creation BDD "vierge" sur tous les systèmes
     mysql_db:
       name: vierge
       state: present
     when: reponse_mysql == 'oui'

   - name: Demarrage mysql sur les systèmes Debian et Ubuntu
     service:
       name: mysql
       state: started
     when: (ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu') and reponse_mysql == 'oui'

   - name: Demarrage mysql sur les systèmes CentOS et RedHat
     service:
       name: mysqld
       state: started