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

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow