Science and technology

Manage your OpenStack cloud with Ansible: Day two operations

Managing an utility on OpenStack presents a bunch of challenges for the system administrator, and discovering methods to scale back complexity and produce consistency are key components to attaining success. By utilizing Ansible, an agentless IT automation know-how, a system administrator can create Ansible playbooks that present consistency and cut back complexity.

OpenStack supplies a wealthy API to handle sources that has led to the creation of dozens of Ansible modules that may simply match into any automation workflow. Combined with the power to automate duties in OpenStack cases, an operator can work each inside and out to coordinate advanced operations in opposition to an surroundings.

“Day one” operations seek advice from duties which can be executed in the course of the preliminary configuration and deployment of an surroundings. The index of OpenStack modules for Ansible lists most of the widespread modules used to finish duties throughout day one. Creating all method of sources, reminiscent of networks, volumes, and cases are coated. “Day two” offers with what occurs subsequent:

  • How will upgrades occur?
  • How are backups maintained?
  • How does the surroundings scale up with demand?

Ansible can simply deal with these use instances.

For instance, contemplate a cluster of net servers that want to be upgraded, all sitting behind an OpenStack load balancer. With the power to handle each the infrastructure and duties throughout the VMs themselves, an operator can make sure the sequence of occasions executed at all times occurs in a specific order. Here is an easy instance of a playbook to carry out a rolling improve:

- hosts: net
  gather_facts: true
  consumer: centos
  serial: 1  # ensures just one server will replace/reboot at a time
  duties:
  - title: test for pending updates
    yum:
      record: updates
    register: yum_update # test if there are updates earlier than going any additional
  - block:
      - title: take away net server from pool
        os_member:
          state: absent
          title: ' ansible_hostname '
          pool: weblb_80_pool
        delegate_to: localhost
      - title: replace packages
        bundle:
          title: '*'
          state: newest
        turn out to be: true
      - title: reboot server
        shell: sleep 5 && reboot &
        async: 1
        ballot: zero
      - title: anticipate server
        wait_for_connection:
          connect_timeout: 20
          sleep: 5
          delay: 5
          timeout: 600
        turn out to be: true
      - title: put server again in pool
        os_member:
          state: current
          title: ' ansible_hostname '
          pool: weblb_80_pool
          handle: ''
          protocol_port: 80
        delegate_to: localhost
    when:
    - yum_update.outcomes | size > zero # solely execute the block if there are updates

This playbook first checks to see whether or not there are any updates to use. If so, the playbook removes the node from the pool, applies the updates, and reboots the node. Once the node is again on-line, it will get added again into the pool. The Ansible playbook makes use of the serial key phrase to make sure just one node is faraway from the pool at a time.

If a database is working within the OpenStack cloud, sometimes a backup should be restored—both to refresh some check information or maybe within the occasion of an information corruption incident. Orchestrating duties between the database server and Cinder is definitely achieved with Ansible:

- hosts: db
  gather_facts: true
  consumer: centos
  duties:
  - title: cease database
    systemd:
      title: mongod
      state: stopped
    turn out to be: true
  - title: unmount db quantity
    mount:
      path: /var/lib/mongodb
      state: unmounted
    turn out to be: true
  - title: detach quantity from server
    os_server_volume:
      state: absent
      server: db0
      quantity: dbvol
    delegate_to: localhost
  - title: restore cinder backup
    command: openstack quantity backup restore dbvol_backup dbvol
    delegate_to: localhost
    register: vol_restore
    failed_when:
    - vol_restore.rc > zero
    - "'VolumeBackupsRestore' not in vol_restore.stderr"
  - title: anticipate restore to complete
    command: openstack quantity present -c standing -f worth dbvol
    register: restore_progress
    till: restore_progress.stdout is search("available")
    retries: 60
    delay: 5
    delegate_to: localhost
  - title: reattach quantity to server
    os_server_volume:
      state: current
      server: db0
      quantity: dbvol
      machine: /dev/vdb
    delegate_to: localhost
  - title: mount db quantity
    mount:
      path: /var/lib/mongodb
      state: mounted
      src: LABEL=dbvol
      fstype: xfs
    turn out to be: true
  - title: begin database
    systemd:
      title: mongod
      state: began
    turn out to be: true

Looking intently on the playbook, you will have observed that the restore is completed by way of the OpenStack command line and never a correct Ansible module. In some instances, a module for a process may not exist, however Ansible is versatile sufficient to permit calling arbitrary instructions inside a playbook till a module is developed. Feel like you possibly can write the lacking module? Consider creating it by contributing to the Ansible project.

These are simply a few day-two operations a system administrator might have to orchestrate of their cloud. Roger Lopez and I’ll provide a hands-on lab at OpenStack Summit in Berlin with real-world eventualities and related Ansible playbooks to automate them. We’ll additionally add our examples and supplies to GitHub the week of the convention for the good thing about anybody who cannot attend. 


Roger Lopez and David Critch will current Simplifying Day Two Operations with Ansible (A Hands-on Lab) on the OpenStack Summit, November 13-15 in Berlin.

Most Popular

To Top