--- - name: Define set of main disks (system and heketi) set_fact: disks_info: "{{ disks_info | default([ {'size_gb': 60, 'type': 'thin', 'datastore': vcenter_datastore}, {'size_gb': 40, 'type': 'thin', 'datastore': vcenter_datastore}, {'size_gb': 40, 'type': 'thin', 'datastore': vcenter_datastore}]) }} + {{ [{'size_gb': (item.strip() | int), 'type': container_storage_disk_type, 'datastore': vcenter_datastore}] }}" with_items: "{{ container_storage_disks.split(',') }}" - name: Define set of additional disks which will be just attached to nodes set_fact: additional_disks_info: "{{ additional_disks_info | default([]) }} + {{ [{'size_gb': (item.strip() | int), 'type': container_storage_disk_type, 'datastore': vcenter_datastore}] }}" with_items: "{{ additional_disks_to_storage_nodes.split(',') }}" - name: Create CRS production VMs on vCenter vmware_guest: hostname: "{{ vcenter_host }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: False name: "{{ item.value.guestname }}" cluster: "{{ vcenter_cluster}}" datacenter: "{{ vcenter_datacenter }}" resource_pool: "{{ vcenter_resource_pool }}" template: "{{vcenter_template_name}}" state: poweredon wait_for_ip_address: true folder: "/{{ vcenter_folder }}" annotation: "{{ cluster_id }}-crs" disk: "{{ disks_info }} + {{ additional_disks_info }}" hardware: memory_mb: 32768 networks: "[{'name': '{{ vm_network }}', 'type': 'dhcp' }]" customization: domain: "{{dns_zone}}" dns_suffix: "{{dns_zone}}" hostname: "{{ item.value.guestname}}" with_dict: "{{host_inventory}}" when: "item.value.guesttype in ['crs', ]" async: "{{ 6 * 600 }}" poll: 0 register: async_vms_creation - name: Check async status of VMs creation async_status: jid: "{{ async_result_item.ansible_job_id }}" with_items: "{{ async_vms_creation.results }}" loop_control: loop_var: "async_result_item" register: async_poll_results until: async_poll_results.finished retries: "{{ 6 * 100 }}" - name: Read info of newly created VMs vmware_guest_tools_wait: hostname: "{{ vcenter_host }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" folder: "/{{ vcenter_folder }}" validate_certs: False uuid: "{{ item.instance.hw_product_uuid }}" with_items: "{{ async_poll_results.results }}" register: facts - name: Map node names and their IP addresses set_fact: ip4addrs: "{{ ip4addrs | default({}) | combine( {item.instance.hw_name: ( item.instance.hw_eth0.ipaddresses | ipv4 | first)}, recursive=True) }}" hostnames_for_reboot: "{{ (hostnames_for_reboot | default([])) + [(item.instance.hw_eth0.ipaddresses | ipv4 | first)] }}" with_items: "{{ facts.results }}" - name: Define glusterfs devices set_fact: glusterfs_devices: "{{ glusterfs_devices | default([]) }} + {{ ['/dev/sd' + 'defghijklmnopqrstuvwxyz'[item.0]] }}" with_indexed_items: "{{ disks_info[3::] }}" - name: Define glusterfs additional devices set_fact: glusterfs_additional_devices: "{{ glusterfs_additional_devices | default([]) }} + {{ ['/dev/sd' + 'defghijklmnopqrstuvwxyz'[item.0 + (glusterfs_devices|length)]] }}" with_indexed_items: "{{ additional_disks_info }}" - name: Add CRS production VMs to inventory add_host: hostname: "{{ item.value.guestname }}" ansible_fqdn: "{{ item.value.guestname }}.{{ dns_zone }}" ansible_ssh_host: "{{ ip4addrs[item.value.guestname] }}" openshift_node_group_name: "node-config-storage" # old groups are: crs, production_group, {{cluster-id}}-crs groups: "{{ cluster_id }}-crs, crs, storage, glusterfs" # Following vars are for 'openshift_storage_glusterfs' role from # 'openshift/openshift-ansible' repo glusterfs_devices: "{{ glusterfs_devices }}" glusterfs_hostname: "{{ item.value.guestname }}" glusterfs_ip: "{{ ip4addrs[item.value.guestname] }}" glusterfs_zone: "{{ ip4addrs[item.value.guestname].split('.')[-2::] | join('') | int }}" with_dict: "{{ host_inventory }}" when: "item.value.guesttype in ['crs', ]" # Following updates config file # which is required for automated tests from 'glusterfs-containers-tests' repo - name: Combine data about gluster servers for 'glusterfs-containers-tests' config file set_fact: gluster_servers: "{{ gluster_servers | default({}) | combine({ ip4addrs[item.value.guestname]: { 'manage': item.value.guestname, 'storage': ip4addrs[item.value.guestname], 'additional_devices': glusterfs_additional_devices, } }) }}" with_dict: "{{ host_inventory }}" when: - item.value.guesttype in ['crs', ] - cns_automation_config_file_path | length > 0 - name: Update 'glusterfs-containers-tests' config file yedit: src: "{{ cns_automation_config_file_path }}" state: present edits: - key: gluster_servers value: "{{ gluster_servers }}" when: gluster_servers is defined