Поиск…


Вступление

OpenStack - это программная платформа с открытым исходным кодом для облачных вычислений. Экземпляры Linux могут запускаться / останавливаться вручную с использованием графического веб-интерфейса или автоматизированного благодаря незащищенному облачному модулю.

Конфигурирование может быть сложным, но как только он хорошо сконфигурирован, он очень прост и эффективен для тестирования и непрерывной интеграции.

параметры

параметры Комментарии
хосты: localhost Команды OpenStack запускаются с нашего локального хоста
gather_facts: False Нам не нужно собирать информацию о нашем локальном хосте
auth_url: https://openstack-identity.mycompany.com/v2.0 используйте URL-адрес V2.0
состояние: настоящее 'present' / 'absent' для создания / удаления экземпляра
validate_certs: False полезно, если https использует самоподписанные сертификаты
network: "{{NetworkName}}" (необязательный)
auto_ip: да (необязательный)

замечания

  • Мы помещаем URL-адрес проверки подлинности непосредственно в playbook, а не в переменную. URL, используемый в vars, должен быть экранирован.
  • Будьте осторожны с версией URL-адреса аутентификации, используйте V2.0 вместо V3 в https://openstack-identity.mycompany.com/v2.0 .
  • В yml-файлах будьте очень осторожны при копировании / вставке из браузера. Проверяйте в два раза пробелы по мере их учета.
  • Подробнее см .: http://docs.ansible.com/ansible/list_of_cloud_modules.html#openstack

Проверьте версию Ansible

Проверьте правильность версий программного обеспечения:

  • ansible> = 2.0
  • python> = 2.6
  • модуль тени для python
$ansible --version
ansible 2.2.0.0

$python --version
Python 2.7.5

Установите 'shade' компонент python, используемый для запуска openstack.

$pip install shade

Примечание: если вы используете прокси-сервер компании, всегда полезно знать правильный пин синтакс

$pip install --proxy proxy_ip:proxy_port shade

Соберите информацию из GUI OpenStack, чтобы настроить Ansible


Наш арендатор-арендатор уже установлен:

  • виртуальный язык предоставляет экземпляры частного IP-адреса
  • виртуальный маршрутизатор, открытый публичный IP-адрес для частного IP-адреса
  • был создан ключ безопасности
  • у нас есть конфигурация брандмауэра по умолчанию для ssh и порта 80
  • мы можем запустить экземпляр благодаря веб-интерфейсу OpenStack

Позвольте собрать всю необходимую информацию из этого веб-интерфейса.

Информацию об аутентификации можно найти в файле openstack.rc. этот файл можно загрузить с помощью веб-интерфейса OpenStack в [access and security / API Access].

$cat openstack.rc
#!/bin/bash
 
# To use an OpenStack cloud you need to authenticate against the Identity
# service named keystone, which returns a **Token** and **Service Catalog**.
# The catalog contains the endpoints for all services the user/tenant has
# access to - such as Compute, Image Service, Identity, Object Storage, Block
# Storage, and Networking (code-named nova, glance, keystone, swift,
# cinder, and neutron).
#
# *NOTE*: Using the 2.0 *Identity API* does not necessarily mean any other
# OpenStack API is version 2.0. For example, your cloud provider may implement
# Image API v1.1, Block Storage API v2, and Compute API v2.0. OS_AUTH_URL is
# only for the Identity API served through keystone.
export OS_AUTH_URL=https://openstack-identity.mycompany.com/v3

# With the addition of Keystone we have standardized on the term **tenant**
# as the entity that owns the resources.
export OS_TENANT_ID=1ac99fef77ee40148d7d5ba3e070caae
export OS_TENANT_NAME="TrainingIC"
export OS_PROJECT_NAME="TrainingIC"

# In addition to the owning entity (tenant), OpenStack stores the entity
# performing the action as the **user**.
export OS_USERNAME="UserTrainingIC"

# With Keystone you pass the keystone password.
echo "Please enter your OpenStack Password: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT

# If your configuration has multiple regions, we set that information here.
# OS_REGION_NAME is optional and only valid in certain environments.
export OS_REGION_NAME="fr"
# Don't leave a blank variable, unset it if it was empty
if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi 

Мы получаем OS_AUTH_URL, OS_TENANT_NAME, OS_USERNAME.

Версия API аутентификации: OS_AUTH_URL

Остерегайтесь версии API проверки подлинности. По умолчанию v3 активирован, но для него требуется v2.0. Мы получаем URL-адрес и устанавливаем V2.0 вместо V3: https://openstack-identity.mycompany.com/v2.0

Информация о ВМ

Создайте экземпляр, используя веб-интерфейс OpenStack, и получите имя для образа, вкуса, ключа, сети, группы безопасности.

Создайте файл ./group_vars/all со всей необходимой информацией.

$vi ./group_vars/all
# Authentication
AuthUserName: UserTrainingIC
AuthPassword: PasswordTrainingIC
TenantName: TrainingIC

# VM infos
ImageName: CentOS-7-x86_64-GenericCloud-1607
FlavorName: m1.1cpu.1gb
InfraKey: KeyTrainingIC
NetworkName: NetPrivateTrainingIC
SecurityGroup: default

Записывайте воспроизводимую книгу для создания экземпляра

Пусть используется команда «os_server» из модуля «Cloud» [ http://docs.ansible.com/ansible/os_server_module.html] . Переменные определены в ./group_vars/all.

$vi launch_compute.yml
- name: launch a compute instance
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Create and launch the VM
    os_server:
      auth:
        auth_url: https://openstack-identity.mycompany.com/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ TenantName }}"
      state: present
      validate_certs: False
      name: "MyOwnPersonalInstance"
      image: "{{ ImageName }}"
      key_name: "{{ InfraKey }}"
      timeout: 200
      flavor:   "{{ FlavorName }}"
      security_groups: "{{ SecurityGroup }}"
      network: "{{ NetworkName }}"
      auto_ip: yes
$ ansible-playbook  -s launch_compute.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [launch a compute instance] ***********************************************
TASK [Create and launch the VM] ************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0

Соберите информацию о нашем новом экземпляре

Используйте команду «os_server_facts» из модуля «Cloud» [ http://docs.ansible.com/ansible/os_server_module.html] . Переменные определены в ./group_vars/all, а имя экземпляра находится на сервере: «MyOwnPersonalInstance».

$vi get_compute_info.yml
- name: Get and print instance IP
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Get VM infos
    os_server_facts:
      auth:
        auth_url: https://openstack-identity.mygroup/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ TenantName }}"
      validate_certs: False
      server: "MyOwnPersonalInstance"

  - name: Dump all
    debug:
      var: openstack_servers
$ansible-playbook  -s get_compute_info.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [Get and print instance IP] ***********************************************
TASK [Get VM IP] ***************************************************************
ok: [localhost]
TASK [Affichage] ***************************************************************
ok: [localhost] => {
    "openstack_servers": [
        {
            "OS-DCF:diskConfig": "MANUAL",
            "OS-EXT-AZ:availability_zone": "fr",
            "OS-EXT-STS:power_state": 1,
            "OS-EXT-STS:task_state": null,
[...]
            "volumes": []
        }
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0

Это очень много. Отображается много информации. Обычно для доступа к новому экземпляру через SSH требуется только IP-адрес.

Получите новый публичный IP-адрес экземпляра

Вместо того, чтобы печатать всю информацию, мы печатаем только IP-адрес первого экземпляра, чье имя «MyOwnPersonalInstance». Это обычно все, что нам нужно.

$vi get_compute_ip.yml
- name: Get and print instance IP
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Get VM infos
    os_server_facts:
      auth:
        auth_url: https://openstack-identity.mycompany.com/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ TenantName }}"
      validate_certs: False
      server: "MyOwnPersonalInstance"

  - name: Dump IP
    debug:
      var: openstack_servers[0].interface_ip

Удалить наш экземпляр

Чтобы удалить наш экземпляр, повторно используйте команду os_server со всей информацией об аутентификации и просто замените «state: present» на «state: absent».

$vi stop_compute.yml
- name: launch a compute instance
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Create and launch the VM
    os_server:
      auth:
        auth_url: https://openstack-identity.mygroup/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ ProjectName }}"
      state: absent
      validate_certs: False
      name: "{{ TPUser }}"
      timeout: 200


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow