Table of Contents
Lab: OpenStack
Einführung
Für Fragen der Verbindungen zu einem Server, Tools dazu und zu verwendende Editoren (wir empfehlen VIM) lesen sie bitte das Dokument First Steps zu rate. Für die OpenStack Übung wird Training-Labs eingesetzt. Hier ein Auszug aus der original Dokumentation:
Training-labs provides an automated way to deploy Vanilla OpenStack, closely following the OpenStack Install Guide.
Training-labs offers an easy way to set up an OpenStack cluster which is a good starting point for beginners to learn OpenStack, and for advanced users to test out new features, and check out different capabilities of OpenStack.
On top of that training-labs is also a good way to test the installation instructions on a regular basis.
Die Übung ist wie folgt gegliedert:
- Preparation
- Create Server: Horizon
- Create Server: OpenStack CLI
- Create Server: Ansible
Als erstes wird eine OpenStack Instance (VM) mit dem WebGUI erstellt, anschliessend manuell mit dem OpenStack CLI und dann automatisiert mit Ansible.
Das Modul «Cloud Infrastructure Lab (CIL)» vermittelt die theoretische Grundlage zu der Übung.
Training-Labs VM
Jedem Student/Jeder Gruppe steht eine VM mit OpenStack Training-Labs zur Verfügung. Auf der Training-Labs VM mit Ubuntu laufen folgende KVM Guests (VMs mit Linux als Betriebssystem):
- controller: 2 CPUs, 5GB RAM
- compute1: 2 CPUs, 2GB RAM
Die OpenStack Services sind auf die KVM Guests controller und compute1 aufgeteilt.
Auf der Training-Labs VM ist das OpenStack CLI, Ansible und Nginx installiert. Auf dem Guest compute1 können weitere VMs (OpenStack nennt diese «Instances») erzeugt und betrieben werden.
Auf der Training-Labs VM werden folgende zwei Netze für die OpenStack KVM Guests controller und compute1 erzeugt:
- virbr0: Public Network (192.168.122.0/24)
- virbr1: Management Network (10.0.0.0/24)
Innerhalb des OpenStack Stacks gibt es zwei Networks/Subnets. Für die OpenStack Instances dieser Übung wird das Network provider verwendet. Dieses ist von Training-Labs VM erreichbar.
- selfservice: (172.16.1.0/24)
- provider: (203.0.113.0/24)
Dieser Aufbau dient als Übungs-Stack und ist nicht für den produktiven Betrieb ausgelegt. Die «rekursiven Virtualisierung» (oder «Nested Virtualization») ermöglicht das Starten von leichtgewichtigen VMs deren Performance extrem eingeschränkt ist.
Reverse Proxy
Nginx wird als Reverse Proxy für den Zugriff auf Horizon (im KVM Guest controller) und auf eine Website (in der Instance ubuntuserver1 auf dem KVM Guest compute1) der Übung verwendet.
Dank dem Reverse Proxy sind beide HTTP-Schnittstellen auch von ausserhalb der Training-Labs VM erreichbar.
Zugangsdaten
Die Zugangsdaten der Training-Labs VM sind in der Datei training-labs.txt im Home-Directory des Users cloudfactory aufgeführt:
$ ssh cloudfactory@openstack-cab-##-traininglabs1.cf.el.eee.intern $ cat ~/training-labs.txt
Training-Labs ist wie folgt erreichbar:
| SSH | ssh cloudfactory@openstack-cab-##-traininglabs1.cf.el.eee.intern (Passwort bitte dem Ressourcenblatt entnehmen.) |
| OpenStack Horizon | http://openstack-cab-##-traininglabs1.cf.el.eee.intern/horizon/ |
Übungen
Preparation
Verbinden sie sich per SSH auf die Training-Labs VM (via Konsole oder PuTTY):
$ ssh cloudfactory@openstack-cab-##-traininglabs1.cf.el.eee.intern
Als erstes soll überprüft werden, ob die KVM Guests controller und compute1 erreichbar sind:
OpenStack VM: controller
$ ssh osbash@controller # password: osbash
Mit folgenden Befehlen die CPUs, Memory, usw. überprüfen:
$ uptime
18:56:48 up 2:02, 1 user, load average: 0.33, 0.44, 0.45
$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
$ free -m
total used free shared buff/cache available
Mem: 4952 4009 110 1 832 700
Swap:
$ exit (or Ctrl+D)
OpenStack VM: compute1
$ ssh osbash@compute1 # password: osbash
Mit folgenden Befehlen die CPUs, Memory, usw. überprüfen:
$ uptime
21:00:49 up 4:06, 1 user, load average: 0.11, 0.14, 0.17
$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
$ free -m
total used free shared buff/cache available
Mem: 1993 663 1191 0 138 1182
Swap: 461 7 454
$ virsh list
Id Name State
----------------------------------------------------
$ exit (or Ctrl+D)
OpenStack: Flavor
Ein Flavor ist eine Open Stack Virtuelle-HW Konfigurationen die auf eine virtuelle Maschine angewendet wird (wie ein Template). Auf der Training-Labs VM kann das File mit den OpenStack Environment Variablen geladen werden:
$ source ~/admin-openrc.sh $ printenv | grep ^OS_ OS_IMAGE_API_VERSION=2 OS_AUTH_URL=http://controller:5000/v3 OS_PROJECT_NAME=admin OS_PROJECT_DOMAIN_NAME=Default OS_USER_DOMAIN_NAME=Default OS_IDENTITY_API_VERSION=3 OS_PASSWORD=**** OS_USERNAME=admin
Die folgenden Schritte müssen als Administrator ausgeführt werden, deshalb muss die Environment Variable OS_USERNAME unbedingt den Wert admin enthalten.
Mit folgendem Befehl wird ein neues OpenStack Flavor "small" mit 1 vCPU, 512MB RAM und 3GB Disk erzeugt:
$ openstack flavor create --id 1 --vcpus 1 --ram 512 --disk 3 small +----------------------------+-------+ | Field | Value | +----------------------------+-------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 3 | | id | 1 | | name | small | | os-flavor-access:is_public | True | | properties | | | ram | 512 | | rxtx_factor | 1.0 | | swap | | | vcpus | 1 | +----------------------------+-------+ $ openstack flavor list +----+-------+-----+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +----+-------+-----+------+-----------+-------+-----------+ | 1 | small | 512 | 3 | 0 | 1 | True | +----+-------+-----+------+-----------+-------+-----------+
OpenStack: Image (Ubuntu)
Auf der Training-Labs VM kann das File mit den OpenStack Environment Variablen geladen werden:
$ source ~/demo-openrc.sh $ printenv | grep ^OS_ OS_IMAGE_API_VERSION=2 OS_AUTH_URL=http://controller:5000/v3 OS_PROJECT_NAME=myproject OS_PROJECT_DOMAIN_NAME=default OS_USER_DOMAIN_NAME=default OS_IDENTITY_API_VERSION=3 OS_PASSWORD=**** OS_USERNAME=myuser
Die folgenden Aktivitäten sollen als Cloud User ausgeführt werden. Deshalb muss die Environment Variable OS_USERNAME unbedingt den Wert myuser enthalten.
Um eine Ubuntu Xenial VM bereitstellen zu können, muss ein Ubuntu Cloud Image heruntergeladen werden:
$ cd ~ $ wget https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
Das Image muss als Image auf OpenStack geladen werden:
$ openstack image create --disk-format qcow2 --container-format bare --property architecture=x86_64 --file xenial-server-cloudimg-amd64-disk1.img ubuntu-xenial +------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | checksum | 401e7a51a11c135d0aa55aa9ff95ffdd | | container_format | bare | | created_at | 2019-04-13T19:42:16Z | | disk_format | qcow2 | | file | /v2/images/ebcbeacd-d540-45ce-8e5a-bfafd15c186b/file | | id | ebcbeacd-d540-45ce-8e5a-bfafd15c186b | | min_disk | 0 | | min_ram | 0 | | name | ubuntu-xenial | | owner | 520e0f1056334533a821b56efdccae0a | | properties | architecture='x86_64', os_hash_algo='sha512', os_hash_value='1197e0f11e915861bfaa6e22211437d785df40ff14ada803cac87a21cfd2119f4aa8d6a3d71aa607c81592e3ca79024f104729be3735a94887abd5a282de4c59', os_hidden='False' | | protected | False | | schema | /v2/schemas/image | | size | 301203456 | | status | active | | tags | | | updated_at | 2019-04-13T19:42:30Z | | virtual_size | None | | visibility | shared | +------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ $ openstack image list +--------------------------------------+---------------+--------+ | ID | Name | Status | +--------------------------------------+---------------+--------+ | eb7237ab-6830-454d-9beb-0faa48750cd5 | cirros | active | | ebcbeacd-d540-45ce-8e5a-bfafd15c186b | ubuntu-xenial | active | +--------------------------------------+---------------+--------+
Nebst dem ubuntu-xenial Image ist ein cirros Image verfügbar.
OpenStack: Key-Pair
Auf OpenStack kann ein OpenSSH Key-Pair erstellt werden. Der Public-Key kann automatisch bei neuen OpenStack Instances eingerichtet werden:
$ mkdir -p ~/.ssh $ openstack keypair create cloudkey > ~/.ssh/id_rsa # Wichtig: Die Berechtigungen müssen unbedingt entsprechend angepasst werden! $ chmod 0600 ~/.ssh/id_rsa $ openstack keypair list +----------+-------------------------------------------------+ | Name | Fingerprint | +----------+-------------------------------------------------+ | cloudkey | 68:f9:d5:12:88:9d:49:46:b8:22:47:e8:7f:51:27:ad | +----------+-------------------------------------------------+
Create Server: Horizon
Das OpenStack Horizon Dashboard via URL öffnen: http://openstack-cab-##-traininglabs1.cf.el.eee.intern/horizon/
| Domain | default |
| User | myuser |
| Password | myuser_user_pass |
Mit folgenden Schritten wird eine neue OpenStack Instance mit dem Dashboard Horizon erstellt:
Eine neue Instance erzeugen:
- Compute
- Instances
Um eine neue Instance zu erzeugen:
- Launch Instance
Die Instance soll den Namen cirrosserver1 haben:
- Instance Name:cirrosserver1
- Next
Die Instance wird aus einem bestehenden Image erstellt und es wird kein zusätzliches Volume erstellt:
- Select Boot Source: Image
- Create New Volume: No
- Image: cirros
- Next
Die Instance soll mit dem erstellten Flavor small erzeugt werden:
- Flavor: small
- Next
Die neue Instance soll eine IP aus dem Network/Subnet provider erhalten:
- Network provider
- Next
Die Instance soll die default Security Group verwenden:
- Network Ports: Next
- Security Group: default
- Next
Wie oben erwähnt, soll das cloudkey OpenSSH Key-Pair verwendet werden.
- Key Pair: cloudkey
- Launch Instance
Die neue Instance wird erzeugt…:
Sobald die Instance vollständig erzeugt und gestartet wurde, wird der Status als Active und die IP Adresse angezeigt (bitte die IP Adresse für den nächsten Schritt notieren!):
SSH Login
SSH Login auf der Training-Labs VM (via Konsole oder PuTTY):
ssh cloudfactory@openstack-name##-traininglabs1.cf.el.eee.intern
Mit SSH zur neu erstellten Instance cirrosserver1 verbinden:
$ ssh 203.0.113.108 ssh: connect to host 203.0.113.108 port 22: No route to host
Die Instance scheint nicht erreichbar zu sein:
$ ping 203.0.113.108 PING 203.0.113.108 (203.0.113.108) 56(84) bytes of data. From 203.0.113.1 icmp_seq=1 Destination Host Unreachable
Problem: Die Security Group default lässt standardmässig keinen eingehenden Netzwerk Traffic zu.
Lösung: Die Security Group muss angepasst werden.
Das OpenStack Horizon Dashboard via URL öffnen: http://openstack-name##-traininglabs1.cf.el.eee.intern/horizon/
Um neue Rules zur Security Group default hinzufügen: Network / Security Groups / Manage Rules (default).
Mittels Add Rule neue Rules hinzufügen:
Um ping (ICMP) eingehend zu erlauben: All ICMP
Um ssh (Port 22) eingehend zu erlauben: SSH
Nun sollte die neue Instance mit SSH für die Training-Labs VM erreichbar sein:
$ ssh cirros@203.0.113.108
The authenticity of host '203.0.113.108 (203.0.113.108)' can't be established.
ECDSA key fingerprint is SHA256:ShUayX9ZS7AIhlvRio6bQ11y75qIJBan8HPQ9lqY+jA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '203.0.113.108' (ECDSA) to the list of known hosts.
$ cat /etc/os-release
NAME=Buildroot
VERSION=2015.05-g31af4e3-dirty
ID=buildroot
VERSION_ID=2015.05
PRETTY_NAME="Buildroot 2015.05"
$ df -hPk /
Filesystem Size Used Available Capacity Mounted on
/dev/vda1 2.9G 24.1M 2.7G 1% /
$ free -m
total used free shared buffers
Mem: 488 37 450 0 4
-/+ buffers: 33 455
Swap: 0 0 0
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr FA:16:3E:39:32:98
inet addr:203.0.113.117 Bcast:203.0.113.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe39:3298/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:179 errors:0 dropped:18 overruns:0 frame:0
TX packets:182 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:19077 (18.6 KiB) TX bytes:19621 (19.1 KiB)
$ cat /proc/cpuinfo | grep processor
processor : 0
$ cat .ssh/authorized_keys
ssh-rsa AAA......dfdf= Generated-by-Nova
Die Instance enstpricht genau den im Flavor definierten Angaben: 1 vCPU, 512MB RAM und 3GB Disk.
Statt mit einem Passwort konnte man sich mit dem Private-Key aus dem erstellten Key-Pair cloudkey authentifizieren.
Create Server: OpenStack CLI
SSH Login auf der Training-Labs VM (via Konsole oder PuTTY):
ssh cloudfactory@openstack-name##-traininglabs1.cf.el.eee.intern
Die OpenStack Environment Variablen für myuser laden:
$ source ~/demo-openrc.sh
Mit folgenden Schritten wird eine neue OpenStack Instance mit dem OpenStack CLI erstellt:
Die neue Instance soll zum Network provider attached werden.
$ openstack network list +--------------------------------------+-------------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+-------------+--------------------------------------+ | 02e47ad2-a668-4edd-99f0-6e2d58520943 | selfservice | 574e16c9-2ab8-4ff1-b1d8-52aca6b22dfe | | e952b3f5-2d54-416a-a46d-6fb9b9262857 | provider | eeadcb5e-e3a3-46f9-a13a-a386abcca735 | +--------------------------------------+-------------+--------------------------------------+
Hierzu wird am einfachsten die Network-ID (hier: e952b3f5-2d54-416a-a46d-6fb9b9262857) in eine Shell Environment Variable geladen:
$ PROVIDER_NETWORK=$(openstack network list | grep provider | awk '{print $2}')
Mit dem Befehl openstack server create wird eine neue Instance erzeugt:
$ openstack server create --flavor small --image ubuntu-xenial --nic net-id=$PROVIDER_NETWORK --security-group default --key-name cloudkey ubuntuserver1 +-----------------------------+------------------------------------------------------+ | Field | Value | +-----------------------------+------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | | | OS-EXT-STS:power_state | NOSTATE | | OS-EXT-STS:task_state | scheduling | | OS-EXT-STS:vm_state | building | | OS-SRV-USG:launched_at | None | | OS-SRV-USG:terminated_at | None | | accessIPv4 | | | accessIPv6 | | | addresses | | | adminPass | 364QwjPreeEx | | config_drive | | | created | 2019-04-13T19:50:20Z | | flavor | small (1) | | hostId | | | id | c455d98a-da19-4b28-a5b3-283e9fed09a3 | | image | ubuntu-xenial (ebcbeacd-d540-45ce-8e5a-bfafd15c186b) | | key_name | cloudkey | | name | ubuntuserver1 | | progress | 0 | | project_id | 520e0f1056334533a821b56efdccae0a | | properties | | | security_groups | name='00f479ab-ab43-41b5-8e08-6d18a9598cec' | | status | BUILD | | updated | 2019-04-13T19:50:20Z | | user_id | 5c331ee74da64fd2bf128b766f62b911 | | volumes_attached | | +-----------------------------+------------------------------------------------------+
Console Access
Die Instance wird auf dem KVM Guest compute1 erzeugt. SSH Login zu compute1:
$ ssh osbash@compute1
Mit virsh die laufenden VMs anzeigen:
$ virsh list Id Name State ---------------------------------------------------- 1 instance-00000001 running 2 instance-00000002 running
Die Console der neu erzeugten Instanz kann mit virsh console angezeigt und verfolgt werden:
$ virsh console 2
Connected to domain instance-00000002
Escape character is ^]
[ OK ] Listening on Journal Audit Socket.
[ 41.442488] systemd[1]: Starting Journal Service...
Starting Journal Service...
[ 41.757430] systemd[1]: Starting Set console keymap...
Starting Set console keymap...
...
...
[ OK ] Started LSB: Set the CPU Frequency Scaling governor to "ondemand".
Ubuntu 16.04.6 LTS ubuntuserver1 ttyS0
ubuntuserver1 login:
# exit ( ^] or MacOS: Ctrl+¨)
Bei compute1 abmelden:
$ exit (or Ctrl+D)
Falls exit mit ^] oder ctrl-¨ (Ctrl mit Umlaut-Punkten ¨) nicht klappt:
Wird die SSH Session beendet, muss danach wieder source ~/demo-openrc.sh ausgeführt werden.
Die Instance und deren IP Adresse kann mit openstack server list angezeigt werden:
$ openstack server list +--------------------------------------+---------------+--------+------------------------+---------------+--------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+---------------+--------+------------------------+---------------+--------+ | 3a1b06c9-9e33-4897-8473-e6d20058f595 | ubuntuserver1 | ACTIVE | provider=203.0.113.110 | ubuntu-xenial | small | | 875d90e4-7a29-4b94-bbde-c95db974bb4d | cirrosserver1 | ACTIVE | provider=203.0.113.108 | cirros | small | +--------------------------------------+---------------+--------+------------------------+---------------+--------+
SSH Login
Die VM sollte via SSH von der Training-Labs VM aus erreichbar sein:
$ ssh ubuntu@203.0.113.110
The authenticity of host '203.0.113.110 (203.0.113.110)' can't be established.
ECDSA key fingerprint is SHA256:0PjSv3PrRk3xR/8AKbn7xTMIQKVmmUenPl4smsZVwdE.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '203.0.113.110' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-145-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@ubuntuserver1:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
ubuntu@ubuntuserver1:~$ free -m
total used free shared buff/cache available
Mem: 488 28 241 1 218 431
Swap: 0 0 0
ubuntu@ubuntuserver1:~$ cat /proc/cpuinfo | grep processor
processor : 0
ubuntu@ubuntuserver1:~$ df -akhP /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 2.9G 891M 2.0G 31% /
Website
SSH Login zu ubuntuserver1:
$ ssh ubuntu@203.0.113.110
Eine einfache HTML Seite erstellen und einen Python3 HTTP-Server starten:
$ mkdir web && cd web $ echo "Hello World! My name is $(hostname)." | tee index.html $ nohup python3 -m http.server & # evtl. ein paar mal <Enter> drücken...
Der Python Prozess sollte auf Port 8000 LISTEN:
$ netstat -an | grep 8000 tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
Die ubuntuserver1 Instance verlassen:
$ exit (or Ctrl+D)
Problem: Der Port 8000 ist weder von der Training-Labs VM noch von ausserhalb der VM erreichbar.
Lösung: Eine Rule für Port 8000 zur Security Group default einrichten und mit einem Reverse Proxy (nginx) den Zugriff von ausserhalb ermöglichen.
Die Security Group kann mittels OpenStack CLI erstellt werden:
$ openstack security group rule create --proto tcp --dst-port 8000 default +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | created_at | 2019-04-13T20:09:26Z | | description | | | direction | ingress | | ether_type | IPv4 | | id | f4e4ecc5-080f-49dd-84ad-44be613cc0e0 | | name | None | | port_range_max | 8000 | | port_range_min | 8000 | | project_id | 520e0f1056334533a821b56efdccae0a | | protocol | tcp | | remote_group_id | None | | remote_ip_prefix | 0.0.0.0/0 | | revision_number | 0 | | security_group_id | 00f479ab-ab43-41b5-8e08-6d18a9598cec | | updated_at | 2019-04-13T20:09:26Z | +-------------------+--------------------------------------+
Reverse Proxy (nginx)
Nginx ist bereits installiert und wird auf der Training-Labs VM verwendet, um das Horizon Dashboard erreichbar zu machen. Achtung: IP muss angepasst werden!
Es muss ein neuer Server erstellt werden: sudo vim /etc/nginx/sites-available/ubuntuserver1
server {
listen 8000 default_server;
listen [::]:8000 default_server;
server_name _;
location / {
proxy_pass http://203.0.113.110:8000;
proxy_set_header Host $host;
}
}
Anschliessend die neue Konfiguration aktiveren und den Service reloaden:
$ sudo ln -s /etc/nginx/sites-available/ubuntuserver1 /etc/nginx/sites-enabled/ $ sudo systemctl reload nginx
Nun sollte die "Website" erreichbar sein: http://openstack-name##-traininglabs1.cf.el.eee.intern:8000/
Create Server: Ansible
SSH Login auf der Training-Labs VM (via Konsole oder PuTTY):
ssh cloudfactory@openstack-name##-traininglabs1.cf.el.eee.intern
Es soll eine neue OpenStack Instance mit dem Ansible Module os_server erstellt werden. Ansible sollte auf der Training-Labs VM bereits vorinstalliert sein:
$ ansible --version ansible 2.7.10 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/cloudfactory/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/dist-packages/ansible executable location = /usr/bin/ansible python version = 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0]
Die OpenStack Environment Variablen für myuser laden - Ansible nutzt diese für die Kommunikation mit OpenStack:
$ source ~/demo-openrc.sh
Ansible nutzt zudem openstacksdk für dir die Kommunikation mit OpenStack. Das Paket muss installiert werden:
$ sudo apt update $ sudo apt install -y python-pip $ pip install openstacksdk==0.27.0
Folgendes Playbook erstellen vim playbook.yml:
---
- name: Create instances on OpenStack
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Create instance ubuntuserver2
os_server:
state: present
name: ubuntuserver2
image: ubuntu-xenial
verify: no
key_name: cloudkey
flavor: small
nics:
- net-name: provider
Playbook starten:
$ ansible-playbook playbook.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [Create instances on OpenStack] ********************************************************************************************************************************************************************************************************* TASK [Create instance ubuntuserver2] ********************************************************************************************************************************************************************************************************* changed: [localhost] PLAY RECAP *********************************************************************************************************************************************************************************************************************************** localhost : ok=1 changed=1 unreachable=0 failed=0
Falls der Fehler: fatal: [localhost]: FAILED! ⇒ {"changed": false, "msg": "shade is required for this module"} auftritt.
$ sudo apt install python-shade
Dann ansible-playbook nochmals ausführen.
Die Instance wird gemäss Ansible Code erzeugt und kann mit dem OpenStack CLI oder Horizon angezeigt werden:
$ openstack server list +--------------------------------------+---------------+--------+------------------------+---------------+--------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+---------------+--------+------------------------+---------------+--------+ | f77a8869-153a-4e6d-9edf-0ea5209f4d38 | ubuntuserver2 | ACTIVE | provider=203.0.113.114 | ubuntu-xenial | small | | 3a1b06c9-9e33-4897-8473-e6d20058f595 | ubuntuserver1 | ACTIVE | provider=203.0.113.110 | ubuntu-xenial | small | | 875d90e4-7a29-4b94-bbde-c95db974bb4d | cirrosserver1 | ACTIVE | provider=203.0.113.108 | cirros | small | +--------------------------------------+---------------+--------+------------------------+---------------+--------+
















