繁体   English   中英

如何在特定项目中部署带有 ansible 的 openstack 实例

[英]How to deploy an openstack instance with ansible in a specific project

我一直在尝试将 openstack 中的实例部署到另一个项目,然后是我的用户默认项目。 执行此操作的唯一方法似乎是在auth:设置中传递 project_name。 这工作正常,但与使用 cloud.yaml 配置并不真正兼容clouds:设置甚至使用 openstack 提供的 admin-openrc.sh 文件。 ( admin-openrc.sh 似乎优先于auth:中的任何设置。)

我正在使用当前的 openstack.cloud 集合 1.3.0 ( https://docs.ansible.com/ansible/latest/collections/openstack/cloud/index.ZFC35FDC70D5FC69D269883A822 ).C 一些模块可以选择指定一个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=<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 }}"

我正在寻找最有用的方法来为我的所有 openstack 模块使用特定授权 model(无论是 cloud.yaml 还是环境变量),同时仍然能够部署到特定项目。

(你应该升级到最后一个集合(1.5.3),或者它可能与1.3.0兼容)

您可以使用“服务器”任务 (openstack.cloud.server) 中的cloud属性。 以下是您可以进行的操作:

  • 所有项目定义都存储在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"

我们现在避免使用任何环境变量,并确保在 group_vars 的配置中设置项目 ID。 这是有效的,因为它不依赖于本地的 cloud.yml 文件。 我们基本上在 Ansible 中构建和验证 object 可以在整个部署过程中使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM