Suche…


Einführung

OpenStack ist eine Open-Source-Softwareplattform für Cloud Computing. Linux-Instanzen können manuell über die grafische Weboberfläche gestartet / gestoppt oder mithilfe des OpenStack-Cloud-Moduls von ansible automatisiert werden.

Das Konfigurieren von Ansible kann schwierig sein, aber wenn es gut konfiguriert ist, ist es für Tests und Continuous Integration-Umgebungen wirklich einfach und leistungsstark.

Parameter

Parameter Bemerkungen
Gastgeber: localhost OpenStack-Befehle werden von unserem localhost aus gestartet
gather_facts: Falsch Wir brauchen keine Informationen über unseren localhost zu sammeln
auth_url: https://openstack-identity.mycompany.com/v2.0 Verwenden Sie V2.0 URL
Zustand: Gegenwart 'present' / 'abwesend' zum Erstellen / Löschen der Instanz
validate_certs: Falsch nützlich, wenn https selbstsignierte Zertifikate verwendet
Netzwerk: "{{Netzwerkname}}" (wahlweise)
auto_ip: ja (wahlweise)

Bemerkungen

Überprüfen Sie Ihre Ansible-Version

Überprüfen Sie, ob die richtigen Softwareversionen installiert sind:

  • Ansible> = 2,0
  • Python> = 2,6
  • Farbmodul für Python
$ansible --version
ansible 2.2.0.0

$python --version
Python 2.7.5

Installieren Sie die Python-Komponente, mit der Openstack gesteuert wird.

$pip install shade

Hinweis: Wenn Sie einen Firmen-Proxy verwenden, ist es immer nützlich, den richtigen Pip-Syntax zu kennen

$pip install --proxy proxy_ip:proxy_port shade

Sammeln Sie Informationen aus der OpenStack-GUI, um Ansible zu konfigurieren


Unser Openstack-Mieter ist bereits eingestellt:

  • Ein virtuelles LAN gibt Instanzen private IP
  • Ein virtueller Router ordnet die öffentliche IP der privaten IP zu
  • Ein Sicherheitsschlüssel wurde generiert
  • Wir haben eine Standard-Firewall-Konfiguration für SSH und Port 80
  • Dank der OpenStack-Weboberfläche können wir eine Instanz starten

Lassen Sie sich alle erforderlichen Informationen über dieses Webinterface sammeln.

Informationen zur Authentifizierung finden Sie in der Datei openstack.rc. Diese Datei kann über das OpenStack-Webinterface in [Zugriff und Sicherheit / API-Zugriff] heruntergeladen werden.

$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 

Wir erhalten OS_AUTH_URL, OS_TENANT_NAME, OS_USERNAME.

Version der Authentifizierungs-API: OS_AUTH_URL

Vorsicht vor Authentifizierungs-API-Version. Standardmäßig ist Version 3 aktiviert, aber für Ansible ist Version 2.0 erforderlich. Wir erhalten die URL und setzen V2.0 anstelle von V3: https://openstack-identity.mycompany.com/v2.0

VM-Informationen

Erstellen Sie mithilfe der OpenStack-Weboberfläche eine Instanz, und rufen Sie den Namen für Image, Flavour, Schlüssel, Netzwerk und Sicherheitsgruppe ab.

Erstellen Sie eine ./group_vars/all -Datei mit allen erforderlichen Informationen.

$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

Schreiben Sie das ansible Playbook, um die Instanz zu erstellen

Verwenden Sie den Befehl 'os_server' vom Modul 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Variablen sind in ./group_vars/all definiert.

$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

Informieren Sie sich über unsere neue Instanz

Verwenden Sie den Befehl 'os_server_facts' vom Modul 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html] . Variablen sind in ./group_vars/all definiert und der Instanzname befindet sich auf dem Server: "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

Das ist sehr wortreich. Es werden viele Informationen angezeigt. Normalerweise wird nur die IP-Adresse benötigt, um über SSH auf die neue Instanz zuzugreifen.

Erhalten Sie Ihre neue öffentliche IP-Instanz

Anstatt alle Informationen auszudrucken, drucken wir nur die IP-Adresse der ersten Instanz mit dem Namen "MyOwnPersonalInstance". Es ist normalerweise alles was wir brauchen.

$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

Löschen Sie unsere Instanz

Um unsere Instanz zu löschen, verwenden Sie den Befehl os_server erneut mit allen Authentifizierungsinformationen und ersetzen Sie einfach 'state: present' durch 'state: abwesend'.

$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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow