Add OpenNebula one_service module (#37829)

This commit is contained in:
Milan Ilic
2018-05-24 13:32:45 +02:00
committed by René Moser
parent f224afde49
commit 18e7d814ef
4 changed files with 1088 additions and 0 deletions

View File

@@ -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 }

View 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

View 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