mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 13:20:23 -07:00
cloudscale migrated to cloudscale_ch.cloud (#517)
This commit is contained in:
parent
e4522e1517
commit
e5bb9dab9d
54 changed files with 0 additions and 3657 deletions
|
@ -1 +0,0 @@
|
|||
hidden
|
|
@ -1,19 +0,0 @@
|
|||
---
|
||||
# The image to use for test servers
|
||||
cloudscale_test_image: 'debian-9'
|
||||
|
||||
# Alternate test image to use if a different image is required
|
||||
cloudscale_alt_test_image: 'ubuntu-18.04'
|
||||
|
||||
# The flavor to use for test servers
|
||||
cloudscale_test_flavor: 'flex-2'
|
||||
|
||||
# SSH key to use for test servers
|
||||
cloudscale_test_ssh_key: |
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSPmiqkvDH1/+MDAVDZT8381aYqp73Odz8cnD5hegNhqtXajqtiH0umVg7HybX3wt1HjcrwKJovZURcIbbcDvzdH2bnYbF93T4OLXA0bIfuIp6M86x1iutFtXdpN3TTicINrmSXEE2Ydm51iMu77B08ZERjVaToya2F7vC+egfoPvibf7OLxE336a5tPCywavvNihQjL8sjgpDT5AAScjb3YqK/6VLeQ18Ggt8/ufINsYkb+9/Ji/3OcGFeflnDXq80vPUyF3u4iIylob6RSZenC38cXmQB05tRNxS1B6BXCjMRdy0v4pa7oKM2GA4ADKpNrr0RI9ed+peRFwmsclH test@ansible
|
||||
|
||||
# The zone to use to test servers
|
||||
cloudscale_test_zone: 'lpg1'
|
||||
|
||||
# The region to use to request floating IPs
|
||||
cloudscale_test_region: 'lpg'
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
- name: List all floating IPs
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/floating-ips'
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
status_code: 200
|
||||
register: floating_ip_list
|
||||
|
||||
- name: Remove all floating IPs created by this test run
|
||||
cloudscale_floating_ip:
|
||||
ip: '{{ item.network | ansible.netcommon.ipaddr("address") }}'
|
||||
state: 'absent'
|
||||
when: cloudscale_resource_prefix in (item.reverse_ptr | string )
|
||||
with_items: '{{ floating_ip_list.json }}'
|
||||
loop_control:
|
||||
label: '{{ item.reverse_ptr }} ({{ item.network }})'
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
- name: List all server groups
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/server-groups'
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
status_code: 200
|
||||
register: server_group_list
|
||||
|
||||
- name: Remove all server groups created by this test run
|
||||
cloudscale_server_group:
|
||||
uuid: '{{ item.uuid }}'
|
||||
state: absent
|
||||
when: cloudscale_resource_prefix in item.name
|
||||
with_items: '{{ server_group_list.json }}'
|
||||
loop_control:
|
||||
label: '{{ item.name }} ({{ item.uuid }})'
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
- name: List all servers
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/servers'
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
status_code: 200
|
||||
register: server_list
|
||||
|
||||
- name: Remove all servers created by this test run
|
||||
cloudscale_server:
|
||||
uuid: '{{ item.uuid }}'
|
||||
state: 'absent'
|
||||
when: cloudscale_resource_prefix in item.name
|
||||
with_items: '{{ server_list.json }}'
|
||||
loop_control:
|
||||
label: '{{ item.name }} ({{ item.uuid }})'
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
- name: List all volumes
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/volumes'
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
status_code: 200
|
||||
register: volume_list
|
||||
|
||||
- name: Remove all volumes created by this test run
|
||||
cloudscale_volume:
|
||||
uuid: '{{ item.uuid }}'
|
||||
state: 'absent'
|
||||
when: cloudscale_resource_prefix in item.name
|
||||
with_items: '{{ volume_list.json }}'
|
||||
loop_control:
|
||||
label: '{{ item.name }} ({{ item.uuid }})'
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
# Password to use for test server
|
||||
# This has to be set as a fact, otherwise a new password will be generated
|
||||
# on every variable access.
|
||||
- set_fact:
|
||||
cloudscale_test_password: "{{ lookup('password', '/dev/null length=15 chars=ascii_letters') }}"
|
|
@ -1,2 +0,0 @@
|
|||
cloud/cloudscale
|
||||
unsupported
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
dependencies:
|
||||
- cloudscale_common
|
|
@ -1,129 +0,0 @@
|
|||
- name: Request regional floating IP
|
||||
cloudscale_floating_ip:
|
||||
server: '{{ test01.uuid }}'
|
||||
ip_version: '{{ item.ip_version }}'
|
||||
reverse_ptr: '{{ item.reverse_ptr | default(omit) }}'
|
||||
prefix_length: '{{ item.prefix_length | default(omit) }}'
|
||||
region: '{{ cloudscale_test_region }}'
|
||||
|
||||
register: floating_ip
|
||||
- name: Verify request floating IP
|
||||
assert:
|
||||
that:
|
||||
- floating_ip is successful
|
||||
- floating_ip is changed
|
||||
- floating_ip.region.slug == '{{ cloudscale_test_region }}'
|
||||
- (item.ip_version == 4 and floating_ip.ip | ipv4) or (item.ip_version == 6 and floating_ip.ip | ipv6)
|
||||
- floating_ip.server == test01.uuid
|
||||
|
||||
- name: Check floating IP idempotence
|
||||
cloudscale_floating_ip:
|
||||
server: '{{ test01.uuid }}'
|
||||
ip: '{{ floating_ip.ip }}'
|
||||
region: '{{ cloudscale_test_region }}'
|
||||
register: floating_ip_idempotence
|
||||
- name: Verify floating IP idempotence
|
||||
assert:
|
||||
that:
|
||||
- floating_ip_idempotence is successful
|
||||
- floating_ip_idempotence is not changed
|
||||
- floating_ip_idempotence.server == test01.uuid
|
||||
- floating_ip.region.slug == '{{ cloudscale_test_region }}'
|
||||
|
||||
- name: Request global floating IP
|
||||
cloudscale_floating_ip:
|
||||
server: '{{ test01.uuid }}'
|
||||
ip_version: '{{ item.ip_version }}'
|
||||
reverse_ptr: '{{ item.reverse_ptr | default(omit) }}'
|
||||
prefix_length: '{{ item.prefix_length | default(omit) }}'
|
||||
type: 'global'
|
||||
register: global_floating_ip
|
||||
- name: Verify global floating IP
|
||||
assert:
|
||||
that:
|
||||
- global_floating_ip is successful
|
||||
- global_floating_ip is changed
|
||||
- global_floating_ip.region == None
|
||||
- global_floating_ip.type == 'global'
|
||||
- (item.ip_version == 4 and global_floating_ip.ip | ipv4) or (item.ip_version == 6 and global_floating_ip.ip | ipv6)
|
||||
- global_floating_ip.server == test01.uuid
|
||||
|
||||
- name: Release global floating IP
|
||||
cloudscale_floating_ip:
|
||||
ip: '{{ global_floating_ip.ip }}'
|
||||
state: 'absent'
|
||||
register: global_floating_ip
|
||||
- name: Verify release of global floating IP
|
||||
assert:
|
||||
that:
|
||||
- global_floating_ip is successful
|
||||
- global_floating_ip is changed
|
||||
- global_floating_ip.state == 'absent'
|
||||
|
||||
- name: Check network parameter alias
|
||||
cloudscale_floating_ip:
|
||||
server: '{{ test01.uuid }}'
|
||||
network: '{{ floating_ip.ip }}'
|
||||
register: floating_ip_network
|
||||
- name: Verify network parameter alias
|
||||
assert:
|
||||
that:
|
||||
- floating_ip_network is successful
|
||||
|
||||
- name: Move floating IP to second server
|
||||
cloudscale_floating_ip:
|
||||
server: '{{ test02.uuid }}'
|
||||
ip: '{{ floating_ip.ip }}'
|
||||
register: move_ip
|
||||
- name: Verify move floating IPv4 to second server
|
||||
assert:
|
||||
that:
|
||||
- move_ip is successful
|
||||
- move_ip is changed
|
||||
- move_ip.server == test02.uuid
|
||||
|
||||
- name: Fail if server is missing on update
|
||||
cloudscale_floating_ip:
|
||||
ip: '{{ floating_ip.ip }}'
|
||||
register: update_failed
|
||||
ignore_errors: True
|
||||
- name: Verify fail if server is missing on update
|
||||
assert:
|
||||
that:
|
||||
- update_failed is failed
|
||||
- "'Missing required parameter' in update_failed.msg"
|
||||
|
||||
- name: Release floating IP
|
||||
cloudscale_floating_ip:
|
||||
ip: '{{ floating_ip.ip }}'
|
||||
state: 'absent'
|
||||
register: release_ip
|
||||
- name: Verify release floating IPs
|
||||
assert:
|
||||
that:
|
||||
- release_ip is successful
|
||||
- release_ip is changed
|
||||
- release_ip.state == 'absent'
|
||||
|
||||
- name: Release floating IP idempotence
|
||||
cloudscale_floating_ip:
|
||||
ip: '{{ floating_ip.ip }}'
|
||||
state: 'absent'
|
||||
register: release_ip
|
||||
- name: Verify release floating IPs idempotence
|
||||
assert:
|
||||
that:
|
||||
- release_ip is successful
|
||||
- release_ip is not changed
|
||||
- release_ip.state == 'absent'
|
||||
|
||||
- name: Fail if server is missing on request
|
||||
cloudscale_floating_ip:
|
||||
ip_version: 6
|
||||
register: request_failed
|
||||
ignore_errors: True
|
||||
- name: Verify fail if server is missing on request
|
||||
assert:
|
||||
that:
|
||||
- request_failed is failed
|
||||
- "'Missing required parameter' in request_failed.msg"
|
|
@ -1,35 +0,0 @@
|
|||
- name: Cloudscale floating IP tests
|
||||
block:
|
||||
- name: Create a server
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test01'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
register: test01
|
||||
|
||||
- name: Create a second server
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test02'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
register: test02
|
||||
|
||||
- include_tasks: floating_ip.yml
|
||||
loop:
|
||||
- { 'ip_version': 4, 'reverse_ptr': '{{ cloudscale_resource_prefix }}-4.example.com' }
|
||||
- { 'ip_version': 6, 'reverse_ptr': '{{ cloudscale_resource_prefix }}-6.example.com' }
|
||||
- { 'ip_version': 6, 'prefix_length': 56 }
|
||||
|
||||
- import_tasks: unassigned.yml
|
||||
|
||||
always:
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_servers
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_floating_ips
|
|
@ -1,26 +0,0 @@
|
|||
---
|
||||
- name: Assign Floating IP to server test01
|
||||
cloudscale_floating_ip:
|
||||
ip_version: 6
|
||||
server: '{{ test01.uuid }}'
|
||||
reverse_ptr: '{{ cloudscale_resource_prefix }}-unassigned.example.com'
|
||||
region: '{{ cloudscale_test_region }}'
|
||||
register: floating_ip
|
||||
|
||||
# The only way to have an unassigned floating IP is to delete the server
|
||||
# where the floating IP is currently assigned.
|
||||
- name: Delete server test01
|
||||
cloudscale_server:
|
||||
uuid: '{{ test01.uuid }}'
|
||||
state: 'absent'
|
||||
|
||||
- name: Do not fail if floating IP is unassigned
|
||||
cloudscale_floating_ip:
|
||||
ip: '{{ floating_ip.ip }}'
|
||||
register: floating_ip_not_fail
|
||||
- name: Verify do not fail if floating IP is unassigned
|
||||
assert:
|
||||
that:
|
||||
- floating_ip_not_fail is successful
|
||||
- floating_ip_not_fail is not changed
|
||||
- floating_ip_not_fail.server == None
|
|
@ -1,2 +0,0 @@
|
|||
cloud/cloudscale
|
||||
unsupported
|
|
@ -1,2 +0,0 @@
|
|||
---
|
||||
cloudscale_test_flavor_2: flex-4
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
dependencies:
|
||||
- cloudscale_common
|
|
@ -1,53 +0,0 @@
|
|||
---
|
||||
- name: Fail missing params
|
||||
cloudscale_server:
|
||||
register: srv
|
||||
ignore_errors: True
|
||||
- name: 'VERIFY: Fail name and UUID'
|
||||
assert:
|
||||
that:
|
||||
- srv is failed
|
||||
|
||||
- name: Fail unexisting server group
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-group'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
password: '{{ cloudscale_test_password }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-unexist-group'
|
||||
ignore_errors: True
|
||||
register: srv
|
||||
- name: 'VERIFY: Fail unexisting server group'
|
||||
assert:
|
||||
that:
|
||||
- srv is failed
|
||||
- srv.msg.startswith('Server group name or UUID not found')
|
||||
|
||||
- name: Create two server groups with the same name
|
||||
uri:
|
||||
url: https://api.cloudscale.ch/v1/server-groups
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
body:
|
||||
name: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
type: anti-affinity
|
||||
body_format: json
|
||||
status_code: 201
|
||||
register: duplicate
|
||||
with_sequence: count=2
|
||||
|
||||
- name: Try to use server groups with identical name
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-group'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
password: '{{ cloudscale_test_password }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
ignore_errors: True
|
||||
register: srv
|
||||
- name: 'VERIFY: Fail unexisting server group'
|
||||
assert:
|
||||
that:
|
||||
- srv is failed
|
||||
- srv.msg.startswith('More than one server group with name exists')
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
- block:
|
||||
- import_tasks: failures.yml
|
||||
- import_tasks: tests.yml
|
||||
always:
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_servers
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_server_groups
|
|
@ -1,676 +0,0 @@
|
|||
---
|
||||
- name: Setup server groups
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-group-{{ item }}'
|
||||
type: anti-affinity
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
with_sequence: count=2
|
||||
|
||||
- name: Test create a running server in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify create a running server in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'absent'
|
||||
|
||||
- name: Test create a running server
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: server
|
||||
- name: Verify create a running server
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- server.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- server.tags.project == 'ansible-test'
|
||||
- server.tags.stage == 'production'
|
||||
- server.tags.sla == '24-7'
|
||||
|
||||
- name: Test create a running server idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: server
|
||||
- name: Verify create a running server idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- server.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- server.tags.project == 'ansible-test'
|
||||
- server.tags.stage == 'production'
|
||||
- server.tags.sla == '24-7'
|
||||
|
||||
- name: Test update tags in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: staging
|
||||
sla: 8-5
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify update tags in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- server.tags.project == 'ansible-test'
|
||||
- server.tags.stage == 'production'
|
||||
- server.tags.sla == '24-7'
|
||||
|
||||
- name: Test update tags
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: staging
|
||||
sla: 8-5
|
||||
register: server
|
||||
- name: Verify update tags
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- server.tags.project == 'ansible-test'
|
||||
- server.tags.stage == 'staging'
|
||||
- server.tags.sla == '8-5'
|
||||
|
||||
- name: Test update tags idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: staging
|
||||
sla: 8-5
|
||||
register: server
|
||||
- name: Verify update tags idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- server.tags.project == 'ansible-test'
|
||||
- server.tags.stage == 'staging'
|
||||
- server.tags.sla == '8-5'
|
||||
|
||||
- name: Test omit tags idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
register: server
|
||||
- name: Verify update tags idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- server.tags.project == 'ansible-test'
|
||||
- server.tags.stage == 'staging'
|
||||
- server.tags.sla == '8-5'
|
||||
|
||||
- name: Test delete tags
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
tags: {}
|
||||
register: server
|
||||
- name: Verify delete tags
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- not server.tags
|
||||
|
||||
- name: Test delete tags idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
tags: {}
|
||||
register: server
|
||||
- name: Verify delete tags idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
- not server.tags
|
||||
|
||||
- name: Test update flavor of a running server without force in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: no
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify update flavor of a running server without force in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
|
||||
- name: Test update flavor of a running server without force
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: no
|
||||
register: server
|
||||
- name: Verify update flavor of a running server without force
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
|
||||
- name: Test update flavor of a running server without force idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: no
|
||||
register: server
|
||||
- name: Verify update flavor of a running server without force idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
|
||||
- name: Test update flavor and name of a running server without force in check mode
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: no
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify update flavor and name of a running server without force in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test'
|
||||
|
||||
- name: Test update flavor and name of a running server without force
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: no
|
||||
register: server
|
||||
- name: Verify update flavor and name of a running server without force
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
|
||||
- name: Test update flavor and name of a running server without force idempotence
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: no
|
||||
register: server
|
||||
- name: Verify update flavor and name of a running server without force idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
|
||||
- name: Test update flavor of a running server with force in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: yes
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify update flavor of a running server with force in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
|
||||
- name: Test update flavor of a running server with force
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: yes
|
||||
register: server
|
||||
- name: Verify update flavor of a running server with force
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor_2 }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
|
||||
- name: Test update a running server with force idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
flavor: '{{ cloudscale_test_flavor_2 }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
force: yes
|
||||
register: server
|
||||
- name: Verify update flavor of a running server with force idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor_2 }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
|
||||
- name: Remember uuid of running server for anti affinity
|
||||
set_fact:
|
||||
running_server_uuid: '{{ server.uuid }}'
|
||||
|
||||
- name: Test create server stopped in anti affinity and private network only in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-stopped'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
use_public_network: no
|
||||
use_private_network: yes
|
||||
state: stopped
|
||||
check_mode: yes
|
||||
register: server_stopped
|
||||
- name: Verify create server stopped in anti affinity and private network only in check mode
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is changed
|
||||
- server_stopped.state == 'absent'
|
||||
|
||||
- name: Test create server stopped in anti affinity and private network only
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-stopped'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
use_public_network: no
|
||||
use_private_network: yes
|
||||
state: stopped
|
||||
register: server_stopped
|
||||
- name: Verify create server stopped in anti affinity and private network only
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is changed
|
||||
- server_stopped.state == 'stopped'
|
||||
- server_stopped.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- server_stopped.anti_affinity_with.0.uuid == running_server_uuid
|
||||
- server_stopped.interfaces.0.type == 'private'
|
||||
- server_stopped.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
|
||||
- name: Test create server stopped in anti affinity and private network only idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-stopped'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-1'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
use_public_network: no
|
||||
use_private_network: yes
|
||||
state: stopped
|
||||
register: server_stopped
|
||||
- name: Verify create server stopped in anti affinity and private network only idempotence
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is not changed
|
||||
- server_stopped.state == 'stopped'
|
||||
- server_stopped.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- server_stopped.anti_affinity_with.0.uuid == running_server_uuid
|
||||
- server_stopped.interfaces.0.type == 'private'
|
||||
- server_stopped.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
|
||||
- name: Test change server group not changed
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-stopped'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
server_groups: '{{ cloudscale_resource_prefix }}-group-2'
|
||||
use_public_network: no
|
||||
use_private_network: yes
|
||||
state: stopped
|
||||
register: server_stopped
|
||||
- name: Verify Test update server group not changed
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is not changed
|
||||
- server_stopped.state == 'stopped'
|
||||
- server_stopped.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- server_stopped.anti_affinity_with.0.uuid == running_server_uuid
|
||||
- server_stopped.interfaces.0.type == 'private'
|
||||
- server_stopped.server_groups.0.name == '{{ cloudscale_resource_prefix }}-group-1'
|
||||
|
||||
- name: Test create server with password in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-password'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
password: '{{ cloudscale_test_password }}'
|
||||
check_mode: yes
|
||||
register: server_password
|
||||
- name: Verify create server with password in check mode
|
||||
assert:
|
||||
that:
|
||||
- server_password is changed
|
||||
- server_password.state == 'absent'
|
||||
# Verify password is not logged
|
||||
- server_password.diff.after.password != cloudscale_test_password
|
||||
|
||||
- name: Test create server with password
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-password'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
password: '{{ cloudscale_test_password }}'
|
||||
register: server_password
|
||||
- name: Verify create server with password
|
||||
assert:
|
||||
that:
|
||||
- server_password is changed
|
||||
- server_password.state == 'running'
|
||||
# Verify password is not logged
|
||||
- server_password.diff.after.password != cloudscale_test_password
|
||||
|
||||
- name: Test create server with password idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-password'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
password: '{{ cloudscale_test_password }}'
|
||||
register: server_password
|
||||
- name: Verify create server with password idempotence
|
||||
assert:
|
||||
that:
|
||||
- server_password is not changed
|
||||
- server_password.state == 'running'
|
||||
|
||||
- name: Test create server failure without required parameters
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-failed'
|
||||
register: server_failed
|
||||
ignore_errors: yes
|
||||
- name: Verify create server failure without required parameters
|
||||
assert:
|
||||
that:
|
||||
- server_failed is failed
|
||||
- "'Failure while calling the cloudscale.ch API with POST for \"servers\".' in server_failed.msg"
|
||||
- "'This field is required.' in server_failed.fetch_url_info.body"
|
||||
|
||||
- name: Test stop running server in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
state: stopped
|
||||
check_mode: yes
|
||||
register: server
|
||||
- name: Verify stop running server in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
|
||||
- name: Test stop running server
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
state: stopped
|
||||
register: server
|
||||
- name: Verify stop running server
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'stopped'
|
||||
|
||||
- name: Test stop running server idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
state: 'stopped'
|
||||
register: server
|
||||
- name: Verify stop running server idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'stopped'
|
||||
|
||||
- name: Test update a stopped server in check mode
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
state: stopped
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify update a stopped server in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'stopped'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor_2 }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test-renamed'
|
||||
|
||||
- name: Test update a stopped server without force
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
state: stopped
|
||||
register: server
|
||||
- name: Verify update a stopped server without force
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'stopped'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test'
|
||||
|
||||
- name: Test update a stopped server idempotence
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
state: stopped
|
||||
register: server
|
||||
- name: Verify update a stopped server idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'stopped'
|
||||
- server.flavor.slug == '{{ cloudscale_test_flavor }}'
|
||||
- server.name == '{{ cloudscale_resource_prefix }}-test'
|
||||
|
||||
- name: Test server running in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
state: running
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify server running in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'stopped'
|
||||
|
||||
- name: Test server running
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
state: running
|
||||
register: server
|
||||
- name: Verify server running
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
|
||||
- name: Test server running idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
state: running
|
||||
register: server
|
||||
- name: Verify server running idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'running'
|
||||
|
||||
- name: Test running server deletion by name in check mode
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
state: absent
|
||||
register: server
|
||||
check_mode: yes
|
||||
- name: Verify running server deletion by name in check mode
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'running'
|
||||
|
||||
- name: Test running server deletion by name
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
state: absent
|
||||
register: server
|
||||
- name: Verify running server deletion by name
|
||||
assert:
|
||||
that:
|
||||
- server is changed
|
||||
- server.state == 'absent'
|
||||
|
||||
- name: Test running server deletion by name idempotence
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-test'
|
||||
state: absent
|
||||
register: server
|
||||
- name: Verify running server deletion by name idempotence
|
||||
assert:
|
||||
that:
|
||||
- server is not changed
|
||||
- server.state == 'absent'
|
||||
|
||||
- name: Test stopped server deletion by uuid in check mode
|
||||
cloudscale_server:
|
||||
uuid: '{{ server_stopped.uuid }}'
|
||||
state: absent
|
||||
register: server_stopped
|
||||
check_mode: yes
|
||||
- name: Verify stopped server deletion by uuid in check mode
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is changed
|
||||
- server_stopped.state == 'stopped'
|
||||
|
||||
- name: Test stopped server deletion by uuid
|
||||
cloudscale_server:
|
||||
uuid: '{{ server_stopped.uuid }}'
|
||||
state: absent
|
||||
register: server_stopped
|
||||
- name: Verify stopped server deletion by uuid
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is changed
|
||||
- server_stopped.state == 'absent'
|
||||
|
||||
- name: Test stopped server deletion by uuid idempotence
|
||||
cloudscale_server:
|
||||
uuid: '{{ server_stopped.uuid }}'
|
||||
state: absent
|
||||
register: server_stopped
|
||||
- name: Verify stopped server deletion by uuid idempotence
|
||||
assert:
|
||||
that:
|
||||
- server_stopped is not changed
|
||||
- server_stopped.state == 'absent'
|
|
@ -1,2 +0,0 @@
|
|||
cloud/cloudscale
|
||||
unsupported
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
dependencies:
|
||||
- cloudscale_common
|
|
@ -1,45 +0,0 @@
|
|||
---
|
||||
- name: Fail missing params
|
||||
cloudscale_server_group:
|
||||
register: grp
|
||||
ignore_errors: True
|
||||
- name: 'VERIFY: Fail name and UUID'
|
||||
assert:
|
||||
that:
|
||||
- grp is failed
|
||||
|
||||
- name: Create two server groups with the same name
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/server-groups'
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
body:
|
||||
name: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
type: 'anti-affinity'
|
||||
body_format: json
|
||||
status_code: 201
|
||||
register: duplicate
|
||||
with_sequence: count=2
|
||||
|
||||
- name: Try access to duplicate name
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
register: grp
|
||||
ignore_errors: True
|
||||
- name: 'VERIFY: Try access to duplicate name'
|
||||
assert:
|
||||
that:
|
||||
- grp is failed
|
||||
- grp.msg.startswith('More than one server group with name exists')
|
||||
|
||||
- name: Fail server group creation with UUID
|
||||
cloudscale_server_group:
|
||||
uuid: ea3b39a3-77a8-4d0b-881d-0bb00a1e7f48
|
||||
register: grp
|
||||
ignore_errors: True
|
||||
- name: 'VERIFY: Fail server group creation with UUID'
|
||||
assert:
|
||||
that:
|
||||
- grp is failed
|
||||
- grp.msg.startswith('missing required arguments')
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
- block:
|
||||
- import_tasks: failures.yml
|
||||
- import_tasks: tests.yml
|
||||
always:
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_server_groups
|
|
@ -1,159 +0,0 @@
|
|||
---
|
||||
- name: Create server group in check mode
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-grp'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: grp
|
||||
check_mode: yes
|
||||
- name: 'VERIFY: Create server group in check mode'
|
||||
assert:
|
||||
that:
|
||||
- grp is changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp'
|
||||
- not grp.uuid
|
||||
|
||||
- name: Create server group
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-grp'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: grp
|
||||
- name: 'VERIFY: Create server group'
|
||||
assert:
|
||||
that:
|
||||
- grp is changed
|
||||
- grp.type == 'anti-affinity'
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp'
|
||||
- grp.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- grp.uuid
|
||||
- grp.tags.project == 'ansible-test'
|
||||
- grp.tags.stage == 'production'
|
||||
- grp.tags.sla == '24-7'
|
||||
|
||||
- name: Remember uuid
|
||||
set_fact:
|
||||
server_group_uuid: '{{ grp.uuid }}'
|
||||
|
||||
- name: Create server group idempotence
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-grp'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: grp
|
||||
- name: 'VERIFY: Create server group idempotence'
|
||||
assert:
|
||||
that:
|
||||
- grp is not changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp'
|
||||
- grp.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- grp.uuid == server_group_uuid
|
||||
- grp.tags.project == 'ansible-test'
|
||||
- grp.tags.stage == 'production'
|
||||
- grp.tags.sla == '24-7'
|
||||
|
||||
- name: Update server group in check mode
|
||||
cloudscale_server_group:
|
||||
uuid: '{{ server_group_uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-grp2'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: staging
|
||||
sla: 8-5
|
||||
register: grp
|
||||
check_mode: yes
|
||||
- name: 'VERIFY: Update server group in check mode'
|
||||
assert:
|
||||
that:
|
||||
- grp is changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp'
|
||||
- grp.uuid == server_group_uuid
|
||||
- grp.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- grp.tags.project == 'ansible-test'
|
||||
- grp.tags.stage == 'production'
|
||||
- grp.tags.sla == '24-7'
|
||||
|
||||
- name: Update server group
|
||||
cloudscale_server_group:
|
||||
uuid: '{{ server_group_uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-grp2'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: staging
|
||||
sla: 8-5
|
||||
register: grp
|
||||
- name: 'VERIFY: Update server group'
|
||||
assert:
|
||||
that:
|
||||
- grp is changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp2'
|
||||
- grp.uuid == server_group_uuid
|
||||
- grp.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- grp.tags.project == 'ansible-test'
|
||||
- grp.tags.stage == 'staging'
|
||||
- grp.tags.sla == '8-5'
|
||||
|
||||
- name: Update server group idempotence
|
||||
cloudscale_server_group:
|
||||
uuid: '{{ server_group_uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-grp2'
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: staging
|
||||
sla: 8-5
|
||||
register: grp
|
||||
- name: 'VERIFY: Update server group idempotence'
|
||||
assert:
|
||||
that:
|
||||
- grp is not changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp2'
|
||||
- grp.uuid == server_group_uuid
|
||||
- grp.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- grp.tags.project == 'ansible-test'
|
||||
- grp.tags.stage == 'staging'
|
||||
- grp.tags.sla == '8-5'
|
||||
|
||||
- name: Delete server group in check mode
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-grp2'
|
||||
state: absent
|
||||
register: grp
|
||||
check_mode: yes
|
||||
- name: 'VERIFY: Delete server group in check mode'
|
||||
assert:
|
||||
that:
|
||||
- grp is changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp2'
|
||||
- grp.uuid == server_group_uuid
|
||||
|
||||
- name: Delete server group
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-grp2'
|
||||
state: absent
|
||||
register: grp
|
||||
- name: 'VERIFY: Delete server group'
|
||||
assert:
|
||||
that:
|
||||
- grp is changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp2'
|
||||
- grp.uuid == server_group_uuid
|
||||
|
||||
- name: Delete server group idempotence
|
||||
cloudscale_server_group:
|
||||
name: '{{ cloudscale_resource_prefix }}-grp2'
|
||||
state: absent
|
||||
register: grp
|
||||
- name: 'VERIFY: Delete server group idempotence'
|
||||
assert:
|
||||
that:
|
||||
- grp is not changed
|
||||
- grp.name == '{{ cloudscale_resource_prefix }}-grp2'
|
||||
- not grp.uuid
|
|
@ -1,2 +0,0 @@
|
|||
cloud/cloudscale
|
||||
unsupported
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
dependencies:
|
||||
- cloudscale_common
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
- name: Remove test server
|
||||
cloudscale_server:
|
||||
uuid: '{{ server.uuid }}'
|
||||
state: 'absent'
|
|
@ -1,38 +0,0 @@
|
|||
---
|
||||
- name: Create two volumes with the same name
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/volumes'
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: 'Bearer {{ cloudscale_api_token }}'
|
||||
body:
|
||||
name: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
size_gb: 50
|
||||
body_format: json
|
||||
status_code: 201
|
||||
register: duplicate
|
||||
with_sequence: count=2
|
||||
|
||||
- name: Try access to duplicate name
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
size_gb: 10
|
||||
register: vol
|
||||
ignore_errors: True
|
||||
- name: 'VERIFY: Try access to duplicate name'
|
||||
assert:
|
||||
that:
|
||||
- vol is failed
|
||||
|
||||
- name: Fail volume creation with UUID
|
||||
cloudscale_volume:
|
||||
uuid: ea3b39a3-77a8-4d0b-881d-0bb00a1e7f48
|
||||
name: '{{ cloudscale_resource_prefix }}-inexistent'
|
||||
size_gb: 10
|
||||
register: vol
|
||||
ignore_errors: True
|
||||
- name: 'VERIFY: Fail volume creation with UUID'
|
||||
assert:
|
||||
that:
|
||||
- vol is failed
|
||||
- vol.msg.startswith('The volume with UUID \'ea3b39a3-77a8-4d0b-881d-0bb00a1e7f48\' was not found')
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
- block:
|
||||
- import_tasks: setup.yml
|
||||
- import_tasks: tests.yml
|
||||
always:
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_servers
|
||||
- import_role:
|
||||
name: cloudscale_common
|
||||
tasks_from: cleanup_volumes
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
- name: Create test instance
|
||||
cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-server'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
register: server
|
|
@ -1,262 +0,0 @@
|
|||
---
|
||||
- name: Create volume in check mode
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-vol'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
size_gb: 50
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
check_mode: yes
|
||||
register: vol
|
||||
- name: 'VERIFY: Create volume in check mode'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is changed
|
||||
- vol.state == 'absent'
|
||||
|
||||
- name: Create volume
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-vol'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
size_gb: 50
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: vol
|
||||
- name: 'VERIFY: Create volume'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is changed
|
||||
- vol.size_gb == 50
|
||||
- vol.name == '{{ cloudscale_resource_prefix }}-vol'
|
||||
- vol.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- vol.tags.project == 'ansible-test'
|
||||
- vol.tags.stage == 'production'
|
||||
- vol.tags.sla == '24-7'
|
||||
|
||||
- name: Create volume idempotence
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-vol'
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
size_gb: 50
|
||||
tags:
|
||||
project: ansible-test
|
||||
stage: production
|
||||
sla: 24-7
|
||||
register: vol
|
||||
- name: 'VERIFY: Create volume idempotence'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is not changed
|
||||
- vol.size_gb == 50
|
||||
- vol.name == '{{ cloudscale_resource_prefix }}-vol'
|
||||
- vol.zone.slug == '{{ cloudscale_test_zone }}'
|
||||
- vol.tags.project == 'ansible-test'
|
||||
- vol.tags.stage == 'production'
|
||||
- vol.tags.sla == '24-7'
|
||||
|
||||
- name: Attach existing volume by name to server in check mode
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-vol'
|
||||
server_uuids:
|
||||
- '{{ server.uuid }}'
|
||||
check_mode: yes
|
||||
register: vol
|
||||
- name: 'VERIFY: Attach existing volume by name to server in check mode'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is changed
|
||||
- server.uuid not in vol.server_uuids
|
||||
|
||||
- name: Attach existing volume by name to server
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-vol'
|
||||
server_uuids:
|
||||
- '{{ server.uuid }}'
|
||||
register: vol
|
||||
- name: 'VERIFY: Attach existing volume by name to server'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is changed
|
||||
- server.uuid in vol.server_uuids
|
||||
|
||||
- name: Attach existing volume by name to server idempotence
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-vol'
|
||||
server_uuids:
|
||||
- '{{ server.uuid }}'
|
||||
register: vol
|
||||
- name: 'VERIFY: Attach existing volume by name to server idempotence'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is not changed
|
||||
- server.uuid in vol.server_uuids
|
||||
|
||||
- name: Resize attached volume by UUID in check mode
|
||||
cloudscale_volume:
|
||||
uuid: '{{ vol.uuid }}'
|
||||
size_gb: 100
|
||||
check_mode: yes
|
||||
register: vol
|
||||
- name: 'VERIFY: Resize attached volume by UUID in check mode'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is changed
|
||||
- vol.size_gb == 50
|
||||
|
||||
- name: Resize attached volume by UUID
|
||||
cloudscale_volume:
|
||||
uuid: '{{ vol.uuid }}'
|
||||
size_gb: 100
|
||||
register: vol
|
||||
- name: 'VERIFY: Resize attached volume by UUID'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is changed
|
||||
- vol.size_gb == 100
|
||||
|
||||
- name: Resize attached volume by UUID idempotence
|
||||
cloudscale_volume:
|
||||
uuid: '{{ vol.uuid }}'
|
||||
size_gb: 100
|
||||
register: vol
|
||||
- name: 'VERIFY: Resize attached volume by UUID idempotence'
|
||||
assert:
|
||||
that:
|
||||
- vol is successful
|
||||
- vol is not changed
|
||||
- vol.size_gb == 100
|
||||
|
||||
- name: Delete attached volume by UUID in check mode
|
||||
cloudscale_volume:
|
||||
uuid: '{{ vol.uuid }}'
|
||||
state: 'absent'
|
||||
check_mode: yes
|
||||
register: deleted
|
||||
- name: 'VERIFY: Delete attached volume by UUID in check mode'
|
||||
assert:
|
||||
that:
|
||||
- deleted is successful
|
||||
- deleted is changed
|
||||
- deleted.state == 'present'
|
||||
- deleted.uuid == vol.uuid
|
||||
- deleted.name == '{{ cloudscale_resource_prefix }}-vol'
|
||||
|
||||
- name: Delete attached volume by UUID
|
||||
cloudscale_volume:
|
||||
uuid: '{{ vol.uuid }}'
|
||||
state: 'absent'
|
||||
register: deleted
|
||||
- name: 'VERIFY: Delete attached volume by UUID'
|
||||
assert:
|
||||
that:
|
||||
- deleted is successful
|
||||
- deleted is changed
|
||||
- deleted.state == 'absent'
|
||||
- deleted.uuid == vol.uuid
|
||||
- deleted.name == '{{ cloudscale_resource_prefix }}-vol'
|
||||
|
||||
- name: Delete attached volume by UUID idempotence
|
||||
cloudscale_volume:
|
||||
uuid: '{{ vol.uuid }}'
|
||||
state: 'absent'
|
||||
register: deleted
|
||||
- name: 'VERIFY: Delete attached volume by UUID idempotence'
|
||||
assert:
|
||||
that:
|
||||
- deleted is successful
|
||||
- deleted is not changed
|
||||
- deleted.state == 'absent'
|
||||
- deleted.uuid == vol.uuid
|
||||
- not deleted.name
|
||||
|
||||
- name: Create bulk volume and attach
|
||||
cloudscale_volume:
|
||||
name: '{{ cloudscale_resource_prefix }}-bulk'
|
||||
type: bulk
|
||||
zone: '{{ cloudscale_test_zone }}'
|
||||
size_gb: 100
|
||||
server_uuids:
|
||||
- '{{ server.uuid }}'
|
||||
register: bulk
|
||||
- name: 'VERIFY: Create bulk volume and attach'
|
||||
assert:
|
||||
that:
|
||||
- bulk is successful
|
||||
- bulk is changed
|
||||
- bulk.size_gb == 100
|
||||
- server.uuid in bulk.server_uuids
|
||||
|
||||
- name: Detach volume by UUID
|
||||
cloudscale_volume:
|
||||
uuid: '{{ bulk.uuid }}'
|
||||
server_uuids: []
|
||||
register: bulk
|
||||
- name: 'VERIFY: Detach volume by UUID'
|
||||
assert:
|
||||
that:
|
||||
- bulk is successful
|
||||
- bulk is changed
|
||||
- bulk.server_uuids == []
|
||||
|
||||
- name: Resize detached volume by name
|
||||
cloudscale_volume:
|
||||
name: '{{ bulk.name }}'
|
||||
size_gb: 200
|
||||
register: bulk
|
||||
- name: 'VERIFY: Resize detached volume by name'
|
||||
assert:
|
||||
that:
|
||||
- bulk is successful
|
||||
- bulk is changed
|
||||
- bulk.size_gb == 200
|
||||
|
||||
- name: Delete volume by name in check mode
|
||||
cloudscale_volume:
|
||||
name: '{{ bulk.name }}'
|
||||
state: 'absent'
|
||||
check_mode: yes
|
||||
register: bulk
|
||||
- name: 'VERIFY: Delete volume by name'
|
||||
assert:
|
||||
that:
|
||||
- bulk is successful
|
||||
- bulk is changed
|
||||
- bulk.state == 'present'
|
||||
|
||||
- name: Delete volume by name
|
||||
cloudscale_volume:
|
||||
name: '{{ bulk.name }}'
|
||||
state: 'absent'
|
||||
register: bulk
|
||||
- name: 'VERIFY: Delete volume by name'
|
||||
assert:
|
||||
that:
|
||||
- bulk is successful
|
||||
- bulk is changed
|
||||
- bulk.state == 'absent'
|
||||
|
||||
- name: Delete volume by name idempotence
|
||||
cloudscale_volume:
|
||||
name: '{{ bulk.name }}'
|
||||
state: 'absent'
|
||||
register: bulk
|
||||
- name: 'VERIFY: Delete volume by name idempotence'
|
||||
assert:
|
||||
that:
|
||||
- bulk is successful
|
||||
- bulk is not changed
|
||||
- bulk.state == 'absent'
|
||||
|
||||
- import_tasks: failures.yml
|
|
@ -1,3 +0,0 @@
|
|||
cloud/cloudscale
|
||||
unsupported
|
||||
needs/target/cloudscale_common
|
|
@ -1,17 +0,0 @@
|
|||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
from ansible.inventory.group import to_safe_group_name
|
||||
|
||||
|
||||
def safe_group_name(name):
|
||||
return to_safe_group_name(name)
|
||||
|
||||
|
||||
class FilterModule(object):
|
||||
filter_map = {
|
||||
'safe_group_name': safe_group_name
|
||||
}
|
||||
|
||||
def filters(self):
|
||||
return self.filter_map
|
|
@ -1,14 +0,0 @@
|
|||
plugin: community.general.cloudscale
|
||||
ansible_host: private
|
||||
inventory_hostname: name
|
||||
groups:
|
||||
ansible: inventory_hostname.startswith('ansible')
|
||||
private_net: (cloudscale.interfaces | selectattr('type', 'equalto', 'private') | list | length) > 0
|
||||
keyed_groups:
|
||||
- prefix: net
|
||||
key: (cloudscale.interfaces.0.addresses.0.address + '/' + cloudscale.interfaces.0.addresses.0.prefix_length | string) | ansible.netcommon.ipaddr('network')
|
||||
- prefix: distro
|
||||
key: cloudscale.image.operating_system
|
||||
compose:
|
||||
flavor_image: cloudscale.flavor.slug + '_' + cloudscale.image.slug
|
||||
strict: false
|
|
@ -1,14 +0,0 @@
|
|||
plugin: community.general.cloudscale
|
||||
ansible_host: public_v4
|
||||
inventory_hostname: name
|
||||
groups:
|
||||
ansible: inventory_hostname.startswith('ansible')
|
||||
private_net: (cloudscale.interfaces | selectattr('type', 'equalto', 'private') | list | length) > 0
|
||||
keyed_groups:
|
||||
- prefix: net
|
||||
key: (cloudscale.interfaces.0.addresses.0.address + '/' + cloudscale.interfaces.0.addresses.0.prefix_length | string) | ansible.netcommon.ipaddr('network')
|
||||
- prefix: distro
|
||||
key: cloudscale.image.operating_system
|
||||
compose:
|
||||
flavor_image: cloudscale.flavor.slug + '_' + cloudscale.image.slug
|
||||
strict: false
|
|
@ -1,14 +0,0 @@
|
|||
plugin: community.general.cloudscale
|
||||
ansible_host: public_v4
|
||||
inventory_hostname: uuid
|
||||
groups:
|
||||
ansible: cloudscale.name.startswith('ansible')
|
||||
private_net: (cloudscale.interfaces | selectattr('type', 'equalto', 'private') | list | length) > 0
|
||||
keyed_groups:
|
||||
- prefix: net
|
||||
key: (cloudscale.interfaces.0.addresses.0.address + '/' + cloudscale.interfaces.0.addresses.0.prefix_length | string) | ansible.netcommon.ipaddr('network')
|
||||
- prefix: distro
|
||||
key: cloudscale.image.operating_system
|
||||
compose:
|
||||
flavor_image: cloudscale.flavor.slug + '_' + cloudscale.image.slug
|
||||
strict: false
|
|
@ -1,8 +0,0 @@
|
|||
- name: Change inventory configuration to {{ inventory_config }}
|
||||
file:
|
||||
src: '{{ inventory_config }}'
|
||||
dest: ../inventory_cloudscale.yml
|
||||
state: link
|
||||
|
||||
- name: Refresh inventory
|
||||
meta: refresh_inventory
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
- name: List all servers
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/servers'
|
||||
headers:
|
||||
Authorization: 'Bearer {{ lookup("env", "CLOUDSCALE_API_TOKEN") }}'
|
||||
status_code: 200
|
||||
register: server_list
|
||||
|
||||
- name: Remove all servers created by this test run
|
||||
community.general.cloudscale_server:
|
||||
uuid: '{{ item.uuid }}'
|
||||
state: 'absent'
|
||||
when: cloudscale_resource_prefix in item.name
|
||||
with_items: '{{ server_list.json }}'
|
||||
loop_control:
|
||||
label: '{{ item.name }} ({{ item.uuid }})'
|
|
@ -1,50 +0,0 @@
|
|||
---
|
||||
- name: '{{ inventory }}: Verify basic inventory'
|
||||
assert:
|
||||
that:
|
||||
- server_public[identifier] in hostvars
|
||||
- server_private[identifier] in hostvars
|
||||
- server_public_private[identifier] in hostvars
|
||||
- server_unsafe_chars[identifier] in hostvars
|
||||
|
||||
- name: '{{ inventory }}: Verify duplicate host names in inventory'
|
||||
assert:
|
||||
that:
|
||||
- cloudscale_resource_prefix + '-duplicate' not in hostvars
|
||||
- (cloudscale_resource_prefix + '-duplicate') | safe_group_name in groups
|
||||
|
||||
- name: '{{ inventory }}: Verify constructed groups in inventory'
|
||||
assert:
|
||||
that:
|
||||
# Test for the "ansible" group
|
||||
- '"ansible" in groups'
|
||||
- server_public[identifier] in groups.ansible
|
||||
- server_private[identifier] in groups.ansible
|
||||
- server_public_private[identifier] in groups.ansible
|
||||
- server_unsafe_chars[identifier] in groups.ansible
|
||||
- server_other_prefix[identifier] not in groups.ansible
|
||||
# Tests for the "private_net" group
|
||||
- '"private_net" in groups'
|
||||
- server_public[identifier] not in groups["private_net"]
|
||||
- server_private[identifier] in groups["private_net"]
|
||||
- server_public_private[identifier] in groups["private_net"]
|
||||
# Tests for "distro" keyed group
|
||||
- '"distro_Debian" in groups'
|
||||
- '"distro_Ubuntu" in groups'
|
||||
- server_public[identifier] in groups.distro_Debian
|
||||
- server_private[identifier] not in groups.distro_Debian
|
||||
- server_public[identifier] not in groups.distro_Ubuntu
|
||||
- server_private[identifier] in groups.distro_Ubuntu
|
||||
# Test for flavor_image composed variable
|
||||
- hostvars[server_public[identifier]].flavor_image == 'flex-2_debian-9'
|
||||
- hostvars[server_private[identifier]].flavor_image == 'flex-2_ubuntu-18.04'
|
||||
|
||||
- name: '{{ inventory }}: Verify cloudscale specific host variables'
|
||||
assert:
|
||||
that:
|
||||
- hostvars[item.0[identifier]].cloudscale[item.1] == item.0[item.1]
|
||||
with_nested:
|
||||
- [ '{{ server_public }}', '{{ server_private }}', '{{ server_public_private }}' ]
|
||||
- [ 'anti_affinity_with', 'flavor', 'href', 'image', 'interfaces', 'name', 'uuid', 'volumes' ]
|
||||
loop_control:
|
||||
label: '{{ item.0.name }} ({{ item.0.uuid }}): {{ item.1 }}'
|
|
@ -1,74 +0,0 @@
|
|||
---
|
||||
- name: Create server with public network only
|
||||
community.general.cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-inventory-public'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
use_public_network: True
|
||||
use_private_network: False
|
||||
register: server_public
|
||||
|
||||
- name: Create server with private network only
|
||||
community.general.cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-inventory-private'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_alt_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
use_public_network: False
|
||||
use_private_network: True
|
||||
register: server_private
|
||||
|
||||
- name: Create server with public and private network
|
||||
community.general.cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-inventory-public-private'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
use_public_network: True
|
||||
use_private_network: True
|
||||
register: server_public_private
|
||||
|
||||
- name: Create servers with duplicate names
|
||||
# The cloudscale_server module does not allow creating two servers with the same
|
||||
# name. To do this the uri module has to be used.
|
||||
uri:
|
||||
url: 'https://api.cloudscale.ch/v1/servers'
|
||||
method: POST
|
||||
headers:
|
||||
Authorization: 'Bearer {{ lookup("env", "CLOUDSCALE_API_TOKEN") }}'
|
||||
body:
|
||||
name: '{{ cloudscale_resource_prefix }}-duplicate'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys:
|
||||
- '{{ cloudscale_test_ssh_key }}'
|
||||
body_format: json
|
||||
status_code: 201
|
||||
register: duplicate
|
||||
with_sequence: count=2
|
||||
|
||||
- name: Create server with different prefix
|
||||
community.general.cloudscale_server:
|
||||
name: 'other-prefix-{{ cloudscale_resource_prefix }}-inventory'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
register: server_other_prefix
|
||||
|
||||
# The API does not allow creation of a server with a name containing
|
||||
# characters not allowed in DNS names. So create a server and rename
|
||||
# it afterwards (which is possible). The resaon for this restriction is
|
||||
# that on creation a PTR entry for the server is created.
|
||||
- name: Create server to be renamed with unsafe characters
|
||||
community.general.cloudscale_server:
|
||||
name: '{{ cloudscale_resource_prefix }}-unsafe-chars'
|
||||
flavor: '{{ cloudscale_test_flavor }}'
|
||||
image: '{{ cloudscale_test_image }}'
|
||||
ssh_keys: '{{ cloudscale_test_ssh_key }}'
|
||||
register: server_unsafe_chars
|
||||
- name: Rename server to contain unsafe characters
|
||||
community.general.cloudscale_server:
|
||||
uuid: '{{ server_unsafe_chars.uuid }}'
|
||||
name: '{{ cloudscale_resource_prefix }}-snowmans-are-cool-☃!'
|
||||
register: server_unsafe_chars
|
|
@ -1,68 +0,0 @@
|
|||
---
|
||||
- name: Create servers and test cloudscale inventory plugin
|
||||
hosts: localhost
|
||||
gather_facts: False
|
||||
roles:
|
||||
- cloudscale_common
|
||||
tasks:
|
||||
- block:
|
||||
- import_tasks: setup.yml
|
||||
|
||||
- import_tasks: change-inventory-config.yml
|
||||
vars:
|
||||
inventory_config: inventory-public.yml
|
||||
|
||||
- import_tasks: common-asserts.yml
|
||||
vars:
|
||||
identifier: 'name'
|
||||
inventory: 'Public v4'
|
||||
|
||||
- name: Verify inventory with public IP
|
||||
assert:
|
||||
that:
|
||||
# Test ansible_host setting
|
||||
- server_public.interfaces.0.addresses.0.address
|
||||
== hostvars[server_public.name].ansible_host
|
||||
- server_public_private.interfaces.0.addresses.0.address
|
||||
== hostvars[server_public_private.name].ansible_host
|
||||
- '"ansible_host" not in hostvars[server_private.name]'
|
||||
|
||||
- import_tasks: change-inventory-config.yml
|
||||
vars:
|
||||
inventory_config: inventory-private.yml
|
||||
|
||||
- import_tasks: common-asserts.yml
|
||||
vars:
|
||||
identifier: 'name'
|
||||
inventory: 'Private v4'
|
||||
|
||||
- name: Verify inventory with private IP
|
||||
assert:
|
||||
that:
|
||||
# Test ansible_host setting
|
||||
- '"ansible_host" not in hostvars[server_public.name]'
|
||||
- server_private.interfaces.0.addresses.0.address
|
||||
== hostvars[server_private.name].ansible_host
|
||||
- server_public_private.interfaces.1.addresses.0.address
|
||||
== hostvars[server_public_private.name].ansible_host
|
||||
|
||||
- import_tasks: change-inventory-config.yml
|
||||
vars:
|
||||
inventory_config: inventory-uuid.yml
|
||||
|
||||
- import_tasks: common-asserts.yml
|
||||
vars:
|
||||
identifier: 'uuid'
|
||||
inventory: 'UUID'
|
||||
|
||||
- name: Verify inventory with UUID
|
||||
assert:
|
||||
that:
|
||||
# Test server name groups
|
||||
- groups[server_public.name | safe_group_name] == [server_public.uuid]
|
||||
- groups[server_private.name | safe_group_name] == [server_private.uuid]
|
||||
- groups[server_public_private.name | safe_group_name] == [server_public_private.uuid]
|
||||
- groups[server_unsafe_chars.name | safe_group_name] == [server_unsafe_chars.uuid]
|
||||
|
||||
always:
|
||||
- import_tasks: cleanup.yml
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Exit on errors, exit when accessing unset variables and print all commands
|
||||
set -eux
|
||||
|
||||
# Set the role path so that the cloudscale_common role is available
|
||||
export ANSIBLE_ROLES_PATH="../"
|
||||
|
||||
# Set the filter plugin search path so that the safe_group_name filter is available
|
||||
export ANSIBLE_FILTER_PLUGINS="./filter_plugins"
|
||||
|
||||
rm -f inventory.yml
|
||||
export ANSIBLE_INVENTORY="./inventory_cloudscale.yml"
|
||||
|
||||
# Run without converting invalid characters in group names
|
||||
export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=never
|
||||
ansible-playbook playbooks/test-inventory.yml "$@"
|
||||
|
||||
# Run with converting invalid characters in group names
|
||||
export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=always
|
||||
ansible-playbook playbooks/test-inventory.yml "$@"
|
Loading…
Add table
Add a link
Reference in a new issue