Как развернуть экземпляр openstack с помощью ansible в конкретном проекте

#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"