Skip to content

Commit b17428a

Browse files
committed
add new scenario and roles
1 parent ac51f4b commit b17428a

File tree

16 files changed

+569
-0
lines changed

16 files changed

+569
-0
lines changed

Diff for: playbooks/roles

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../roles/

Diff for: playbooks/scenario2_simple_ecs.yaml

+231
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
---
2+
3+
- name: Scenario 2 - basic compute functionality
4+
hosts: localhost
5+
vars:
6+
prefix: scenario2-
7+
tasks:
8+
- set_fact:
9+
prefix: "{{ (prefix + ( lookup('env', 'TASK_EXECUTOR_JOB_ID') | default(99999999 | random | to_uuid | hash('md5'), true) ) ) }}"
10+
11+
- set_fact:
12+
test_server_fqdn: "{{ (prefix + '.host') }}"
13+
test_security_group_name: "{{ (prefix + '-sg') }}"
14+
test_keypair_name: "{{ (prefix + '-kp') }}"
15+
test_network_name: "{{ ( prefix + '-net') }}"
16+
# test_image: Standard_Fedora_35_latest
17+
test_flavor: s2.medium.2
18+
19+
- name: Query specific flavor
20+
openstack.cloud.compute_flavor_info:
21+
name: "{{ test_flavor }}"
22+
register: flavor_result
23+
24+
# using s2.medium.2 as fallback in case the flavor from inv is not available in the env
25+
- set_fact:
26+
test_flavor: s2.medium.2
27+
when: flavor_result.openstack_flavors | length==0
28+
29+
- debug:
30+
msg: "Using prefix {{ prefix }}"
31+
32+
- name: List Keypairs
33+
openstack.cloud.keypair_info:
34+
35+
- name: Ensure .ssh exists
36+
file:
37+
path: "~/.ssh"
38+
state: directory
39+
40+
- block:
41+
42+
- name: Create Keypair
43+
include_role:
44+
name: keypair
45+
vars:
46+
keypair_name: "{{ test_keypair_name }}"
47+
state: "present"
48+
49+
- name: List Networks
50+
openstack.cloud.networks_info:
51+
52+
- name: List Flavors
53+
openstack.cloud.compute_flavor_info:
54+
55+
- name: List Subnets
56+
openstack.cloud.subnets_info:
57+
58+
- name: List Routers
59+
script: list_routers.py
60+
args:
61+
executable: python3
62+
tags: 'service=network'
63+
64+
- name: Create VPC (Router + Net + Subnet)
65+
include_role:
66+
name: vpc
67+
vars:
68+
network_name: "{{ test_network_name }}"
69+
state: "present"
70+
71+
- name: List SecurityGroups with Rules
72+
script: list_security_groups.py
73+
args:
74+
executable: python3
75+
tags: 'service=compute'
76+
77+
- name: Create SecurityGroup
78+
openstack.cloud.security_group:
79+
name: "{{ test_security_group_name }}"
80+
description: Test Security group created by APImon
81+
82+
- name: Create SecurityGroupRule
83+
openstack.cloud.security_group_rule:
84+
security_group: "{{ test_security_group_name }}"
85+
protocol: tcp
86+
port_range_min: 22
87+
port_range_max: 22
88+
remote_ip_prefix: 0.0.0.0/0
89+
90+
- name: List Images
91+
openstack.cloud.image_info:
92+
93+
- name: List Servers
94+
openstack.cloud.server_info:
95+
96+
############
97+
- name: Create Server in default AZ
98+
openstack.cloud.server:
99+
auto_ip: false
100+
name: "{{ test_server_fqdn }}"
101+
image: "{{ test_image }}"
102+
flavor: "{{ test_flavor }}"
103+
key_name: "{{ test_keypair_name }}"
104+
network: "{{ test_network_name }}"
105+
security_groups: "{{ test_security_group_name }}"
106+
tags:
107+
- "metric=create_server"
108+
- "az=default"
109+
register: server
110+
111+
- name: get server id
112+
set_fact:
113+
server_id: "{{ server.id }}"
114+
115+
- name: Attach FIP
116+
openstack.cloud.floating_ip:
117+
server: "{{ server_id }}"
118+
tags:
119+
- "metric=create_server"
120+
- "az=default"
121+
122+
- name: get server info
123+
openstack.cloud.server_info:
124+
server: "{{ server_id }}"
125+
register: server
126+
tags:
127+
- "metric=create_server"
128+
- "az=default"
129+
130+
- set_fact:
131+
server_ip: "{{ server['openstack_servers'][0]['public_v4'] }}"
132+
tags:
133+
- "metric=create_server"
134+
- "az=default"
135+
136+
- name: find servers by name
137+
openstack.cloud.server_info:
138+
server: "{{ test_server_fqdn }}"
139+
register: servers
140+
tags:
141+
- "metric=create_server"
142+
- "az=default"
143+
144+
- name: Debug server info
145+
debug:
146+
var: servers
147+
148+
# Wait for the server to really start and become accessible
149+
- name: Wait for SSH port to become active
150+
wait_for:
151+
port: 22
152+
host: "{{ server_ip }}"
153+
timeout: 600
154+
tags: ["az=default", "service=compute", "metric=create_server"]
155+
156+
- name: Try connecting
157+
retries: 10
158+
delay: 1
159+
command: "ssh -o 'UserKnownHostsFile=/dev/null' -o 'StrictHostKeyChecking=no' {{ test_user }}@{{ server_ip }} -i ~/.ssh/{{ test_keypair_name }}.pem"
160+
tags: ["az=default", "service=compute", "metric=create_server"]
161+
162+
############
163+
- name: Get Server metadata
164+
script: "get_server_metadata.py {{ server_id }}"
165+
args:
166+
executable: python3
167+
tags: 'service=compute'
168+
169+
- name: Modify metadata
170+
openstack.cloud.server_metadata:
171+
server: "{{ server_id }}"
172+
state: present
173+
meta:
174+
meta_k1: v1
175+
meta_k2: v2
176+
177+
- name: Delete metadata
178+
openstack.cloud.server_metadata:
179+
server: "{{ server_id }}"
180+
state: absent
181+
meta:
182+
meta_k1:
183+
meta_k2:
184+
185+
#- name: Set Tags on the Server
186+
# opentelekomcloud.cloud.tag:
187+
# server: "{{ server_id }}"
188+
# state: present
189+
# tags:
190+
# - tag1
191+
# - tag2
192+
# mode: set
193+
194+
- name: Delete SecurityGroupRule
195+
openstack.cloud.security_group_rule:
196+
state: "absent"
197+
security_group: "{{ test_security_group_name }}"
198+
protocol: tcp
199+
port_range_min: 2208
200+
port_range_max: 2209
201+
remote_ip_prefix: 0.0.0.0/0
202+
203+
always:
204+
- block:
205+
- name: Delete server
206+
openstack.cloud.server:
207+
state: absent
208+
name: "{{ server_id | default(test_server_fqdn) }}"
209+
delete_fip: True
210+
tags: ["metric=delete_server"]
211+
212+
- name: Delete SecurityGroup
213+
openstack.cloud.security_group:
214+
state: "absent"
215+
name: "{{ test_security_group_name }}"
216+
217+
- name: Delete VPC
218+
include_role:
219+
name: vpc
220+
vars:
221+
state: absent
222+
network_name: "{{ test_network_name }}"
223+
224+
- name: Delete Keypair
225+
include_role:
226+
name: keypair
227+
vars:
228+
keypair_name: "{{ test_keypair_name }}"
229+
force_delete_key: true
230+
state: "absent"
231+
ignore_errors: true

Diff for: roles/keypair/defaults/main.yaml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
prefix: test- # This should be overridden in inventory
3+
4+
keypair_name: "{{ (prefix + 'KeyPair') }}"
5+
keypair_private_key_dest: "{{ ('~/.ssh/' + keypair_name + '.pem') }}"
6+
7+
# set this to force key deletion
8+
force_delete_key: false
9+
10+
state: present

Diff for: roles/keypair/tasks/main.yaml

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
# Management of the keypair
3+
- block:
4+
- name: Create KeyPair
5+
openstack.cloud.keypair:
6+
state: present
7+
name: "{{ keypair_name }}"
8+
register: keypair_output
9+
10+
- name: Ensure directory is present
11+
ansible.builtin.file:
12+
path: "{{ keypair_private_key_dest | dirname }}"
13+
state: "directory"
14+
when:
15+
- keypair_output.changed
16+
17+
- name: Save private key
18+
copy:
19+
dest: "{{ keypair_private_key_dest }}"
20+
content: "{{ keypair_output['key']['private_key'] }}"
21+
mode: 0600
22+
when:
23+
- keypair_output is defined and keypair_output['key']['private_key'] is defined
24+
- keypair_output.changed
25+
26+
- set_fact:
27+
ssh_keys: "{{ ssh_keys|default({}) | combine({keypair_name: keypair_output['key']['public_key']}) }}"
28+
when: state != 'absent'
29+
30+
- block:
31+
- name: Delete KeyPair
32+
openstack.cloud.keypair:
33+
state: absent
34+
name: "{{ keypair_name }}"
35+
36+
- name: delete private key
37+
file:
38+
path: "{{ keypair_private_key_dest }}"
39+
state: absent
40+
when: force_delete_key|bool
41+
42+
when: state == 'absent'

Diff for: roles/server_create_delete/defaults/main.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
ssh_user_name: "linux"
3+
ssh_key_pub: ""
4+
coreos: False
5+
metric_suffix: ""

Diff for: roles/server_create_delete/tasks/main.yml

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
# tasks file for roles/server_create_delete
3+
4+
- block:
5+
- name: Create Server in {{ availability_zone }}
6+
openstack.cloud.server:
7+
auto_ip: false
8+
availability_zone: "{{ availability_zone | default(omit) }}"
9+
name: "{{ server_fqdn }}"
10+
image: "{{ server_image }}"
11+
flavor: "{{ server_flavor }}"
12+
key_name: "{{ server_keypair_name }}"
13+
network: "{{ server_net }}"
14+
security_groups: "{{ security_group }}"
15+
# WARN: template and use of vars may cause replacement of \" to \'
16+
userdata: "{{ lookup('template', 'coreos-ignition.json.j2') | to_json | string }}"
17+
tags:
18+
- "metric=create_server{{ metric_suffix }}"
19+
register: server
20+
21+
- name: get server id
22+
set_fact:
23+
server_id: "{{ server.id }}"
24+
25+
- name: Attach FIP
26+
openstack.cloud.floating_ip:
27+
server: "{{ server_id }}"
28+
tags:
29+
- "metric=create_server{{ metric_suffix }}"
30+
- "az={{ availability_zone }}"
31+
32+
- name: get server info
33+
openstack.cloud.server_info:
34+
server: "{{ server_id }}"
35+
register: server
36+
tags:
37+
- "metric=create_server{{ metric_suffix }}"
38+
- "az={{ availability_zone }}"
39+
40+
- set_fact:
41+
server_ip: "{{ server['openstack_servers'][0]['public_v4'] }}"
42+
tags:
43+
- "metric=create_server{{ metric_suffix }}"
44+
- "az={{ availability_zone }}"
45+
46+
# Wait for the server to really start and become accessible
47+
- name: Wait for SSH port to become active
48+
ansible.builtin.wait_for:
49+
port: 22
50+
host: "{{ server_ip }}"
51+
timeout: 300
52+
tags: ["az={{ availability_zone }}", "service=compute", "metric=create_server{{ metric_suffix }}"]
53+
54+
- name: Wait another 5 sec for coreos
55+
pause:
56+
seconds: 5
57+
tags: ["az={{ availability_zone }}", "service=compute", "metric=create_server{{ metric_suffix }}"]
58+
when:
59+
- coreos is defined
60+
- coreos | bool
61+
62+
- name: Try connecting
63+
retries: 10
64+
delay: 1
65+
command: "ssh -o 'UserKnownHostsFile=/dev/null' -o 'StrictHostKeyChecking=no' {{ ssh_user_name }}@{{ server_ip }} -i ~/.ssh/{{ server_keypair_name }}.pem"
66+
tags: ["az={{ availability_zone }}", "service=compute", "metric=create_server{{ metric_suffix }}"]
67+
68+
always:
69+
- name: Debug server info
70+
debug:
71+
var: server
72+
73+
- name: Delete server from {{ availability_zone }}
74+
openstack.cloud.server:
75+
state: absent
76+
name: "{{ server_id }}"
77+
delete_fip: True
78+
when: server_id is defined
79+
tags: ["metric=delete_server"]
80+
81+
- name: Try to get deleted server info
82+
openstack.cloud.server_info:
83+
server: "{{ server_id }}"
84+
register: server
85+
86+
- assert:
87+
that:
88+
- server.openstack_servers | length == 0

0 commit comments

Comments
 (0)