ansible
Använda Ansible med OpenStack
Sök…
Introduktion
OpenStack är en öppen källkodsplattform för molnberäkning. Linux-instanser kan startas / stoppas manuellt med hjälp av det grafiska webbgränssnittet eller automatiseras tack vare ansible's openstack-molnmodul.
Att konfigurera ansible kan vara svårt, men när det väl är konfigurerat med det är det verkligen enkelt och kraftfullt för testning och kontinuerlig integrationsmiljö.
parametrar
parametrar | kommentarer |
---|---|
värdar: localhost | OpenStack-kommandon startas från vår localhost |
collect_facts: False | Vi behöver inte samla information om vår localhost |
autor_url: https://openstack-identity.mycompany.com/v2.0 | använd V2.0 URL |
tillstånd: närvarande | 'närvarande' / 'frånvarande' för att skapa / ta bort förekomsten |
validate_certs: False | användbart om https använder självsignerade certifikat |
nätverk: "{{NetworkName}}" | (valfri) |
auto_ip: ja | (valfri) |
Anmärkningar
- Vi lägger autentiseringsadressen direkt i spellistan, inte i en variabel. URL som används i vars måste undkomma.
- Var försiktig med verifiering URL-version använder V2.0 istället för V3 på https://openstack-identity.mycompany.com/v2.0 .
- Var mycket försiktig i yml-filer när du kopierar / klistrar in från webbläsaren. Kontrollera utrymmena två gånger eftersom de beaktas.
- Mer information på: http://docs.ansible.com/ansible/list_of_cloud_modules.html#openstack
Kontrollera din Ansible-version
Kontrollera att rätt programvaruversioner är installerade:
- ansible> = 2,0
- python> = 2,6
- skuggmodul för python
$ansible --version
ansible 2.2.0.0
$python --version
Python 2.7.5
Installera 'skugga' pytonkomponenten som används för att pilotera openstack.
$pip install shade
Obs! Om du använder en firmaproxy är det alltid bra att veta rätt pip-synthax
$pip install --proxy proxy_ip:proxy_port shade
Samla information från OpenStack GUI för att konfigurera Ansible
Vår openstack-hyresgäst är redan klar:
- en virtuell lan ger instanser privat IP
- en virtuell router kartlägger offentlig IP till privat IP
- en säkerhetsnyckel har genererats
- Vi har standard brandväggskonfiguration för ssh och port 80
- Vi kan starta en instans tack vare OpenStack-webbgränssnittet
Låt samla in all nödvändig information från detta webbgränssnitt.
Autentiseringsinformation finns i filen openstack.rc. den här filen kan laddas ner med OpenStack webbgränssnitt i [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
Vi får OS_AUTH_URL, OS_TENANT_NAME, OS_USERNAME.
Autentiserings-API-version: OS_AUTH_URL
Se upp för API-versionen för autentisering. Som standard är v3 aktiverad, men ansible behöver v2.0. Vi får url och ställer in V2.0 istället för V3: https://openstack-identity.mycompany.com/v2.0
VM-information
Skapa en instans med OpenStack-webbgränssnittet och få namnet på bild, smak, nyckel, nätverk, säkerhetsgrupp.
Skapa en ./group_vars/all-fil med all information som behövs.
$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
Skriv ansvarsfull spellista för att skapa förekomsten
Låt använda 'os_server' -kommandot från modulen 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Variabler definieras i ./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
Samla information om vår nya instans
Använd kommandot 'os_server_facts' från modulen 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Variabler definieras i ./group_vars/all och instansnamnet finns på servern: "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
Detta är mycket ordalt. Massor av information visas. Vanligtvis behövs bara IP-adressen för att komma åt den nya instansen via SSH.
Få din offentliga IP-adress för nya instanser
Istället för att skriva ut all information, skriver vi bara IP-adress för den första instansen vars namn är "MyOwnPersonalInstance". Det är vanligtvis allt vi behöver.
$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
Ta bort vår instans
Om du vill ta bort vår instans använder du kommandot os_server med all autentiseringsinformation och ersätter helt enkelt "state: present" med "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