blob: e2298d79f648176f736462906ed1b0eb60962137 [file] [log] [blame]
Mohammed Naser336caf42022-03-11 17:56:45 -05001# Copyright (c) 2022 VEXXHOST, Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
Mohammed Naser46e15522022-03-19 16:07:44 -040015- import_playbook: vexxhost.atmosphere.generate_workspace
Mohammed Naser206e5f82022-03-16 20:21:14 -040016 vars:
Mohammed Naser46e15522022-03-19 16:07:44 -040017 workspace_path: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
Michiel Piscaerb490d712022-04-08 11:02:40 +020018 domain_name: "{{ '{{' }} hostvars['ctl1']['ansible_host'].replace('.', '-') {{ '}}' }}.{{ lookup('env', 'ATMOSPHERE_DNS_SUFFIX_NAME') | default('nip.io', True) }}"
Mohammed Naser206e5f82022-03-16 20:21:14 -040019
Mohammed Naser336caf42022-03-11 17:56:45 -050020- hosts: localhost
21 connection: local
22 gather_facts: false
23 no_log: "{{ molecule_no_log }}"
24 vars:
25 ssh_port: 22
Mohammed Naser336caf42022-03-11 17:56:45 -050026 identity_file: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}/id_rsa"
Michiel Piscaer97b7fd32022-03-17 12:15:21 +010027
28 stack_name: "{{ lookup('env', 'ATMOSPHERE_STACK_NAME') | default('atmosphere', True) }}"
29 public_network: "{{ lookup('env', 'ATMOSPHERE_PUBLIC_NETWORK') | default('public', True) }}"
30 image: "{{ lookup('env', 'ATMOSPHERE_IMAGE') | default('Ubuntu 20.04.3 LTS (x86_64) [2021-10-04]', True) }}"
Michiel Piscaer0e4939b2023-08-08 15:28:30 +020031 bastion_instance_type: "{{ lookup('env', 'ATMOSPHERE_BASTION_INSTANCE_TYPE', default=lookup('env', 'ATMOSPHERE_INSTANCE_TYPE', default='v3-standard-4')) }}"
ricolind50c2a82023-06-01 22:19:17 +080032 controller_instance_type: "{{ lookup('env', 'ATMOSPHERE_CONTROLLER_INSTANCE_TYPE', default=lookup('env', 'ATMOSPHERE_INSTANCE_TYPE', default='v3-standard-16')) }}"
33 compute_instance_type: "{{ lookup('env', 'ATMOSPHERE_COMPUTE_INSTANCE_TYPE', default=lookup('env', 'ATMOSPHERE_INSTANCE_TYPE', default='v3-standard-4')) }}"
34 storage_instance_type: "{{ lookup('env', 'ATMOSPHERE_STORAGE_INSTANCE_TYPE', default=lookup('env', 'ATMOSPHERE_INSTANCE_TYPE', default='v3-standard-4')) }}"
Michiel Piscaer97b7fd32022-03-17 12:15:21 +010035 nameservers: "{{ lookup('env', 'ATMOSPHERE_NAMESERVERS') | default('1.1.1.1', True) }}"
ricolin703b2802022-05-16 02:29:26 +080036 boot_from_volume: "{{ lookup('env', 'ATMOSPHERE_BOOT_FROM_VOLUME') | bool }}"
ricolin1139bb02023-03-21 23:45:40 +080037 create_bastion_host: "{{ lookup('env', 'ATMOSPHERE_CREATE_BASTION_HOST') | bool }}"
Mohammed Naser336caf42022-03-11 17:56:45 -050038 tasks:
Oleksandr Kdc273472023-12-20 14:09:12 +010039 - name: Generate a SSH key for stack
40 community.crypto.openssh_keypair:
41 path: "{{ identity_file }}"
42 regenerate: full_idempotence
43 register: _os_stack_keypair
44
Mohammed Naser336caf42022-03-11 17:56:45 -050045 - name: create stack
46 openstack.cloud.stack:
47 name: "{{ stack_name }}"
48 template: heat/stack.yaml
Michiel Piscaer97b7fd32022-03-17 12:15:21 +010049 parameters:
50 public_network: "{{ public_network }}"
51 image: "{{ image }}"
Michiel Piscaer0e4939b2023-08-08 15:28:30 +020052 bastion_instance_type: "{{ bastion_instance_type }}"
Oleksandr Kozachenkoc01ee522023-05-30 21:22:07 +020053 controller_instance_type: "{{ controller_instance_type }}"
54 compute_instance_type: "{{ compute_instance_type }}"
55 storage_instance_type: "{{ storage_instance_type }}"
Michiel Piscaer97b7fd32022-03-17 12:15:21 +010056 nameservers: "{{ nameservers }}"
ricolin703b2802022-05-16 02:29:26 +080057 boot_from_volume: "{{ boot_from_volume }}"
ricolin1139bb02023-03-21 23:45:40 +080058 create_bastion_host: "{{ create_bastion_host }}"
Oleksandr Kdc273472023-12-20 14:09:12 +010059 public_key_pair: "{{ _os_stack_keypair.public_key }}"
Mohammed Naser336caf42022-03-11 17:56:45 -050060 register: _os_stack
Mohammed Naser336caf42022-03-11 17:56:45 -050061 - debug:
62 msg: "{{ _os_stack.stack }}"
63
64 - name: grab list of all ip addresses
65 ansible.builtin.set_fact:
Mohammed Naser336caf42022-03-11 17:56:45 -050066 controller_ips: "{{ _os_stack.stack.outputs | community.general.json_query(controller_query) | first }}"
67 storage_ips: "{{ _os_stack.stack.outputs | community.general.json_query(storage_query) | first }}"
68 compute_ips: "{{ _os_stack.stack.outputs | community.general.json_query(compute_query) | first }}"
69 vars:
Mohammed Naser336caf42022-03-11 17:56:45 -050070 controller_query: "[?output_key=='controller_floating_ip_addresses'].output_value"
71 storage_query: "[?output_key=='storage_floating_ip_addresses'].output_value"
72 compute_query: "[?output_key=='compute_floating_ip_addresses'].output_value"
73
74 - name: wait for systems to go up
75 ansible.builtin.wait_for:
76 port: "22"
77 host: "{{ item }}"
78 search_regex: SSH
Michiel Piscaer8ded0f62022-06-05 21:04:59 +000079 timeout: 600
80 retries: 15
Michiel Piscaer97b7fd32022-03-17 12:15:21 +010081 delay: 10
Mohammed Naser336caf42022-03-11 17:56:45 -050082 loop: "{{ controller_ips + storage_ips + compute_ips }}"
83
Mohammed Naser336caf42022-03-11 17:56:45 -050084 - name: generate instance config file
85 copy:
86 content: "{{ instance_config | to_yaml }}"
87 dest: "{{ molecule_instance_config }}"
88 vars:
89 base_instance_config: &instance_config
Michiel Piscaer97b7fd32022-03-17 12:15:21 +010090 user: "{{ lookup('env', 'ATMOSPHERE_USERNAME') | default('ubuntu', True) }}"
Mohammed Naser336caf42022-03-11 17:56:45 -050091 port: "{{ ssh_port }}"
92 identity_file: "{{ identity_file }}"
93 instance_config:
94 - <<: *instance_config
95 instance: "ctl1"
96 address: "{{ controller_ips[0] }}"
97 - <<: *instance_config
98 instance: "ctl2"
99 address: "{{ controller_ips[1] }}"
100 - <<: *instance_config
101 instance: "ctl3"
102 address: "{{ controller_ips[2] }}"
103 - <<: *instance_config
104 instance: "nvme1"
105 address: "{{ storage_ips[0] }}"
106 - <<: *instance_config
107 instance: "nvme2"
108 address: "{{ storage_ips[1] }}"
109 - <<: *instance_config
110 instance: "nvme3"
111 address: "{{ storage_ips[2] }}"
112 - <<: *instance_config
113 instance: "kvm1"
114 address: "{{ compute_ips[0] }}"
115 - <<: *instance_config
116 instance: "kvm2"
Michiel Piscaerb490d712022-04-08 11:02:40 +0200117 address: "{{ compute_ips[1] }}"