9a405814f1ced993a842e3f73f700fb1afbb6fb8
[apex.git] / lib / ansible / playbooks / deploy_overcloud.yml
1 ---
2 - hosts: all
3   tasks:
4     - name: Copy all files to undercloud
5       copy:
6         src: "{{ apex_temp_dir }}/{{ item }}"
7         dest: "/home/stack/{{ item }}"
8         owner: stack
9         group: stack
10         mode: 0644
11       with_items:
12         - network-environment.yaml
13         - instackenv.json
14         - overcloud-full.qcow2
15         - overcloud-full.vmlinuz
16         - overcloud-full.initrd
17         - ironic-python-agent.initramfs
18         - ironic-python-agent.kernel
19         - deploy_command
20         - virtual-environment.yaml
21         - baremetal-environment.yaml
22         - kubernetes-environment.yaml
23         - "{{ apex_env_file }}"
24     - name: Copy ansible.cfg data to undercloud in aarch64
25       copy:
26         src: "{{ apex_temp_dir }}/ansible.cfg"
27         dest: "/home/stack/ansible.cfg"
28         owner: stack
29         group: stack
30         mode: 0644
31       when: aarch64
32     - name: Copy network data to undercloud
33       copy:
34         src: "{{ apex_temp_dir }}/network_data.yaml"
35         dest: "/home/stack/network_data.yaml"
36         owner: stack
37         group: stack
38         mode: 0644
39       when: os_version != 'ocata'
40     - copy:
41         src: "{{ apex_temp_dir }}/storage-environment.yaml"
42         dest: /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml
43         owner: root
44         group: root
45         mode: 0664
46     - copy:
47         src: "{{ apex_temp_dir }}/neutron-opendaylight-sriov.yaml"
48         dest: /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-opendaylight-sriov.yaml
49         owner: root
50         group: root
51         mode: 0664
52     - name: Remove Ceph OSD from ceph storage role
53       lineinfile:
54         path: /usr/share/openstack-tripleo-heat-templates/roles_data.yaml
55         line: '    - OS::TripleO::Services::CephOSD'
56         owner: root
57         group: root
58         state: absent
59       become: yes
60     - name: Insert Ceph OSDs into Compute role
61       lineinfile:
62         path: /usr/share/openstack-tripleo-heat-templates/roles_data.yaml
63         insertbefore:  '^\s*-\sOS::TripleO::Services::NovaCompute$'
64         line: '    - OS::TripleO::Services::CephOSD'
65         owner: root
66         group: root
67       become: yes
68     - name: Insert Ceph OSDs into Controller role
69       lineinfile:
70         path: /usr/share/openstack-tripleo-heat-templates/roles_data.yaml
71         insertbefore:  '^\s*-\sOS::TripleO::Services::CephRbdMirror$'
72         line: '    - OS::TripleO::Services::CephOSD'
73         owner: root
74         group: root
75       become: yes
76     - name: Insert External network into Compute role
77       shell: |
78         ruby -e '
79         require "yaml"
80         data = YAML.load(File.read("/usr/share/openstack-tripleo-heat-templates/roles_data.yaml"))
81         if data[1]["networks"].is_a?(Array)
82           data[1]["networks"].push("External")
83         elsif data[1]["networks"].is_a?(Hash)
84           data[1]["networks"].merge!("External"=> { "subnet" => "external_subnet" })
85         else
86           raise "Unable to determine data to modify in roles_data.yaml"
87         end
88         data[1]["default_route_networks"] = Array.new(["External"])
89         File.open("/usr/share/openstack-tripleo-heat-templates/roles_data.yaml", "w") { |f| f.write(data.to_yaml) }
90         '
91       become: yes
92     - name: Upload glance images
93       shell: "{{ stackrc }} && openstack overcloud image upload"
94       become: yes
95       become_user: stack
96     - name: Import inventory (baremetal)
97       shell: "{{ stackrc }} && openstack overcloud node import instackenv.json"
98       when: introspect
99     - name: Introspect inventory (baremetal)
100       shell: "{{ stackrc }} && openstack overcloud node introspect --all-manageable --provide"
101       when: introspect
102     - name: Import inventory (virtual)
103       shell: "{{ stackrc }} && openstack overcloud node import --provide instackenv.json"
104       when: not introspect
105     - name: Set flavors
106       shell: '{{ stackrc }} && openstack flavor set --property "cpu_arch"="{{ ansible_architecture }}" {{ item }}'
107       with_items:
108         - baremetal
109         - control
110         - compute
111     - name: Re-enable ceph config for aarch64
112       replace:
113         path: "/usr/share/ceph-ansible/roles/ceph-client/tasks/create_users_keys.yml"
114         regexp: "x86_64"
115         replace: "aarch64"
116         backup: yes
117       when: aarch64
118     - name: Configure DNS server for ctlplane network
119       shell: "{{ stackrc }} && openstack subnet set ctlplane-subnet {{ dns_server_args }}"
120     - name: Update NIC templates before deployment
121       shell: >
122         /usr/share/openstack-tripleo-heat-templates/tools/merge-new-params-nic-config-script.py
123         -n /home/stack/network_data.yaml -t /home/stack/nics/{{ item }}.yaml --discard-comments True
124         --role-name Controller
125       become: yes
126       become_user: stack
127       with_items:
128         - controller
129         - compute
130     - block:
131         - name: Execute Overcloud Deployment
132           shell: "{{ stackrc }} && bash deploy_command"
133           become: yes
134           become_user: stack
135       rescue:
136         - name: Show overcloud failures
137           shell: "{{ stackrc }} && openstack stack failures list overcloud --long"
138           become: yes
139           become_user: stack
140       always:
141         - name: Archive Mistral logs
142           archive:
143             path:
144              - /var/lib/mistral
145              - /var/log/mistral
146             dest: /root/mistral_logs.tar.gz
147           become: yes
148         - name: Fetch mistral logs
149           fetch:
150             src: /root/mistral_logs.tar.gz
151             dest: "{{ apex_temp_dir }}/"
152             flat: yes
153           become: yes
154     - name: Show Keystone output
155       shell: "{{ overcloudrc }} && {{ item }}"
156       when: debug and vim == 'openstack'
157       with_items:
158         - openstack endpoint list
159         - openstack service list
160     - name: Get overcloud nodes and IPs
161       shell: "{{ stackrc }} && openstack server list -f json"
162       register: nova_list
163     - name: Write nova list output to file
164       local_action: copy content="{{ nova_list.stdout }}" dest="{{ apex_temp_dir }}/nova_output"
165     - name: Fetch overcloudrc
166       fetch:
167         src: /home/stack/overcloudrc
168         dest: "{{ apex_temp_dir }}/"
169         flat: yes