Browse Source
#31 : CI tests are run against SaaS, with hosted and self-managed APIcast + on-premise AMP 2.3 #29 : Fix the CORS smoketests that were failing #41 : Make sure the playbook did not expose the 3scale access token in the outputpull/43/head 1.0.1
53 changed files with 513 additions and 56 deletions
Binary file not shown.
@ -0,0 +1 @@ |
|||
../ansible.cfg |
|||
@ -0,0 +1 @@ |
|||
* |
|||
@ -0,0 +1 @@ |
|||
* |
|||
@ -1 +0,0 @@ |
|||
../.. |
|||
@ -0,0 +1,48 @@ |
|||
#!/bin/bash |
|||
|
|||
# Make sure all Ansible failed tasks go to the stderr. Failed tasks usually |
|||
# output sensitive informations, by routing them to stderr we can filter |
|||
# them out. |
|||
export ANSIBLE_DISPLAY_FAILED_STDERR=yes |
|||
|
|||
cd "${0%/*}" || exit 1 |
|||
|
|||
echo "--> Generating the Ansible inventory files..." |
|||
ansible-playbook -i /dev/null write-inventory-files.yml &>results/write-inventory-files |
|||
ret=$? |
|||
if [ "$ret" -gt 0 ]; then |
|||
echo "--> Ansible inventory files generation FAILED !" |
|||
exit 1 |
|||
else |
|||
echo "--> Ansible inventory files generation SUCCEEDED !" |
|||
fi |
|||
|
|||
# Because of a bug in Ansible, we need to move one directory upper before running |
|||
# the playbooks. |
|||
# |
|||
# The bug makes the playbooks fail after the Application Plans creation/update |
|||
# with this error message: |
|||
# |
|||
# ERROR! Unexpected Exception, this is probably a bug: expected str, bytes or os.PathLike object, not NoneType |
|||
# |
|||
cd ".." || exit 1 |
|||
|
|||
for environment in tests/environments/3scale-${THREESCALE_ENV:-*}; do |
|||
for testcase in tests/test-cases/*.y*ml; do |
|||
echo "--> Running $testcase against $environment..." |
|||
if [ -z "$THREESCALE_VERBOSE" ] || [ "$THREESCALE_VERBOSE" == "no" ]; then |
|||
# reduce output verbosity and make sure not to output sensitive information |
|||
logfile="tests/results/$(basename "$environment")-$(basename "$testcase")" |
|||
DISPLAY_SKIPPED_HOSTS=no ANSIBLE_DISPLAY_OK_HOSTS=no ansible-playbook -i "$environment" "$testcase" 2>"$logfile" |
|||
else |
|||
ansible-playbook -i "$environment" -v "$testcase" |
|||
fi |
|||
ret=$? |
|||
if [ "$ret" -gt 0 ]; then |
|||
echo "--> $testcase against $environment FAILED !" |
|||
exit 1 |
|||
else |
|||
echo "--> $testcase against $environment SUCCEEDED !" |
|||
fi |
|||
done |
|||
done |
|||
@ -0,0 +1,67 @@ |
|||
# Test Environment setup |
|||
|
|||
## 3scale SaaS with APIcast Self-Managed |
|||
|
|||
Create a project in an OpenShift cluster: |
|||
|
|||
```sh |
|||
oc new-project apicast-3scale-ci |
|||
``` |
|||
|
|||
Deploy two 3scale gateways (staging and production): |
|||
|
|||
```sh |
|||
oc create secret generic 3scale-tenant-<NAME> --from-literal=password=https://<TOKEN>@<NAME>-admin.3scale.net |
|||
oc create -f https://raw.githubusercontent.com/3scale/apicast/v3.4.0/openshift/apicast-template.yml |
|||
oc new-app --template=3scale-gateway --name=apicast-<NAME>-staging -p CONFIGURATION_URL_SECRET=3scale-tenant-<NAME> -p CONFIGURATION_CACHE=0 -p RESPONSE_CODES=true -p LOG_LEVEL=info -p CONFIGURATION_LOADER=lazy -p APICAST_NAME=apicast-<NAME>-staging -p DEPLOYMENT_ENVIRONMENT=sandbox -p IMAGE_NAME=quay.io/3scale/apicast:v3.4.0 |
|||
oc new-app --template=3scale-gateway --name=apicast-<NAME>-production -p CONFIGURATION_URL_SECRET=3scale-tenant-<NAME> -p CONFIGURATION_CACHE=60 -p RESPONSE_CODES=true -p LOG_LEVEL=info -p CONFIGURATION_LOADER=boot -p APICAST_NAME=apicast-<NAME>-production -p DEPLOYMENT_ENVIRONMENT=production -p IMAGE_NAME=quay.io/3scale/apicast:v3.4.0 |
|||
oc scale dc/apicast-<NAME>-staging --replicas=1 |
|||
oc scale dc/apicast-<NAME>-production --replicas=1 |
|||
oc expose svc/apicast-<NAME>-staging --wildcard-policy=Subdomain --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --hostname=wildcard.<NAME>-staging.app... |
|||
oc expose svc/apicast-<NAME>-production --wildcard-policy=Subdomain --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --hostname=wildcard.<NAME>-production.app... |
|||
``` |
|||
|
|||
Provision the Red Hat SSO tenants with the included playbooks: |
|||
|
|||
```sh |
|||
ansible-playbook tests/setup/setup-sso.yml -e sso_admin_password=secret -e sso_hostname=sso.app.example.test |
|||
``` |
|||
|
|||
## 3scale on-premise |
|||
|
|||
Create a project in an OpenShift cluster: |
|||
|
|||
```sh |
|||
oc new-project 3scale-ci-23 --display-name="3scale CI 2.3" |
|||
``` |
|||
|
|||
Deploy 3scale AMP 2.3: |
|||
|
|||
```sh |
|||
oc create -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.3.0.GA/amp/amp.yml |
|||
oc new-app --template=3scale-api-management -p WILDCARD_DOMAIN=3scale-ci-23.app.example.test -p WILDCARD_POLICY=Subdomain |
|||
``` |
|||
|
|||
Create two tenants: `pool1` and `pool2` and expose them: |
|||
|
|||
```sh |
|||
oc expose svc/system-provider --hostname pool1-admin.3scale-ci-23.app.example.test --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --name=pool1-admin |
|||
oc expose svc/system-provider --hostname pool2-admin.3scale-ci-23.app.example.test --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --name=pool2-admin |
|||
``` |
|||
|
|||
Provision the Red Hat SSO tenants with the included playbooks: |
|||
|
|||
```sh |
|||
ansible-playbook tests/setup/setup-sso.yml -e sso_admin_password=secret -e sso_hostname=sso.app.example.test |
|||
``` |
|||
|
|||
Delete the wildcard route and recreate it with two more routes: |
|||
|
|||
```sh |
|||
oc delete route apicast-wildcard-router |
|||
oc expose svc/apicast-wildcard-router --wildcard-policy=Subdomain --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --hostname=apicast-wildcard.pool1.3scale-ci-23.app.example.test --name=pool1-apicast-wildcard-router |
|||
oc expose svc/apicast-wildcard-router --wildcard-policy=Subdomain --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --hostname=apicast-wildcard.pool2.3scale-ci-23.app.example.test --name=pool2-apicast-wildcard-router |
|||
oc expose svc/apicast-wildcard-router --wildcard-policy=Subdomain --overrides='{ "apiVersion": "route.openshift.io/v1", "kind": "Route", "spec": { "tls": { "insecureEdgeTerminationPolicy": "Allow", "termination": "edge" } } }' --hostname=apicast-wildcard.3scale-ci-23.app.example.test --name=apicast-wildcard-router |
|||
``` |
|||
|
|||
Do the same with other versions of 3scale. |
|||
@ -0,0 +1,77 @@ |
|||
--- |
|||
|
|||
- name: Create the SSO client |
|||
keycloak_client: |
|||
auth_keycloak_url: 'https://{{ sso_hostname }}/auth' |
|||
auth_password: '{{ sso_admin_password }}' |
|||
auth_realm: '{{ sso_admin_realm }}' |
|||
auth_username: '{{ sso_admin_username }}' |
|||
name: '{{ item.client_id }}' |
|||
description: 'Zync account for 3scale instance {{ item.admin_portal }}' |
|||
realm: '{{ item.realm }}' |
|||
enabled: true |
|||
state: present |
|||
protocol: openid-connect |
|||
client_id: '{{ item.client_id }}' |
|||
secret: '{{ item.client_secret }}' |
|||
direct_access_grants_enabled: false |
|||
full_scope_allowed: true |
|||
implicit_flow_enabled: false |
|||
public_client: false |
|||
service_accounts_enabled: true |
|||
standard_flow_enabled: false |
|||
validate_certs: no |
|||
register: create_client_response |
|||
|
|||
- name: Get the service account user tied to the client |
|||
uri: |
|||
url: 'https://{{ sso_hostname }}/auth/admin/realms/{{ item.realm }}/clients/{{ client_uuid }}/service-account-user' |
|||
validate_certs: no |
|||
headers: |
|||
Authorization: 'Bearer {{ access_token }}' |
|||
register: service_account_response |
|||
changed_when: false |
|||
vars: |
|||
client_uuid: '{{ create_client_response.end_state.id }}' |
|||
|
|||
- name: Get the "realm-management" client details |
|||
keycloak_client: |
|||
auth_keycloak_url: 'https://{{ sso_hostname }}/auth' |
|||
auth_password: '{{ sso_admin_password }}' |
|||
auth_realm: '{{ sso_admin_realm }}' |
|||
auth_username: '{{ sso_admin_username }}' |
|||
realm: '{{ item.realm }}' |
|||
state: present |
|||
client_id: realm-management |
|||
validate_certs: no |
|||
check_mode: yes |
|||
register: realm_management_client_response |
|||
|
|||
- name: Get the role description of the "realm-management" client |
|||
uri: |
|||
url: 'https://{{ sso_hostname }}/auth/admin/realms/{{ item.realm }}/clients/{{ realm_management_client_uuid }}/roles/manage-clients' |
|||
validate_certs: no |
|||
headers: |
|||
Authorization: 'Bearer {{ access_token }}' |
|||
register: get_role_response |
|||
changed_when: false |
|||
vars: |
|||
realm_management_client_uuid: '{{ realm_management_client_response.existing.id }}' |
|||
|
|||
- name: Add the 'manage-clients' role mapping to the service account user |
|||
uri: |
|||
url: 'https://{{ sso_hostname }}/auth/admin/realms/{{ item.realm }}/users/{{ service_account_uuid }}/role-mappings/clients/{{ realm_management_client_uuid }}' |
|||
body: |
|||
- '{{ manage_clients_role }}' |
|||
body_format: json |
|||
method: POST |
|||
validate_certs: no |
|||
headers: |
|||
Authorization: 'Bearer {{ access_token }}' |
|||
status_code: "204" |
|||
register: set_role_mapping_response |
|||
changed_when: set_role_mapping_response.status == 204 |
|||
vars: |
|||
service_account_uuid: '{{ service_account_response.json.id }}' |
|||
realm_management_client_uuid: '{{ realm_management_client_response.existing.id }}' |
|||
manage_clients_role: '{{ get_role_response.json }}' |
|||
@ -0,0 +1,56 @@ |
|||
--- |
|||
|
|||
- name: Delete the Travis logs of a build |
|||
hosts: localhost |
|||
gather_facts: no |
|||
vars: |
|||
ansible_connection: local |
|||
travis_repo: nmasse-itix/threescale-cicd |
|||
travis_api: https://api.travis-ci.org |
|||
tasks: |
|||
- assert: |
|||
that: |
|||
- travis_token is defined |
|||
msg: > |
|||
Please pass your Travis Token in the 'travis_token' extra var |
|||
|
|||
- assert: |
|||
that: |
|||
- travis_build is defined |
|||
msg: > |
|||
Please pass Travis build number in the 'travis_build' extra var |
|||
|
|||
- name: Find Build |
|||
uri: |
|||
url: '{{ travis_api }}/repos/{{ travis_repo }}/builds?number={{ travis_build }}' |
|||
headers: |
|||
Authorization: "token {{ travis_token }}" |
|||
register: find_build_response |
|||
changed_when: false |
|||
|
|||
- name: Get Build |
|||
uri: |
|||
url: '{{ travis_api }}/repos/{{ travis_repo }}/builds/{{ travis_build_id }}' |
|||
headers: |
|||
Authorization: "token {{ travis_token }}" |
|||
register: get_build_response |
|||
changed_when: false |
|||
vars: |
|||
travis_build_id: '{{ find_build_response.json|json_query(''[0].id'') }}' |
|||
|
|||
- name: Delete logs |
|||
uri: |
|||
url: '{{ travis_api }}/jobs/{{ item }}/log' |
|||
headers: |
|||
Authorization: "token {{ travis_token }}" |
|||
body_format: form-urlencoded |
|||
body: |
|||
reason: "Logs removed because it contains sensitive data" |
|||
method: PATCH |
|||
status_code: "200,409" |
|||
register: delete_logs_response |
|||
changed_when: delete_logs_response.status == 200 |
|||
with_items: '{{ travis_jobs }}' |
|||
vars: |
|||
travis_jobs: '{{ get_build_response.json|json_query(''@.matrix[].id'') }}' |
|||
|
|||
@ -0,0 +1,106 @@ |
|||
--- |
|||
|
|||
- name: Configure Red Hat SSO according to the 3scale inventory file |
|||
hosts: localhost |
|||
gather_facts: no |
|||
vars: |
|||
ansible_connection: local |
|||
sso_admin_username: admin |
|||
sso_admin_realm: master |
|||
sso_admin_client_id: admin-cli |
|||
tasks: |
|||
- assert: |
|||
that: |
|||
- sso_admin_password is defined |
|||
- sso_hostname is defined |
|||
msg: > |
|||
Please pass the SSO admin credentials as extra vars |
|||
|
|||
- set_fact: |
|||
threescale_inventory: '{{ lookup(''env'', ''THREESCALE_INVENTORY'')|b64decode|from_json }}' |
|||
when: 'threescale_inventory is not defined and lookup(''env'', ''THREESCALE_INVENTORY'')|length > 0' |
|||
|
|||
- set_fact: |
|||
threescale_inventory: '{{ lookup(''file'', ''{{ playbook_dir }}/../3scale-inventory.yaml'')|from_yaml }}' |
|||
when: 'threescale_inventory is not defined' |
|||
|
|||
- name: Authenticate to RH-SSO |
|||
uri: |
|||
url: 'https://{{ sso_hostname }}/auth/realms/{{ sso_admin_realm }}/protocol/openid-connect/token' |
|||
body: 'grant_type=password&client_id={{ sso_admin_client_id|urlencode }}&username={{ sso_admin_username|urlencode }}&password={{ sso_admin_password|urlencode }}' |
|||
method: POST |
|||
validate_certs: no |
|||
register: auth_response |
|||
changed_when: false |
|||
|
|||
- name: Delete the RH-SSO realm |
|||
uri: |
|||
url: 'https://{{ sso_hostname }}/auth/admin/realms/{{ item }}' |
|||
method: DELETE |
|||
validate_certs: no |
|||
headers: |
|||
Authorization: 'Bearer {{ access_token }}' |
|||
status_code: "204,404" |
|||
register: delete_realm_response |
|||
changed_when: delete_realm_response.status == 204 |
|||
with_items: '{{ realms }}' |
|||
vars: |
|||
realms: '{{ threescale_inventory|json_query(''@.*[].sso.realm'')|unique }}' |
|||
access_token: '{{ auth_response.json.access_token }}' |
|||
|
|||
- name: Create the RH-SSO realm |
|||
uri: |
|||
url: 'https://{{ sso_hostname }}/auth/admin/realms' |
|||
body: |
|||
id: '{{ item }}' |
|||
enabled: true |
|||
realm: '{{ item }}' |
|||
displayName: '{{ item }}' |
|||
notBefore: 0 |
|||
revokeRefreshToken: false |
|||
refreshTokenMaxReuse: 0 |
|||
registrationAllowed: false |
|||
registrationEmailAsUsername: false |
|||
rememberMe: false |
|||
verifyEmail: false |
|||
loginWithEmailAllowed: false |
|||
duplicateEmailsAllowed: false |
|||
resetPasswordAllowed: false |
|||
bruteForceProtected: false |
|||
permanentLockout: false |
|||
roles: |
|||
realm: [] |
|||
defaultRoles: [] |
|||
requiredCredentials: |
|||
- password |
|||
scopeMappings: [] |
|||
editUsernameAllowed: false |
|||
accessTokenLifespanForImplicitFlow: 86400 # 1 day |
|||
accessTokenLifespan: 86400 # 1 day |
|||
accessCodeLifespanUserAction: 86400 # 1 day |
|||
accessCodeLifespanLogin: 86400 # 1 day |
|||
accessCodeLifespan: 86400 # 1 day |
|||
ssoSessionIdleTimeout: 86400 # 1 day |
|||
ssoSessionMaxLifespan: 86400 # 1 day |
|||
offlineSessionIdleTimeout: 2592000 # 30 days |
|||
actionTokenGeneratedByAdminLifespan: 86400 # 1 day |
|||
actionTokenGeneratedByUserLifespan: 86400 # 1 day |
|||
sslRequired: none |
|||
body_format: json |
|||
method: POST |
|||
validate_certs: no |
|||
headers: |
|||
Authorization: 'Bearer {{ access_token }}' |
|||
status_code: "201,409" |
|||
register: create_realm_response |
|||
changed_when: create_realm_response.status == 201 |
|||
with_items: '{{ realms }}' |
|||
vars: |
|||
realms: '{{ threescale_inventory|json_query(''@.*[].sso.realm'')|unique }}' |
|||
access_token: '{{ auth_response.json.access_token }}' |
|||
|
|||
- include_tasks: "common/create-sso-client.yml" |
|||
with_items: '{{ clients }}' |
|||
vars: |
|||
clients: '{{ threescale_inventory|json_query(''@.*[].{client_id: sso.client_id, client_secret: sso.client_secret, realm: sso.realm, admin_portal: threescale.admin_portal }'')|unique }}' |
|||
access_token: '{{ auth_response.json.access_token }}' |
|||
@ -1,15 +1,17 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Beer Catalog API to a 3scale SaaS instance, with hosted APIcasts |
|||
- name: Deploy the Beer Catalog API with API Key |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/beer-catalog-api.json' |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/beer-catalog-api.json' |
|||
threescale_cicd_openapi_file_format: 'JSON' |
|||
threescale_cicd_api_backend_hostname: echo-api.3scale.net |
|||
threescale_cicd_openapi_smoketest_operation: GET_beer |
|||
threescale_cicd_api_base_system_name: beer_catalog_apikey |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Test a first deployment |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -1,12 +1,14 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Echo API to a 3scale SaaS instance, with hosted APIcasts and OpenID Connect |
|||
- name: Deploy the Echo API with OpenID Connect |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/echo-api-oidc.yaml' |
|||
threescale_cicd_api_base_system_name: echo_api_oidc |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/echo-api-oidc.yaml' |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Test a first deployment |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -1,15 +1,17 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Beer Catalog API to a 3scale SaaS instance in multi environment |
|||
- name: Deploy the Beer Catalog API in multi environment |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/beer-catalog-api.json' |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/beer-catalog-api.json' |
|||
threescale_cicd_openapi_file_format: 'JSON' |
|||
threescale_cicd_api_backend_hostname: echo-api.3scale.net |
|||
threescale_cicd_openapi_smoketest_operation: GET_beer |
|||
threescale_cicd_api_base_system_name: beer_catalog_envs |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Deploy in DEV |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -0,0 +1,23 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Beer Catalog API with only one gateway |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/beer-catalog-api.json' |
|||
threescale_cicd_openapi_file_format: 'JSON' |
|||
threescale_cicd_api_backend_hostname: echo-api.3scale.net |
|||
threescale_cicd_openapi_smoketest_operation: GET_beer |
|||
# Both Public Base URL are the same |
|||
threescale_cicd_apicast_sandbox_endpoint: '{{ threescale_cicd_apicast_production_endpoint }}' |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Deploy the service |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
# Delete the service |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
tasks_from: 'cleanup' |
|||
@ -1,12 +1,14 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Echo API to a 3scale SaaS instance, with hosted APIcasts |
|||
- name: Deploy the Echo API with a basepath |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/echo-api-with-basePath.yaml' |
|||
threescale_cicd_api_base_system_name: echo_api_with_basepath |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/echo-api-with-basePath.yaml' |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Test a first deployment |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -1,14 +1,16 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Echo API to a 3scale SaaS instance, with hosted APIcasts and CORS |
|||
- name: Deploy the Echo API with CORS |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_smoketest_operation: Echo |
|||
threescale_cicd_apicast_policies_cors: yes |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/echo-api-bare.yaml' |
|||
threescale_cicd_api_base_system_name: echo_api_cors |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/echo-api-bare.yaml' |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Deploy the service |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -1,13 +1,15 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Echo API to a 3scale SaaS instance, with hosted APIcasts and smoketests in extra vars |
|||
- name: Deploy the Echo API with smoketests in extra vars |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
threescale_cicd_openapi_smoketest_operation: Echo |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/echo-api-bare.yaml' |
|||
threescale_cicd_api_base_system_name: echo_api_bare_extra |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/echo-api-bare.yaml' |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Deploy the service |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -1,13 +1,15 @@ |
|||
--- |
|||
|
|||
- name: Deploy the Echo API to a 3scale SaaS instance, with hosted APIcasts and no smoketests |
|||
- name: Deploy the Echo API with no smoketests |
|||
hosts: threescale |
|||
gather_facts: no |
|||
vars: |
|||
# There is no "threescale_cicd_openapi_smoketest_operation" variable |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api/echo-api-bare.yaml' |
|||
threescale_cicd_api_base_system_name: echo_api_no_smoketests |
|||
threescale_cicd_openapi_file: '{{ playbook_dir }}/api-contracts/echo-api-bare.yaml' |
|||
tasks: |
|||
- name: Generate a random system_name for this test run |
|||
import_tasks: "common/random-system-name.yml" |
|||
|
|||
# Deploy the service |
|||
- import_role: |
|||
name: 'nmasse-itix.threescale-cicd' |
|||
@ -0,0 +1,5 @@ |
|||
--- |
|||
|
|||
- name: Generate a random system_name for this test run |
|||
set_fact: |
|||
threescale_cicd_api_base_system_name: 'testcase_{{ lookup(''password'', ''/dev/null length=12 chars=hexdigits'')|lower }}' |
|||
@ -0,0 +1 @@ |
|||
../../.. |
|||
Loading…
Reference in new issue