Project Atomic has a group of tests written in Ansible. In this blog post, I am going to show to use those along with gotun. I will be running the improved-sanity-test as suggested in the #atomic channel on Freenode.
createinventory.py
The following is the content of the createinventory.py file. We use this file to generate the inventory file for Ansible.
#!/usr/bin/env python
import json
data = None
with open("current_run_info.json") as fobj:
data = json.loads(fobj.read())
user = data['user']
host1 = data['vm1']
key = data['keyfile']
result = """{0} ansible_ssh_host={1} ansible_ssh_user={2} ansible_ssh_private_key_file={3}
""".format(host1, host1,user,key)
with open("./inventory", "w") as fobj:
fobj.write(result)
gotun job configuration and the actual job file
---
BACKEND: "openstack"
NUMBER: 1
OS_AUTH_URL: "https://fedorainfracloud.org:5000/v2.0"
OS_TENANT_ID: "helloid"
OS_USERNAME: "kushal"
OS_PASSWORD: "password"
OS_REGION_NAME: "RegionOne"
OS_IMAGE: "Fedora-Atomic-25-20170124.1.x86_64.qcow2"
OS_FLAVOR: "m1.medium"
OS_SECURITY_GROUPS:
- "ssh-anywhere-cloudsig"
- "default"
OS_NETWORK: "NETWORK ID"
OS_FLOATING_POOL: "external"
OS_KEYPAIR: "kushal-test"
key: "/home/kdas/kushal-test.pem"
Above fedora.yml configuration boots up the VM for us in the OpenStack environment. Then we have the actual test file called fedora.txt.
HOSTCOMMAND: ./createinventory.py
HOSTTEST: ansible-playbook -i inventory tests/improved-sanity-test/main.yml
Now when we run the job (remember, it takes a lot of time to run).
$ gotun --job fedora
Starts a new Tunir Job.
Server ID: 3e8cd0c7-bc79-435e-9cf9-169c5bc66b3a
Let us wait for the server to be in running state.
Time to assign a floating point IP.
Polling for a successful ssh connection.
Polling for a successful ssh connection.
Polling for a successful ssh connection.
Polling for a successful ssh connection.
Polling for a successful ssh connection.
Executing: HOSTTEST: ansible-playbook -i inventory tests/improved-sanity-test/main.yml
---------------
Result file at: /tmp/tunirresult_326996419
Job status: true
command: ansible-playbook -i inventory tests/improved-sanity-test/main.yml
status:true
PLAY [Improved Sanity Test - Pre-Upgrade] **************************************
TASK [setup] *******************************************************************
ok: [209.132.184.162]
TASK [ansible_version_check : Fail if avc_major is not defined] ****************
skipping: [209.132.184.162]
TASK [ansible_version_check : Fail if avc_minor is not defined] ****************
skipping: [209.132.184.162]
TASK [ansible_version_check : Check if Ansible is the correct version (or newer)] ***
ok: [209.132.184.162] => {
"changed": false,
"msg": "All assertions passed"
}
TASK [atomic_host_check : Determine if Atomic Host] ****************************
ok: [209.132.184.162]
<SKIPPING ALL THE OTHER OUTPUT>
TASK [var_files_present : Check for correct SELinux type] **********************
changed: [209.132.184.162]
PLAY RECAP *********************************************************************
209.132.184.162 : ok=260 changed=170 unreachable=0 failed=0
[DEPRECATION WARNING]: always_run is deprecated. Use check_mode = no instead..
This feature will be removed in version 2.4. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Consider using yum, dnf or zypper module rather than running rpm
[WARNING]: Consider using get_url or uri module rather than running curl
[DEPRECATION WARNING]: always_run is deprecated. Use check_mode = no instead..
This feature will be removed in version 2.4. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: always_run is deprecated. Use check_mode = no instead..
This feature will be removed in version 2.4. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
Total Number of Tests:1
Total NonGating Tests:0
Total Failed Non Gating Tests:0
Success.
Previously, I blogged about how to use the upstream Kubernetes Ansible repo to test Kubernetes on Atomic images. Using this style, you can use any ansible playbook to do the real setup, and then use Ansible to test for you, or have your own set of test cases. Do let me know what do you think in the comments.