mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-06 13:22:48 +00:00
Add OpenNebula one_service module (#37829)
This commit is contained in:
@@ -4,3 +4,4 @@
|
||||
- { role: one_vm, tags: test_one_vm }
|
||||
- { role: one_image, tags: test_one_image }
|
||||
- { role: one_image_facts, tags: test_one_image_facts }
|
||||
- { role: one_service, tags: test_one_service }
|
||||
|
||||
63
test/legacy/roles/one_service/defaults/main.yml
Normal file
63
test/legacy/roles/one_service/defaults/main.yml
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
# This is a role for running integration test of the one_service module.
|
||||
# For this role to be used you need to meet the following prerequisites:
|
||||
# 1. Environment variables ONEFLOW_URL, ONEFLOW_USERNAME and ONEFLOW_PASSWORD
|
||||
# need to be set.
|
||||
# 2. Service template needs to exist. Here is an example service template:
|
||||
#
|
||||
# {
|
||||
# "name": "test-one_service-module",
|
||||
# "deployment": "straight",
|
||||
# "description": "This template is used for running integration tests of the one_service Ansible module",
|
||||
# "roles": [
|
||||
# {
|
||||
# "name": "router",
|
||||
# "cardinality": 1,
|
||||
# "vm_template": 15,
|
||||
# "vm_template_contents": "NIC=[NETWORK_ID=\"$PRIVATE\"]\n",
|
||||
# "min_vms": 1,
|
||||
# "max_vms": 2,
|
||||
# "cooldown": 0,
|
||||
# "elasticity_policies": [],
|
||||
# "scheduled_policies": []
|
||||
# },
|
||||
# {
|
||||
# "name": "battle",
|
||||
# "cardinality": 1,
|
||||
# "vm_template": 15,
|
||||
# "vm_template_contents": "NIC=[NETWORK_ID=\"$PUBLIC\"]\n",
|
||||
# "elasticity_policies": [],
|
||||
# "scheduled_policies": []
|
||||
# }
|
||||
# ],
|
||||
# "custom_attrs": {
|
||||
# "PUBLIC": "M|vnet_id|Public Network",
|
||||
# "PRIVATE": "M|vnet_id|Private Network"
|
||||
# },
|
||||
# "ready_status_gate": false
|
||||
# }
|
||||
#
|
||||
# 3. User used to authenticate with the OneFlow server needs to belong to two
|
||||
# groups and it needs to have Use permission on the above template.
|
||||
# 4. Play vars need to be set bellow to reflect the user, group, template IDs, etc.
|
||||
|
||||
# ID of the service template in One used for testing
|
||||
one_template_id: 90
|
||||
|
||||
# Name of the template above
|
||||
one_template_name: 'test-one_service-module'
|
||||
|
||||
# Template custom attributes needed to bring the service up
|
||||
one_template_custom_attrs:
|
||||
PUBLIC: 27
|
||||
PRIVATE: 27
|
||||
|
||||
# ID of the user used to login into OneFlow
|
||||
one_owner_id: 37
|
||||
|
||||
# Users primary and secondary groups
|
||||
one_group_id_primary: 113
|
||||
one_group_id_secondary: 1
|
||||
# Role which will be used for changing cardinality
|
||||
|
||||
one_role: router
|
||||
266
test/legacy/roles/one_service/tasks/main.yml
Normal file
266
test/legacy/roles/one_service/tasks/main.yml
Normal file
@@ -0,0 +1,266 @@
|
||||
---
|
||||
- name: Instantiate a service in check mode
|
||||
one_service:
|
||||
template_id: '{{ one_template_id }}'
|
||||
register: create_check_mode
|
||||
check_mode: yes
|
||||
|
||||
- name: Check if instantiate in check mode returns as 'changed'
|
||||
assert:
|
||||
that:
|
||||
- create_check_mode is changed
|
||||
msg: Check mode doesn't return as 'changed' when instantiating in check mode
|
||||
|
||||
- name: Check if it fails if no service in check mode
|
||||
one_service:
|
||||
service_name: testing-one_service-module-{{ ansible_date_time.iso8601_basic_short }}-missing
|
||||
register: missing_service
|
||||
failed_when: not missing_service is failed
|
||||
check_mode: yes
|
||||
|
||||
- name: Check if fails if no service
|
||||
one_service:
|
||||
service_name: testing-one_service-module-{{ ansible_date_time.iso8601_basic_short }}-missing
|
||||
register: missing_service
|
||||
failed_when: not missing_service is failed
|
||||
|
||||
# Instantiate a new service without passing required custom_attrs, wait for it to fail, then delete it
|
||||
- block:
|
||||
- name: Instantiate service from template ID
|
||||
one_service:
|
||||
template_id: '{{ one_template_id }}'
|
||||
register: service
|
||||
|
||||
- name: Check if instantiate returns as 'changed'
|
||||
assert:
|
||||
that: service is changed
|
||||
|
||||
- name: Print service information for debugging
|
||||
debug:
|
||||
var: service
|
||||
|
||||
- name: Wait for service to become RUNNING
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
wait: yes
|
||||
register: wait
|
||||
failed_when: not wait.failed
|
||||
always:
|
||||
- name: Delete service in check mode
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
state: absent
|
||||
register: delete_service
|
||||
check_mode: yes
|
||||
|
||||
- name: Check if delete reports 'changed' in check mode
|
||||
assert:
|
||||
that:
|
||||
- delete_service is changed
|
||||
|
||||
- name: Delete service
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
state: absent
|
||||
register: delete_service
|
||||
|
||||
- name: Check if delete reports 'changed'
|
||||
assert:
|
||||
that:
|
||||
- delete_service is changed
|
||||
|
||||
- name: Delete service again to check idempotence
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
state: absent
|
||||
register: delete_service
|
||||
|
||||
- name: Check if consecutive delete reports 'OK'
|
||||
assert:
|
||||
that:
|
||||
- not delete_service is changed
|
||||
msg: "state=absent is not idempotent"
|
||||
|
||||
- name: Wait for the service to be deleted
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
register: delete_service
|
||||
failed_when: no
|
||||
until: delete_service is failed
|
||||
retries: 30
|
||||
delay: 2
|
||||
|
||||
- block:
|
||||
- name: Instantiate service from a named template
|
||||
one_service:
|
||||
template_name: '{{ one_template_name }}'
|
||||
custom_attrs: '{{ one_template_custom_attrs }}'
|
||||
register: service
|
||||
|
||||
- name: Check that mode/group were set to defaults on creation
|
||||
assert:
|
||||
that:
|
||||
- service is changed
|
||||
- service.group_id == {{ one_group_id_primary }}
|
||||
- service.mode == 600
|
||||
|
||||
- name: Set mode/group of the service
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
group_id: '{{ one_group_id_secondary }}'
|
||||
mode: 640
|
||||
register: service_info
|
||||
|
||||
- name: Check that mode/group were set correctly
|
||||
assert:
|
||||
that:
|
||||
- service_info is changed
|
||||
- service_info.group_id == {{ one_group_id_secondary }}
|
||||
- service_info.mode == 640
|
||||
|
||||
- name: Wait for service to become RUNNING
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
wait: yes
|
||||
register: service_running
|
||||
|
||||
- name: Check that service state is RUNNING
|
||||
assert:
|
||||
that:
|
||||
- not service_running is changed
|
||||
- service_running.state == "RUNNING"
|
||||
always:
|
||||
- name: Delete service
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
state: absent
|
||||
|
||||
- block:
|
||||
- name: Instantiate service from a named template with set mode/group
|
||||
one_service:
|
||||
template_name: '{{ one_template_name }}'
|
||||
custom_attrs: '{{ one_template_custom_attrs }}'
|
||||
group_id: '{{ one_group_id_secondary }}'
|
||||
mode: 660
|
||||
register: service
|
||||
|
||||
- name: Check that mode/group were set correctly on creation
|
||||
assert:
|
||||
that:
|
||||
- service is changed
|
||||
- service.group_id == {{ one_group_id_secondary }}
|
||||
- service.mode == 660
|
||||
|
||||
- name: Wait for service to become RUNNING
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
wait: yes
|
||||
always:
|
||||
- name: Delete service
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
state: absent
|
||||
|
||||
- block:
|
||||
- name: Set the name of the service for this test run
|
||||
set_fact:
|
||||
srv_name: testing-one_service-module-{{ ansible_date_time.iso8601_basic_short }}
|
||||
|
||||
- name: Instantiate a unique service in check mode
|
||||
one_service:
|
||||
template_name: '{{ one_template_name }}'
|
||||
service_name: '{{ srv_name }}'
|
||||
custom_attrs: '{{ one_template_custom_attrs }}'
|
||||
unique: yes
|
||||
check_mode: yes
|
||||
register: service
|
||||
|
||||
- name: Check if instantiating a service with a unique name in check mode returns 'changed'
|
||||
assert:
|
||||
that:
|
||||
- service is changed
|
||||
|
||||
- name: Instantiate a unique service
|
||||
one_service:
|
||||
template_name: '{{ one_template_name }}'
|
||||
service_name: '{{ srv_name }}'
|
||||
custom_attrs: '{{ one_template_custom_attrs }}'
|
||||
unique: yes
|
||||
register: service
|
||||
|
||||
- name: Check if instantiating a service with a unique name returns 'changed'
|
||||
assert:
|
||||
that:
|
||||
- service is changed
|
||||
- service.service_name == srv_name
|
||||
- service.state == "PENDING"
|
||||
|
||||
- name: Instantiate a unique service again to check indepontence
|
||||
one_service:
|
||||
template_name: '{{ one_template_name }}'
|
||||
service_name: '{{ srv_name }}'
|
||||
custom_attrs: '{{ one_template_custom_attrs }}'
|
||||
unique: yes
|
||||
register: service
|
||||
|
||||
- name: Check idempotence of instantiating a service with a unique name
|
||||
assert:
|
||||
that:
|
||||
- not service is changed
|
||||
|
||||
- name: Wait for service by its name to become RUNNING
|
||||
one_service:
|
||||
service_name: '{{ srv_name }}'
|
||||
wait: yes
|
||||
|
||||
- name: Change role cardinality to 2
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
role: '{{ one_role }}'
|
||||
cardinality: 2
|
||||
wait: yes
|
||||
|
||||
- name: Change role cardinality to 3
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
role: '{{ one_role }}'
|
||||
cardinality: 3
|
||||
wait: yes
|
||||
register: cardinality
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Check if setting role cardinality to greater than max fails
|
||||
assert:
|
||||
that:
|
||||
- cardinality is failed
|
||||
- cardinality.msg is match("Failed to change cardinality for role:")
|
||||
|
||||
- name: Change role cardinality to 3 with force=yes
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
role: '{{ one_role }}'
|
||||
cardinality: 3
|
||||
force: yes
|
||||
wait: yes
|
||||
register: cardinality
|
||||
|
||||
- name: Verify that cardinality is changed
|
||||
assert:
|
||||
that:
|
||||
- cardinality is changed
|
||||
- cardinality.roles|length == 2
|
||||
- cardinality.roles[0].cardinality == 3
|
||||
always:
|
||||
- name: Delete service
|
||||
one_service:
|
||||
service_id: '{{ service.service_id }}'
|
||||
state: absent
|
||||
|
||||
- name: Set the name of the service for this test run
|
||||
set_fact:
|
||||
srv_name: testing-one_service-module-{{ ansible_date_time.iso8601_basic_short }}
|
||||
|
||||
- name: Try to delete nonexistent service
|
||||
one_service:
|
||||
service_name: '{{ srv_name }}'
|
||||
state: absent
|
||||
Reference in New Issue
Block a user