Управления разрешениями на виртуальные машины zVirt с помощью Ansible

Пояснение

При необходимости назначение разных прав на большое количество виртуальных машин или иных ресурсов zVirt, эту задачу можно автоматизировать с помощью Ansible.

Для работы с разрешениями в коллекции Ansible ovirt.ovirt существует модуль ovirt_permission.

С помощью данного модуля можно управлять правами следующих ресурсов:

  • центры данных

  • кластеры

  • хосты

  • сети

  • домены хранения

  • диски

  • ВМ и их шаблонами

И некоторыми другими сущностями в zVirt. Полную информацию можно получить в официальной документации Ansible на коллекцию ovirt.ovirt` и модуль ovirt_permission в частности.

В примерах использования ниже предполагается, что Playbook запускается с Менеджера управления, информация о запуске Playbook с внешнего хоста представлена во Введении в автоматизацию работы zVirt с помощью Ansible.

1. Пример использования: назначение прав на ВМ

Чтобы назначить права на виртуальные машины с помощью Ansible, необходимо составить playbook следующего вида:

- name:
  hosts: localhost
  connection: local
  gather_facts: false

  tasks:
    - name: login
      ovirt_auth:
        url: "https://zvirt.example.ru/ovirt-engine/api"
        username: "ansible@internal"
        password: "password"
      register: loggedin
    - name: Change Permissions
      ovirt_permission:
         auth: "{{ ovirt_auth }}"
         state: present                                         # Указывает должны разрешение присутствовать или отсутствовать, по умолчанию используется значение present. Если права необходимо убрать, нужно заменить present на absent
         user_name: myuser                                      # Если будет указан параметр user_name, то права будут выданы данному пользователю
         # group_name: mygroup                                  # Либо можно указать параметр group_name и выдать права на ресурс группе
         authz_name: internal-authz                             # В данном параметре указывается провайдер авторизации. По умолчанию провайдером авторизации для локальных пользователей является internal-authz
         # authz_name: zvirt.domain.ru                          # Если необходимо назначить права для доменной группы, нужно указать ваш домен
         object_type: vm                                        # В параметре object_type указывает тип объекта, например, ВМ, домен хранения или хост
         object_name: "{{ item }}"                              # В object_name задаётся имя объекта и при необходимо выдать права на большое количество объектов можно воспользоваться циклом, передав список названий прямо в Playbook или внешним файлом
         # object_id: ** ID **                                  # Можно использовать вместо object_name, позволяет указывать ID объектов вместо имён
         role: SuperUser                                        # Здесь указывается какую роль задать при добавлении пользователя / группы в разрешения на объект
      loop:
        - VM1
        - VM2
    - name: Logout
      ovirt_auth:
        ovirt_auth: "{{ ovirt_auth }}"
        state: absent
      when: not loggedin.skipped | default(false)

В примере выше на виртуальные машины VM1 и VM2 выдаются права пользователю локальному myuser. По завершению выполнения Playbook, у пользователя будут права роли SuperUser на данные виртуальные машины.