#ansible #openstack
Вопрос:
Я пытался развернуть экземпляр в openstack в другом проекте, а затем в проекте по умолчанию для моих пользователей. Похоже, что единственный способ сделать это-передать имя проекта в auth:
настройках. Это прекрасно работает, но на самом деле не совместимо с использованием облака.конфигурация yaml с clouds:
настройкой или даже с использованием admin-openrc.sh файл, который предоставляет openstack. (В admin-openrc.sh по-видимому, имеет приоритет над любыми настройками в auth:
).
Я использую текущую коллекцию openstack.cloud 1.3.0 (https://docs.ansible.com/ansible/latest/collections/openstack/cloud/index.html). В некоторых модулях есть возможность указать project:
, например, сетевой модуль, но в одном серверном модуле этого нет.
Таким образом, это развертывается в именованном проекте:
- name: Create instances
server:
state: present
auth:
auth_url: "{{ auth_url}}"
username: "{{ username }}"
password: "{{ password }}"
project_name: "{{ project }}"
project_domain_name: "{{ domain_name }}"
user_domain_name: "{{ domain_name }}"
name: "test-instance-1"
image: "{{ image_name }}"
key_name: "{{ key_name }}"
timeout: 200
flavor: "{{ flavor }}"
network: "{{ network }}"
При получении источника admin-openrc.sh, это развертывается только в вашем проекте по умолчанию (OS_PROJECT_NAME=<имя_проекта>
- name: Create instances
server:
state: present
name: "test-instance-1"
image: "{{ image_name }}"
key_name: "{{ key_name }}"
timeout: 200
flavor: "{{ flavor }}"
network: "{{ network }}
image: "{{ image_name }}"
key_name: "{{ key_name }}"
timeout: 200
flavor: "{{ flavor }}"
network: "{{ network }}"
Когда я отменяю значение OS_PROJECT_NAME, но устанавливаю все остальные значения из admin-openrc.sh, Я могу это сделать, но для этого требуется работать с настройкой, отличной от настройки по умолчанию (сброс одной переменной окружающей среды:
- name: Create instances
server:
state: present
auth:
project_name: "{{ project }}"
name: "test-instance-1"
image: "{{ image_name }}"
key_name: "{{ key_name }}"
timeout: 200
flavor: "{{ flavor }}"
network: "{{ network }}"
Я ищу наиболее полезный способ использовать конкретную модель авторизации (будь то облака.yaml или переменные среды) для всех моих модулей openstack, сохраняя при этом возможность развертывания в конкретном проекте.
Комментарии:
1. Это может быть или не быть полезным, но я обнаружил, что во многих сценариях идентификатор проекта имеет приоритет над именем проекта. Работает ли это, если вы используете
project_id
вместоproject_name
этого ?
Ответ №1:
(Вам следует обновить до последней коллекции (1.5.3), или, возможно, она совместима с 1.3.0)
Вы можете использовать cloud
свойство из задачи «сервер» (openstack.cloud.server). Вот как вы можете действовать :
- Все определения проектов хранятся в
clouds.yml
(вот часть его содержимого)
clouds:
tarantula:
auth:
auth_url: https://auth.cloud.myprovider.net/v3/
project_name: tarantula
project_id: the-id-of-my-project
user_domain_name: Default
project_domain_name: Default
username: my-username
password: my-password
regions :
- US
- EU1
- из задачи вы можете обратиться к соответствующему облаку следующим образом
- name: Create instances
server:
state: present
cloud: tarantula
region_name: EU1
name: "test-instance-1"