Skip to main content

Primary links

  • Home
  • AI
  • Kubernetes
  • Incus
  • Ansible
  • Terraform
  • OpenStack
  • Virtualization
  • Linux
  • SmartHome
  • HowTo

Misc

  • Linux
  • Hardware
  • Programming
  • Databases
  • Multimedia
  • Windows

Cloud

  • OpenStack
  • cloud-config
  • nextcloud

Virtualization

  • Virtualization
  • Incus
  • Docker
  • KVM
  • Kubernetes
  • LXC
  • LXD
  • QEMU
  • VMware
  • VirtualBox
  • multipass
  • podman
  • vagrant
  • XEN

Network

  • DNS
  • Firewall
  • Linux
  • OpenvSwitch
  • SSL
  • VLAN
  • VPN
  • iPXE
  • namespaces
  • nmcli
  • tcpdump

Storage

  • CEPH
  • DRBD
  • LVM
  • S3
  • ZFS
  • btrfs

Automation / CI/CD

  • Install
  • Ansible
  • GitLab
  • LLM
  • Preseed
  • Puppet
  • Terraform
  • Ubuntu autoinstall

Monitoring / Visualisation

  • Grafana
  • Icinga
  • Prometheus
  • Monitoring
  • ELK
  • mermaid

OpenStack: Cloud management with Ansible

Ansible OpenStack modules
https://docs.ansible.com/ansible/latest/search.html?q=os_

Ansible OpenStack module repository
https://github.com/ansible/ansible/tree/devel/lib/ansible/modules/cloud/openstack

# Fix; To utilize this module, the installed version ofthe shade library MUST be >=1.8.0
wget http://mirrors.kernel.org/ubuntu/pool/universe/p/python-shade/python-shade_1.30.0-2_all.deb -O /tmp/python-shade_1.30.0-2_all.deb
sudo dpkg -i /tmp/python-shade_1.30.0-2_all.deb

Create OpenStack VM with Ansible

- name: Create VM
      openstack.cloud.server:
        cloud: "{{ os_cloud }}"
        name: "{{ os_server_name }}"
        image: "{{ os_server_image }}"
        key_name: "{{ os_server_keypair }}"
        flavor: "{{ os_server_flavor }}"
        nics:
          - port-name: "{{ item }}_{{ os_network }}"
        auto_floating_ip: yes
        availability_zone: "{{ os_server_availability_zone }}"
        meta:
          sysadmin: "{{ os_sysadmin }}"
        userdata: |
          #cloud-config
          package_upgrade: true
          packages:
            - curl
          users:
            - name: foo
              sudo: ALL=(ALL) NOPASSWD:ALL
              shell: /bin/bash
              ssh_authorized_keys:
                - "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
              ssh_import_id:
                - gh:foo
                - gh:bar

OpenStack multi cloud / user configurattion (~/.config/openstack/clouds.yaml)

Configure connections
https://docs.openstack.org/python-openstackclient/latest/configuration/index.html

# ~/.config/openstack/clouds.yaml
clouds:
  admin-dev:
    auth:
      auth_url: http://keystone-admin.dev.example.com:35357/v3
      project_name: admin
      username: admin
      user_domain_name: Default
      project_domain_name: Default
    interface: internal

  foo-stage:
    auth:
      auth_url: http://api.stage.example.com:35357
      project_name: fooproject
      username: foo
      user_domain_name: foodom
      project_domain_name: foodom

  dev-foo-bar-token:
    auth:
      auth_url: https://keystone.service.example.com/v3
      #token: gAAAAABjpLjOVEzH3YEf70Lc0VoIDZlTnaQ1pUPllNAJ
    region_name: "az1"
    interface: "public"
    identity_api_version: 3
    project_domain_name: "foo"
    project_name: "bar"
    auth_type: "v3token"

  cloud-admin:
    auth:
      auth_url: http://keystone-admin.i.example.com:35357/v3
      project_name: admin
      username: admin
      password: xxxxxxxxxxxxxx
    region_name: "r1"
    interface: "internal"
    identity_api_version: 3

Choose OpenStack account

export OS_CLOUD=cloud-admin

Configure passwords

# ~/.config/openstack/secure.yaml
clouds:
  admin-dev:
    auth:
      password: pass1234

  foo-stage:
    auth:
      password: pass1234

  dev-foo-bar-token:
    auth:
      token: "gAAAAABeNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Combine static clouds.yaml configuration and temporary token

export OS_TOKEN=$(openstack token issue -f value -c id)

Test connection

openstack --os-cloud foo-stage image list

Configure default connection

export OS_CLOUD=foo-stage
openstack server list

Ansible

apt install -y python-shade

Links
https://docs.openstack.org/python-openstackclient/pike/configuration/index.html
https://docs.openstack.org/os-client-config/latest/user/configuration.html
https://docs.openstack.org/python-openstackclient/latest/configuration/index.html
https://docs.openstack.org/python-openstackclient/latest/cli/man/openstack.html

OpenStack: Install OpenStack CLI client (OSC)

Release notes for openstack client tools
https://releases.openstack.org/antelope/

OpenStack: Regenerate kolla password file

OS_ENV=dev

rm /etc/kolla/passwords.yml
cp /etc/kolla/config/passwords-${OS_ENV}.yml /etc/kolla/passwords.yml

# marge new password / reorder passwords
# kolla-genpwd -p /etc/kolla/passwords.yml
# cp /etc/kolla/passwords.yml /etc/kolla/config/passwords-${OS_ENV}.yml

cat /etc/kolla/config/passwords-${OS_ENV}.yml | cut -d" " -f1 > /etc/kolla/passwords.yml
kolla-genpwd -p /etc/kolla/passwords.yml
mv /etc/kolla/passwords.yml /etc/kolla/config/passwords-${OS_ENV}.yml
ln -s /etc/kolla/config/passwords-${OS_ENV}.yml /etc/kolla/passwords.yml

Links
https://docs.openstack.org/kolla-ansible/latest/user/operating-kolla.html

Ironic

Installation
https://docs.openstack.org/bifrost/latest/install/index.html

Documentation
https://docs.openstack.org/bifrost/latest/user/howto.html

Ironic Ansible module
https://docs.openstack.org/ironic/latest/admin/drivers/ansible.html
https://docs.openstack.org/ironic/latest/configuration/config.html#ansible

Prepare: clanup node

# login to node
ssh -i /etc/ironic/id_rsa ${NODE_IP}

# cleanup disk
umount /dev/mapper/system-* /dev/disk/by-label/ESP
vgchange -an
mdadm --stop --scan
wipefs -af /dev/nvme*

Ironic manual deployment

ssh ironic.dev.i.example.com

HOST_NIC_IP=10.11.12.13
HOST_NAME=ctl1-dev
HOST_NIC_MAC=00:11:22:33:44:55
IMAGE=img-noble-minimal.tgz

source /opt/stack/bifrost/bin/activate
export OS_CLOUD=bifrost

env ANSIBLE_CONFIG=/opt/openstack-ironic/playbooks/ansible.cfg \
ansible-playbook /opt/openstack-ironic/playbooks/deploy.yaml \
-i /opt/openstack-ironic/playbooks/inventory \
--private-key=/etc/ironic/id_rsa \
-e "{
   'ironic':{
      'nodes':[
         {
            'ip':'${HOST_NIC_IP}',
            'extra':{
               'hostname':'${HOST_NAME}',
               'bootif':'${HOST_NIC_MAC}'
            },
            'user':'root',
            'name':'ironic-manual-prov'
         }
      ],
      'image':{
         'source':'http://ironic.dev.i.example.com:8080/${IMAGE}',
         'url':'http://ironic.dev.i.example.com:8080/${IMAGE}',
         'type':'whole-disk-image',
         'mem_req':512,
         'validate_certs':'yes'
      }
   }
}" \
-e "{'pre_deploy_wait_minutes':0}" \
-vvv

Debug

ironic / bifrost

# load env
. /opt/stack/bifrost/env-vars

# list nodes
ironic node-list

# remove / shutdown existing node
ironic node-set-provision-state foo.example.com deleted

# load node configuration
export BIFROST_INVENTORY_SOURCE=/opt/openstack-prepare-baremetal/bifrost/json/foo.example.com.json

# add new node
ansible-playbook -i inventory/bifrost_inventory.py enroll-dynamic.yaml
ironic node-update foo.example.com add properties/capabilities='boot_mode:uefi'

# deploy
ansible-playbook -v -i inventory/bifrost_inventory.py deploy-dynamic.yaml

# show node details
ironic node-show foo.example.com

# cli
#ironic node-set-maintenance 00000000-0000-0000-0000-112233445566 on
openstack baremetal node maintenance set ${NODE_UUID}

ironic node-delete 00000000-0000-0000-0000-112233445566
ironic node-list

ironic node-set-power-state  00000000-0000-0000-0000-112233445566 on

ironic node-set-maintenance ${NODE} on
ironic node-delete ${NODE}
ansible-playbook -i inventory/bifrost_inventory.py enroll-dynamic.yaml
ironic node-update ${NODE add properties/capabilities='boot_mode:uefi'
ansible-playbook -i inventory/bifrost_inventory.py deploy-dynamic.yaml

# log (on ironic server)
tail -f /var/log/daemon.log

# show node state
ironic node-show  node1

# rebuild
ironic node-set-provision-state ${NODE} rebuild

Install OpenStack with Kolla-ansible under Ubuntu

Docu
https://docs.openstack.org/releasenotes/kolla-ansible/
https://docs.openstack.org/project-deploy-guide/kolla-ansible/latest/quickstart.html
https://docs.openstack.org/kolla-ansible/latest/reference/index.html
https://governance.openstack.org/tc/reference/runtimes/

Repository
https://github.com/openstack/kolla-ansible
# global kolla-ansible configuration file
https://github.com/openstack/kolla-ansible/blob/master/etc/kolla/globals.yml

Install all-in-one

apt-get install python-dev libffi-dev gcc libssl-dev python-selinux python-setuptools ansible pip
pip install kolla-ansible
#pip install -r requirements.txt
#python setup.py install
cp -r /usr/local/share/kolla-ansible/etc_examples/kolla /etc/
cp /usr/local/share/kolla-ansible/ansible/inventory/* .
kolla-genpwd
cp /etc/kolla/globals.yml{,org}
vi /etc/kolla/globals.yml
sed -i 's|#kolla_base_distro: "centos"|kolla_base_distro: "ubuntu"|g' /etc/kolla/globals.yml
sed -i 's|#kolla_install_type: "binary"|kolla_install_type: "source"|g' /etc/kolla/globals.yml
sed -i 's|#openstack_release: ""|openstack_release: "queens"|g' /etc/kolla/globals.yml
sed -i 's|kolla_internal_vip_address: "10.10.10.254"|kolla_internal_vip_address: "192.168.1.111"|g' /etc/kolla/globals.yml
sed -i 's|#network_interface: "eth0"|network_interface: "eth0"|g' /etc/kolla/globals.yml
sed -i 's|#neutron_external_interface: "eth1"|neutron_external_interface: "eth1"|g' /etc/kolla/globals.yml
cp /usr/local/share/kolla-ansible/ansible/roles/baremetal/defaults/main.yml{,org}
vi /usr/local/share/kolla-ansible/ansible/roles/baremetal/defaults/main.yml
diff /usr/local/share/kolla-ansible/ansible/roles/baremetal/defaults/main.yml{,org}
kolla-ansible -i ./all-in-one bootstrap-servers
kolla-ansible -i ./all-in-one prechecks

Credentials

OpenStack diskimage-builder

Install

sudo apt install -y curl python-pip qemu-utils
pip install diskimage-builder

# packages
dib/elements/my_pkg/package-installs.yaml
...
vlan:
wget:
linux-image-generic:
  uninstall: True

# change TMPDIR
export TMPDIR=/mnt
disk-image-create -o output.qcow --no-tmpfs vm block-device-gpt ubuntu-minimal

Build IPA image

export DIB_QUIET=0
export ELEMENTS_PATH=/opt/ironic-python-agent-builder/dib:/opt/diskimage-builder/dib/elements
export IMAGE_NAME=ironic-python-agent
export DIB_ELEMENTS=ironic-python-agent-ramdisk
export DIB_RELEASE=focal

disk-image-create ${DIB_ELEMENTS} -o ${IMAGE_NAME} --logfile ${IMAGE_NAME}.log

Build Ubuntu image

export DIB_QUIET=0
export ELEMENTS_PATH=/opt/diskimage-builder/dib/elements
export IMAGE_NAME=img-${DIB_RELEASE}-minimal
export DIB_ELEMENTS=foo
export DIB_RELEASE=focal

disk-image-create ${DIB_ELEMENTS} -o ${IMAGE_NAME} -t tgz --logfile ${IMAGE_NAME}.log --checksum

dynamic-login
https://docs.openstack.org/diskimage-builder/latest/elements/dynamic-login/README.html
https://docs.openstack.org/ironic/pike/install/include/kernel-boot-parameters.html

Options
https://github.com/openstack/diskimage-builder/blob/master/diskimage_builder/lib/disk-image-create#L52

Elements
https://docs.openstack.org/diskimage-builder/latest/elements.html

OpenStack

Releases
https://releases.openstack.org/
https://releases.openstack.org/stein/index.html

CLI
# Command Structure
https://docs.openstack.org/python-openstackclient/latest/cli/commands.html
https://docs.openstack.org/ocata/user-guide/cli-cheat-sheet.html
https://docs.openstack.org/keystone/latest/admin/cli-manage-projects-users-and-roles.html
https://docs.openstack.org/python-openstackclient/latest/cli/command-list.html

Services
https://www.openstack.org/software/project-navigator/openstack-components/#openstack-services

openstack command list | egrep "(agent|service) list"

Create VM

openstack server create u2404-2 \
  --image "Ubuntu 24.04" \
  --flavor m1.xlarge \
  --key-name test-keypair \
  --network test-network \
  --security-group default \
  --availability-zone=eu1-az1

Create Key

openstack keypair create foo-key --public-key ~/.ssh/id_rsa.pub

Change user / admin password

. /etc/kolla/admin-openrc.sh
openstack user password set --password new-password --original-password current-admin-password

Credentials

# connect to specific cloud
openstack server list --os-cloud=dev-foo

source /etc/kolla/admin-openrc.sh

Instance
https://docs.openstack.org/mitaka/install-guide-ubuntu/launch-instance.html

openstack image list
openstack network list
openstack keypair list

Ansible
https://docs.ansible.com/ansible/latest/collections/openstack/cloud/index.html
https://github.com/panticz/ansible/tree/master/roles/devstack

pip install -U openstacksdk python-openstacksdk ansible

Cloud images
http://panticz.de/cloud-images

Pagination

  • Previous page
  • 9
openstack
Profiles GitHub StackOverflow LinkedIn Xing
Contact Imprint
© panticz 2026

Cookie-Einstellungen

Diese Website nutzt eingebettete Inhalte von Drittanbietern (z.B. YouTube, SoundCloud). Beim Laden dieser Inhalte werden Daten an die jeweiligen Anbieter übermittelt. Datenverarbeitungserklärung