Управления разрешениями на виртуальные машины 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 на данные виртуальные машины.