ansible
Использование Ansible с OpenStack
Поиск…
Вступление
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