From efb190d5a5584a7500c5ceaea06a8ce76600668e Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Mon, 4 May 2015 23:42:46 -0400 Subject: [PATCH 1/2] add azure integration tests --- test/integration/azure.yml | 7 +++ test/integration/cleanup_azure.py | 1 + test/integration/credentials.template | 4 ++ .../roles/test_azure/defaults/main.yml | 10 +++ .../roles/test_azure/tasks/main.yml | 63 +++++++++++++++++++ 5 files changed, 85 insertions(+) create mode 100644 test/integration/azure.yml create mode 100644 test/integration/cleanup_azure.py create mode 100644 test/integration/roles/test_azure/defaults/main.yml create mode 100644 test/integration/roles/test_azure/tasks/main.yml diff --git a/test/integration/azure.yml b/test/integration/azure.yml new file mode 100644 index 0000000000..4fceb2a13e --- /dev/null +++ b/test/integration/azure.yml @@ -0,0 +1,7 @@ +- hosts: localhost + connection: local + gather_facts: no + tags: + - test_azure + roles: + - { role: test_azure } diff --git a/test/integration/cleanup_azure.py b/test/integration/cleanup_azure.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/test/integration/cleanup_azure.py @@ -0,0 +1 @@ + diff --git a/test/integration/credentials.template b/test/integration/credentials.template index 4894f5827b..78594aca97 100644 --- a/test/integration/credentials.template +++ b/test/integration/credentials.template @@ -13,5 +13,9 @@ service_account_email: pem_file: project_id: +# Azure Credentials +azure_subscription_id: +azure_cert_path: + # GITHUB SSH private key - a path to a SSH private key for use with github.com github_ssh_private_key: "{{ lookup('env','HOME') }}/.ssh/id_rsa" diff --git a/test/integration/roles/test_azure/defaults/main.yml b/test/integration/roles/test_azure/defaults/main.yml new file mode 100644 index 0000000000..01018a9f7f --- /dev/null +++ b/test/integration/roles/test_azure/defaults/main.yml @@ -0,0 +1,10 @@ +--- +# defaults file for test_azure +instance_name: "{{ resource_prefix|lower }}" +cert_path: "{{ azure_cert_path }}" +subscription_id: "{{ azure_subscription_id }}" +storage_account: "{{ azure_storage_account|default('ansibleeast') }}" +role_size: "{{ azure_role_size|default('Basic_A0') }}" +user: "{{ azure_user|default('ansible_user') }}" +location: "{{ azure_location|default('East US') }}" +password: "{{ azure_password|default('abc123Q%') }}" diff --git a/test/integration/roles/test_azure/tasks/main.yml b/test/integration/roles/test_azure/tasks/main.yml new file mode 100644 index 0000000000..cba93e3d65 --- /dev/null +++ b/test/integration/roles/test_azure/tasks/main.yml @@ -0,0 +1,63 @@ +# TODO: Implement create storage account feature. Currently, storage_account must be manually created on azure account. +# TODO: When more granular azure operations are implemented (i.e. list disk, list cloud services, etc). Use the +# fine-grain listings to ensure higher level operations are performed. +# ============================================================ +- name: test with no credentials + azure: + register: result + ignore_errors: true + +- name: assert failure when called with no credentials + assert: + that: + - 'result.failed' + - 'result.msg == "No subscription_id provided. Please set ''AZURE_SUBSCRIPTION_ID'' or use the ''subscription_id'' parameter"' + +# ============================================================ +- name: test credentials + azure: + subscription_id: "{{ subscription_id }}" + management_cert_path: "{{ cert_path }}" + register: result + ignore_errors: true + +- name: assert failure when called with credentials and no parameters + assert: + that: + - 'result.failed' + - 'result.msg == "name parameter is required for new instance"' + +# ============================================================ +- name: test status=Running (expected changed=true) + azure: + subscription_id: "{{ subscription_id }}" + management_cert_path: "{{ cert_path }}" + name: "{{ instance_name }}" + image: "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-12_04_4-LTS-amd64-server-20140514-en-us-30GB" + storage_account: "{{ storage_account }}" + user: "{{ user }}" + role_size: "{{ role_size }}" + password: "{{ password }}" + location: "{{ location }}" + wait: yes + state: present + register: result + +- name: assert state=Running (expected changed=true) + assert: + that: + - 'result.changed' + - 'result.deployment.name == "{{ instance_name }}"' + - 'result.deployment.status == "Running"' + +# ============================================================ +- name: test state=absent (expected changed=true) + azure: + subscription_id: "{{ subscription_id }}" + management_cert_path: "{{ cert_path }}" + name: "{{ instance_name }}" + #storage_account: "{{ storage_account }}" + #location: "{{ location }}" + wait: yes + state: absent + register: result From cf300da02cb58f88086da4b76e175e2296a1f11c Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 5 May 2015 08:42:07 -0400 Subject: [PATCH 2/2] azure changes to Makefile --- test/integration/Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/integration/Makefile b/test/integration/Makefile index 28de76c7cd..923a29bc9f 100644 --- a/test/integration/Makefile +++ b/test/integration/Makefile @@ -105,13 +105,16 @@ test_tags: [ "$$(ansible-playbook --list-tasks --skip-tags tag test_tags.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -v $(TEST_FLAGS) | fgrep Task_with | xargs)" = "Task_with_always_tag TAGS: [always] Task_without_tag TAGS: []" ] -cloud: amazon rackspace +cloud: amazon rackspace azure cloud_cleanup: amazon_cleanup rackspace_cleanup amazon_cleanup: python cleanup_ec2.py -y --match="^$(CLOUD_RESOURCE_PREFIX)" +azure_cleanup: + python cleanup_azure.py -y --match="^$(CLOUD_RESOURCE_PREFIX)" + gce_setup: python setup_gce.py "$(CLOUD_RESOURCE_PREFIX)" @@ -131,6 +134,12 @@ amazon: $(CREDENTIALS_FILE) CLOUD_RESOURCE_PREFIX="$(CLOUD_RESOURCE_PREFIX)" make amazon_cleanup ; \ exit $$RC; +azure: $(CREDENTIALS_FILE) + ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook azure.yml -i $(INVENTORY) $(CREDENTIALS_ARG) -e "resource_prefix=$(CLOUD_RESOURCE_PREFIX)" -v $(TEST_FLAGS) ; \ + RC=$$? ; \ + CLOUD_RESOURCE_PREFIX="$(CLOUD_RESOURCE_PREFIX)" make azure_cleanup ; \ + exit $$RC; + gce: $(CREDENTIALS_FILE) CLOUD_RESOURCE_PREFIX="$(CLOUD_RESOURCE_PREFIX)" make gce_setup ; \ ansible-playbook gce.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -e "resource_prefix=$(CLOUD_RESOURCE_PREFIX)" -v $(TEST_FLAGS) ; \