.. _openstack: Openstack ========= Ansible playbook for launching instances and resources in Openstack. Openstack Instance Inventory ---------------------------- Inventory for Openstack is done via `add_host`_ dynamically by using os_server_facts to gather information about the instances defined in the YAML file. .. _add_host: https://docs.ansible.com/ansible/2.5/modules/add_host_module.html Openstack Project Variables --------------------------- Project variables are stored in group_vars:: /openstack// Cloud ~~~~~ These are Openstack cloud variables. These would be similar to what you would use in an openrc file to connect to Openstack via command line:: cloud_url: https://openstack.example.com:5000/v3 cloud_api_version: 3 cloud_username: cloud_password: cloud_domain: EXAMPLE cloud_project: example-project Designate ~~~~~~~~~ Designate DNS is integrated and can be defined per project:: cloud_designate: cloud.example.com cloud_timeout: 360 cloud_email: admins@example.com Keypair ~~~~~~~ This would be the keypair name you want to upload to the project (if not already there) and the location of the public key to upload:: keypair_name: openstack-admin keypair_location: /root/.ssh/id_rsa.pub Infoblox ~~~~~~~~ If using Infoblox for DNS creation, you would define these in the project:: infoblox_server: infoblox_username: infoblox_password: infoblox_api_version: 2.3.1 infoblox_view: infoblox_domain: openstack.example.com Ideally, you could have a different domain or subdomain for each project or application and set permissions in Infoblox to offer separation between projects and DNS domains. Openstack Instances Variables: ------------------------------ Instance and Application role variables are stored in:: group_vars/openstack/// The name of the file could be either an instance, group of instances or an application name. This is where security groups, security group rules, DNS (Designate, Infoblox, both or none), instance names, volume names, SSH key, flavor, network, instance state, application install and application roles:: security_groups: - name: ssh state: present description: SSH Rule - name: ping state: present description: Ping Rule security_group_rules: - security_group: ssh state: present protocol: tcp port_range_min: 22 port_range_max: 22 remote_ip_prefix: 0.0.0.0/0 - security_group: ping state: present protocol: icmp remote_ip_prefix: 0.0.0.0/0 designate: true infoblox: true dns: - name: "{{ instance_name }}" zone: "{{ cloud_project }}.{{ cloud_designate }}." description: "Record for {{ instance_name }}" recordset_type: A ttl: 100 instance_names: - instance_name: example-instance #instance_state: absent instance_state: present instance_key: openstack-admin instance_security_groups: ping,ssh instance_image_regex: centos-7-current instance_flavor: m1.large instance_boot_from_volume: false instance_network: example-project_private instance_terminate_volume: true instance_auto_ip: true #instance_auto_ip: false instance_lock: true instance_volumes: - name: example-instance1-vol1 size: 10 type: volumes_ceph device: /dev/vdb - name: example-instance1-vol2 size: 15 type: volumes_ceph device: /dev/vdc instance_roles: - role: apache - role: ansible - role: disk-performance - role: docker - role: elasticsearch - role: git - role: haproxy - role: java - role: jenkins - role: kibana - role: logstash - role: mysql - role: postgresql - role: redis - role: solr - role: sonar app_install: true ## Enable Application Install (comment out to disable) app_install: true Features -------- .. list-table:: Openstack :widths: 50 25 25 :header-rows: 1 * - Feature - Role - Variables * - Create/Delete instance in openstack - roles/openstack/instance - group_vars/openstack//instances/ * - Create/Delete multiple instances in openstack - roles/openstack/instance - group_vars/openstack//instances/ * - Modify instance in openstack - roles/openstack/instance - group_vars/openstack//instances/ * - Modify multiple instances in openstack - roles/openstack/instance - group_vars/openstack//instances/ * - Create/Delete/Attach volumes to instance - roles/openstack/instance - group_vars/openstack//instances/ * - Create/Delete/Attach volumes to multiple instances - roles/openstack/instance - group_vars/openstack//instances/ * - Uses server name specified in yaml - roles/openstack/instance - group_vars/openstack//instances/ * - Uses userdata for post install - roles/openstack/instance - group_vars/openstack//instances/ * - Create/Deletes Designate DNS zone in openstack - roles/openstack/instance - group_vars/openstack//zone/ * - Create/Deletes Swift container in openstack - roles/openstack/instance - group_vars/openstack//container/ * - Create/Deletes Heat stack in openstack - roles/openstack/instance - group_vars/openstack//stack/ Playbook Files -------------- :: instance/tasks/main.yml - Main role file instance/tasks/keypair.yml - Add SSH keypair to project and instance instance/tasks/security_group.yml - Add security groups to instance instance/tasks/delete_multiple.yml - Delete instance workflow variables for each instance (instance_state=absent) instance/tasks/delete.yml - Delete instance workflow for single instance (instance_state=absent) instance/tasks/unlock.yml - Unlock Instance instance/tasks/facts.yml - Gather facts about instance instance/tasks/instance.yml - Add/Delete/Modify instance instance/tasks/volumes.yml - Add volumes to instance instance/tasks/designate.yml - Add/Delete/Modify DNS Record for instance in Designate instance/tasks/infoblox.yml - Add/Delete/Modify DNS Record in for instance Infoblox instance/tasks/create_multiple.yml - Create instance workflow variables for each instance (instance_state=present) instance/tasks/create.yml - Create instance workflow for single instance (instance_state=present) instance/tasks/image.yml - Gather latest image (based on instance_image_regex) instance/tasks/unlock.yml - Unlock Instance instance/tasks/instance.yml - Add/Delete/Modify instance instance/tasks/volumes.yml - Add volumes to instance instance/tasks/lock.yml - Lock Instance instance/tasks/facts.yml - Gather facts about instance instance/tasks/designate.yml - Add/Delete/Modify DNS Record for instance in Designate instance/tasks/infoblox.yml - Add/Delete/Modify DNS Record in for instance Infoblox instance/tasks/app_install.yml - Application Install Add Roles container/tasks/container.yml - Add/Delete/Modify Swift Container for project stack/tasks/stack.yml - Add/Delete/Modify Heat Stack for project zone/tasks/zone.yml - Add/Delete/Modify DNS Zone in Openstack for project Example Playbook - Openstack instance creation and application installation: ---------------------------------------------------------------------------- Create openstack instance example-instance1 on openstack.example.com and install Apache and MySQL:: (venv-ansible-altostratus) server1:/etc/ansible/ansible-altostratus # ansible-playbook os_instance-example.yml PLAY [configuration of altostratus Openstack instances] ********************************************************************************************************************************************* TASK [openstack/instance : Upload keypair openstack-admin] ****************************************************************************************************************************************** ok: [localhost] TASK [openstack/instance : Create security groups for example-project] ********************************************************************************************************************************* ok: [localhost] => (item={u'state': u'present', u'name': u'ssh', u'description': u'SSH Rule'}) ok: [localhost] => (item={u'state': u'present', u'name': u'ping', u'description': u'Ping Rule'}) TASK [openstack/instance : Create TCP/UDP security groups rules for example-project] ******************************************************************************************************************* ok: [localhost] => (item={u'protocol': u'tcp', u'remote_ip_prefix': u'0.0.0.0/0', u'port_range_max': 22, u'state': u'present', u'port_range_min': 22, u'security_group': u'ssh'}) skipping: [localhost] => (item={u'security_group': u'ping', u'remote_ip_prefix': u'0.0.0.0/0', u'state': u'present', u'protocol': u'icmp'}) TASK [openstack/instance : Create ICMP security groups rules for example-project] ********************************************************************************************************************** skipping: [localhost] => (item={u'protocol': u'tcp', u'remote_ip_prefix': u'0.0.0.0/0', u'port_range_max': 22, u'state': u'present', u'port_range_min': 22, u'security_group': u'ssh'}) ok: [localhost] => (item={u'security_group': u'ping', u'remote_ip_prefix': u'0.0.0.0/0', u'state': u'present', u'protocol': u'icmp'}) TASK [openstack/instance : pass variables into include for instance deletion] *********************************************************************************************************************** skipping: [localhost] => (item={u'instance_terminate_volume': True, u'app_install': True, u'instance_key': u'openstack-admin', u'instance_image_regex': u'centos-7-current', u'instance_boot_from_volume': False, u'instance_security_groups': u'ping,ssh', u'instance_name': u'example-instance1', u'instance_state': u'present', u'instance_network': u'example-project_private', u'instance_volumes': [{u'device': u'/dev/vdb', u'type': u'volumes_ceph', u'name': u'example-instance1-vol1', u'size': 10}, {u'device': u'/dev/vdc', u'type': u'volumes_ceph', u'name': u'example-instance1-vol2', u'size': 15}], u'instance_roles': [{u'role': u'apache'}, {u'role': u'mysql'}], u'instance_flavor': u'm1.large', u'instance_lock': True, u'instance_auto_ip': True}) TASK [openstack/instance : pass variables into include for instance creation] *********************************************************************************************************************** included: /etc/ansible//ansible-altostratus/roles/openstack/instance/tasks/create.yml for localhost TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/openstack/ansible-altostratus/roles/openstack/instance/tasks/image.yml for localhost TASK [openstack/instance : Gathering latest centos-7-current image] ********************************************************************************************************************************* changed: [localhost] TASK [openstack/instance : Set fact for instance_image to centos-7-current-1538352316] ************************************************************************************************************** ok: [localhost] TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/unlock.yml for localhost TASK [openstack/instance : unlock instance] ********************************************************************************************************************************************************* fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find server None"} ...ignoring TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/instance.yml for localhost TASK [openstack/instance : Setting managed instance example-instance1 to present with image centos-7-current-1538352316] *********************************************************************************** skipping: [localhost] TASK [openstack/instance : Setting instance example-instance1 to present with image centos-7-current-1538352316] ******************************************************************************************* changed: [localhost] TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/volumes.yml for localhost TASK [openstack/instance : Setting volumes for example-instance1 to present] ******************************************************************************************************************************* changed: [localhost] => (item={u'device': u'/dev/vdb', u'type': u'volumes_ceph', u'name': u'example-instance1-vol1', u'size': 10}) changed: [localhost] => (item={u'device': u'/dev/vdc', u'type': u'volumes_ceph', u'name': u'example-instance1-vol2', u'size': 15}) TASK [openstack/instance : Attach volumes for example-instance1] ******************************************************************************************************************************************* changed: [localhost] => (item={u'device': u'/dev/vdb', u'type': u'volumes_ceph', u'name': u'example-instance1-vol1', u'size': 10}) changed: [localhost] => (item={u'device': u'/dev/vdc', u'type': u'volumes_ceph', u'name': u'example-instance1-vol2', u'size': 15}) TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/lock.yml for localhost TASK [openstack/instance : lock instance] *********************************************************************************************************************************************************** changed: [localhost] TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/facts.yml for localhost TASK [openstack/instance : facts instance] ********************************************************************************************************************************************************** ok: [localhost] TASK [openstack/instance : facts instance output] *************************************************************************************************************************************************** ok: [localhost] => { "openstack_servers": [ { "OS-DCF:diskConfig": "MANUAL", "OS-EXT-AZ:availability_zone": "nova", "OS-EXT-STS:power_state": 1, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2018-10-10T13:36:50.000000", "OS-SRV-USG:terminated_at": null, "accessIPv4": "192.168.84.52", "accessIPv6": "", "addresses": { "example-project_private": [ { "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:be:7d:ba", "OS-EXT-IPS:type": "fixed", "addr": "10.0.0.21", "version": 4 }, { "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:be:7d:ba", "OS-EXT-IPS:type": "floating", "addr": "192.168.84.52", "version": 4 } ] }, "adminPass": null, "az": "nova", "cloud": "", "config_drive": "", "created": "2018-10-10T13:36:23Z", "created_at": "2018-10-10T13:36:23Z", "disk_config": "MANUAL", "flavor": { "id": "4" }, "has_config_drive": false, "hostId": "1308e64eaa48f7beb44103dfdc7a8c0e3d09ace469f35af08e7bd28d", "host_id": "1308e64eaa48f7beb44103dfdc7a8c0e3d09ace469f35af08e7bd28d", "id": "095a648a-bf77-47af-b9f7-4538c3f756eb", "image": { "id": "3fe3e4fa-e699-4ba6-bac2-a27a1b09db5e" }, "interface_ip": "192.168.84.52", "key_name": "openstack-admin", "launched_at": "2018-10-10T13:36:50.000000", "location": { "cloud": "", "project": { "domain_id": null, "domain_name": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "id": "4b5ed4f81e8a44dfb78614d1cf7a6663", "name": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" }, "region_name": "", "zone": "nova" }, "metadata": {}, "name": "example-instance1", "networks": {}, "os-extended-volumes:volumes_attached": [ { "id": "9461c748-d1aa-4a65-ba8a-41292712a0d2" }, { "id": "9d4b4dc0-a44f-4855-9be2-9c6f7503d53e" } ], "power_state": 1, "private_v4": "10.0.0.21", "progress": 0, "project_id": "4b5ed4f81e8a44dfb78614d1cf7a6663", "properties": { "OS-DCF:diskConfig": "MANUAL", "OS-EXT-AZ:availability_zone": "nova", "OS-EXT-STS:power_state": 1, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2018-10-10T13:36:50.000000", "OS-SRV-USG:terminated_at": null, "os-extended-volumes:volumes_attached": [ { "id": "9461c748-d1aa-4a65-ba8a-41292712a0d2" }, { "id": "9d4b4dc0-a44f-4855-9be2-9c6f7503d53e" } ] }, "public_v4": "192.168.84.52", "public_v6": "", "region": "", "security_groups": [ { "name": "ssh" }, { "name": "ping" } ], "status": "ACTIVE", "task_state": null, "tenant_id": "4b5ed4f81e8a44dfb78614d1cf7a6663", "terminated_at": null, "updated": "2018-10-10T13:38:37Z", "user_id": "0019df5ac0f473d34d8cd59ae7d18fda58f474b199c26238e9ee892a8486dec9", "vm_state": "active", "volumes": [ { "id": "9461c748-d1aa-4a65-ba8a-41292712a0d2" }, { "id": "9d4b4dc0-a44f-4855-9be2-9c6f7503d53e" } ] } ] } TASK [openstack/instance : register instance_ip for Floating IP] ************************************************************************************************************************************ ok: [localhost] TASK [openstack/instance : register instance_ip for Shared IP] ************************************************************************************************************************************** skipping: [localhost] TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/designate.yml for localhost TASK [openstack/instance : Create or Delete Designate DNS entry for example-instance.example-project.cloud.example.com using 192.168.84.52] ******************************************************************** changed: [localhost] => (item={u'name': u'example-instance1', u'recordset_type': u'A', u'description': u'Record for example-instance1', u'zone': u'example-project.cloud.example.com.', u'ttl': 100}) TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/infoblox.yml for localhost TASK [openstack/instance : Create or Delete Infoblox DNS entry for example-instance1.infoblox.example.com using 192.168.84.52] ************************************************************************************* changed: [localhost] TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/app_install.yml for localhost TASK [openstack/instance : Wait for SSH on the Instance] ******************************************************************************************************************************************** changed: [localhost] TASK [openstack/instance : Add Instance to Ansible Inventory and Groups for Application Roles] ****************************************************************************************************** changed: [localhost] => (item={u'role': u'apache'}) changed: [localhost] => (item={u'role': u'mysql'}) TASK [openstack/instance : pass variables into include for instance creation] *********************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/app_install_test.yml for localhost TASK [openstack/instance : include] ***************************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/openstack/instance/tasks/facts.yml for localhost TASK [openstack/instance : facts instance] ********************************************************************************************************************************************************** ok: [localhost] TASK [openstack/instance : facts instance output] *************************************************************************************************************************************************** ok: [localhost] => { "openstack_servers": [ { "OS-DCF:diskConfig": "MANUAL", "OS-EXT-AZ:availability_zone": "nova", "OS-EXT-STS:power_state": 1, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2018-10-10T13:36:50.000000", "OS-SRV-USG:terminated_at": null, "accessIPv4": "192.168.84.52", "accessIPv6": "", "addresses": { "example-project_private": [ { "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:be:7d:ba", "OS-EXT-IPS:type": "fixed", "addr": "10.0.0.21", "version": 4 }, { "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:be:7d:ba", "OS-EXT-IPS:type": "floating", "addr": "192.168.84.52", "version": 4 } ] }, "adminPass": null, "az": "nova", "cloud": "", "config_drive": "", "created": "2018-10-10T13:36:23Z", "created_at": "2018-10-10T13:36:23Z", "disk_config": "MANUAL", "flavor": { "id": "4" }, "has_config_drive": false, "hostId": "1308e64eaa48f7beb44103dfdc7a8c0e3d09ace469f35af08e7bd28d", "host_id": "1308e64eaa48f7beb44103dfdc7a8c0e3d09ace469f35af08e7bd28d", "id": "095a648a-bf77-47af-b9f7-4538c3f756eb", "image": { "id": "3fe3e4fa-e699-4ba6-bac2-a27a1b09db5e" }, "interface_ip": "192.168.84.52", "key_name": "openstack-admin", "launched_at": "2018-10-10T13:36:50.000000", "location": { "cloud": "", "project": { "domain_id": null, "domain_name": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "id": "4b5ed4f81e8a44dfb78614d1cf7a6663", "name": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER" }, "region_name": "", "zone": "nova" }, "metadata": {}, "name": "example-instance1", "networks": {}, "os-extended-volumes:volumes_attached": [ { "id": "9461c748-d1aa-4a65-ba8a-41292712a0d2" }, { "id": "9d4b4dc0-a44f-4855-9be2-9c6f7503d53e" } ], "power_state": 1, "private_v4": "10.0.0.21", "progress": 0, "project_id": "4b5ed4f81e8a44dfb78614d1cf7a6663", "properties": { "OS-DCF:diskConfig": "MANUAL", "OS-EXT-AZ:availability_zone": "nova", "OS-EXT-STS:power_state": 1, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2018-10-10T13:36:50.000000", "OS-SRV-USG:terminated_at": null, "os-extended-volumes:volumes_attached": [ { "id": "9461c748-d1aa-4a65-ba8a-41292712a0d2" }, { "id": "9d4b4dc0-a44f-4855-9be2-9c6f7503d53e" } ] }, "public_v4": "192.168.84.52", "public_v6": "", "region": "", "security_groups": [ { "name": "ssh" }, { "name": "ping" } ], "status": "ACTIVE", "task_state": null, "tenant_id": "4b5ed4f81e8a44dfb78614d1cf7a6663", "terminated_at": null, "updated": "2018-10-10T13:38:37Z", "user_id": "0019df5ac0f473d34d8cd59ae7d18fda58f474b199c26238e9ee892a8486dec9", "vm_state": "active", "volumes": [ { "id": "9461c748-d1aa-4a65-ba8a-41292712a0d2" }, { "id": "9d4b4dc0-a44f-4855-9be2-9c6f7503d53e" } ] } ] } TASK [openstack/instance : register instance_ip for Floating IP] ************************************************************************************************************************************ ok: [localhost] TASK [openstack/instance : register instance_ip for Shared IP] ************************************************************************************************************************************** skipping: [localhost] TASK [openstack/instance : Wait for SSH on the Instance] ******************************************************************************************************************************************** changed: [localhost] TASK [openstack/instance : Add Instance to Ansible Inventory and Groups for Application Roles] ****************************************************************************************************** changed: [localhost] => (item={u'role': u'apache'}) changed: [localhost] => (item={u'role': u'mysql'}) [WARNING]: Could not match supplied host pattern, ignoring: pip PLAY [configuration of altostratus apps - geerlingguy.pip] ****************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: ansible PLAY [configuration of altostratus apps - ansible] ************************************************************************************************************************************************** skipping: no hosts matched PLAY [configuration of altostratus apps - geerlingguy.apache] *************************************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.apache : Include OS-specific variables.] *********************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.apache : Include variables for Amazon Linux.] ****************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.apache : Define apache_packages.] ****************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.apache : include_tasks] **************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.apache/tasks/setup-RedHat.yml for example-instance1 TASK [galaxy/geerlingguy.apache : Ensure Apache is installed on RHEL.] ****************************************************************************************************************************** changed: [example-instance1] => (item=[u'httpd', u'httpd-devel', u'mod_ssl', u'openssh']) TASK [galaxy/geerlingguy.apache : Get installed version of Apache.] ********************************************************************************************************************************* ok: [example-instance1] TASK [galaxy/geerlingguy.apache : Create apache_version variable.] ********************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.apache : include_vars] ***************************************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.apache : include_vars] ***************************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.apache : include_tasks] **************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.apache/tasks/configure-RedHat.yml for example-instance1 TASK [galaxy/geerlingguy.apache : Configure Apache.] ************************************************************************************************************************************************ ok: [example-instance1] => (item={u'regexp': u'^Listen ', u'line': u'Listen 80'}) TASK [galaxy/geerlingguy.apache : Check whether certificates defined in vhosts exist.] ************************************************************************************************************** TASK [galaxy/geerlingguy.apache : Add apache vhosts configuration.] ********************************************************************************************************************************* changed: [example-instance1] TASK [galaxy/geerlingguy.apache : Ensure Apache has selected state and enabled on boot.] ************************************************************************************************************ changed: [example-instance1] RUNNING HANDLER [galaxy/geerlingguy.apache : restart apache] **************************************************************************************************************************************** changed: [example-instance1] [WARNING]: Could not match supplied host pattern, ignoring: elasticsearch PLAY [configuration of altostratus apps - geerlingguy.elasticsearch] ******************************************************************************************************************************** skipping: no hosts matched PLAY [configuration of altostratus apps - geerlingguy.mysql] **************************************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/variables.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Include OS-specific variables.] ************************************************************************************************************************************ TASK [galaxy/geerlingguy.mysql : Include OS-specific variables (RedHat).] *************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_packages.] ******************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_daemon.] ********************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_slow_query_log_file.] ********************************************************************************************************************************* ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_log_error.] ******************************************************************************************************************************************* ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_syslog_tag.] ****************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_pid_file.] ******************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_config_file.] ***************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_config_include_dir.] ********************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_socket.] ********************************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Define mysql_supports_innodb_large_prefix.] ************************************************************************************************************************ ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/setup-RedHat.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Ensure MySQL packages are installed.] ****************************************************************************************************************************** changed: [example-instance1] => (item=[u'mariadb', u'mariadb-server', u'mariadb-libs', u'MySQL-python', u'perl-DBD-MySQL']) TASK [galaxy/geerlingguy.mysql : Ensure MySQL Python libraries are installed.] ********************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Check if MySQL packages were installed.] *************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/configure.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Get MySQL version.] ************************************************************************************************************************************************ ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Copy my.cnf global MySQL configuration.] *************************************************************************************************************************** changed: [example-instance1] TASK [galaxy/geerlingguy.mysql : Verify mysql include directory exists.] **************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Copy my.cnf override files into include directory.] **************************************************************************************************************** TASK [galaxy/geerlingguy.mysql : Create slow query log file (if configured).] *********************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Create datadir if it does not exist] ******************************************************************************************************************************* ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Set ownership on slow query log file (if configured).] ************************************************************************************************************* skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Create error log file (if configured).] **************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Set ownership on error log file (if configured).] ****************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Ensure MySQL is started and enabled on boot.] ********************************************************************************************************************** changed: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/secure-installation.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Ensure default user is present.] *********************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Copy user-my.cnf file with password credentials.] ****************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Disallow root login remotely] ************************************************************************************************************************************** ok: [example-instance1] => (item=DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')) TASK [galaxy/geerlingguy.mysql : Get list of hosts for the root user.] ****************************************************************************************************************************** ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Update MySQL root password for localhost root account (5.7.x).] **************************************************************************************************** skipping: [example-instance1] => (item=127.0.0.1) skipping: [example-instance1] => (item=::1) skipping: [example-instance1] => (item=localhost) TASK [galaxy/geerlingguy.mysql : Update MySQL root password for localhost root account (< 5.7.x).] ************************************************************************************************** changed: [example-instance1] => (item=127.0.0.1) changed: [example-instance1] => (item=::1) changed: [example-instance1] => (item=localhost) TASK [galaxy/geerlingguy.mysql : Copy .my.cnf file with root password credentials.] ***************************************************************************************************************** changed: [example-instance1] TASK [galaxy/geerlingguy.mysql : Get list of hosts for the anonymous user.] ************************************************************************************************************************* ok: [example-instance1] TASK [galaxy/geerlingguy.mysql : Remove anonymous MySQL users.] ************************************************************************************************************************************* changed: [example-instance1] => (item=localhost) changed: [example-instance1] => (item=example-instance1.openstacklocal) TASK [galaxy/geerlingguy.mysql : Remove MySQL test database.] *************************************************************************************************************************************** changed: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/databases.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Ensure MySQL databases are present.] ******************************************************************************************************************************* changed: [example-instance1] => (item={u'collation': u'latin1_general_ci', u'name': u'example_db', u'encoding': u'latin1'}) TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/users.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Ensure MySQL users are present.] *********************************************************************************************************************************** changed: [example-instance1] => (item=None) changed: [example-instance1] TASK [galaxy/geerlingguy.mysql : include_tasks] ***************************************************************************************************************************************************** included: /etc/ansible/ansible-altostratus/roles/galaxy/geerlingguy.mysql/tasks/replication.yml for example-instance1 TASK [galaxy/geerlingguy.mysql : Ensure replication user exists on master.] ************************************************************************************************************************* skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Check slave replication status.] *********************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Check master replication status.] ********************************************************************************************************************************** skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Configure replication on the slave.] ******************************************************************************************************************************* skipping: [example-instance1] TASK [galaxy/geerlingguy.mysql : Start replication.] ************************************************************************************************************************************************ skipping: [example-instance1] RUNNING HANDLER [galaxy/geerlingguy.mysql : restart mysql] ****************************************************************************************************************************************** [WARNING]: Ignoring "sleep" as it is not used in "systemd" changed: [example-instance1] [WARNING]: Could not match supplied host pattern, ignoring: postgresql PLAY [configuration of altostratus apps - geerlingguy.postgresql] *********************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: disk-performance PLAY [configuration of altostratus apps - disk-performance] ***************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: docker PLAY [configuration of altostratus apps - geerlingguy.docker] *************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: git PLAY [configuration of altostratus apps - geerlingguy.git] ****************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: haproxy PLAY [configuration of altostratus apps - geerlingguy.haproxy] ************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: icinga2-ansible-no-ui PLAY [configuration of altostratus apps - icinga2-server] ******************************************************************************************************************************************* skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: java PLAY [configuration of altostratus apps - geerlingguy.java] ***************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: jenkins PLAY [configuration of altostratus apps - geerlingguy.jenkins] ************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: kibana PLAY [configuration of altostratus apps - geerlingguy.kibana] *************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: logstash PLAY [configuration of altostratus apps - geerlingguy.logstash] ************************************************************************************************************************************* skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: redis PLAY [configuration of altostratus apps - geerlingguy.redis] **************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: solr PLAY [configuration of altostratus apps - geerlingguy.solr] ***************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: sonar PLAY [configuration of altostratus apps - geerlingguy.sonar] **************************************************************************************************************************************** skipping: no hosts matched PLAY RECAP ****************************************************************************************************************************************************************************************** localhost : ok=35 changed=11 unreachable=0 failed=0 example-instance1 : ok=51 changed=14 unreachable=0 failed=0