Specify auth parameters in devstack tests

Single-node devstack does not have SSH key for stack user.
In all tests we will use custom os-faults key and connect to localhost
as `stack` user. Tests are also executed as `stack` user explicitly
(by default they are run as zuul user, but we do not want to rely on this).

Change-Id: Ibcc9a406dc850363e651d4023874147db45214f7
This commit is contained in:
Ilya Shakhat 2018-12-18 14:38:58 +01:00
parent 8f7e490c75
commit fedc060158
9 changed files with 140 additions and 28 deletions

View File

@ -18,7 +18,9 @@
description: |
Run os-faults integration tests on DevStack under Python 3
timeout: 2400
pre-run: os_faults/tests/devstack/playbooks/pre.yml
run: os_faults/tests/devstack/playbooks/run_on_devstack.yml
post-run: os_faults/tests/devstack/playbooks/post.yml
required-projects:
- openstack/os-faults
vars:

View File

@ -163,8 +163,9 @@ class AnsibleRunner(object):
playbook_file_name = os.path.join(temp_dir, 'playbook')
with open(inventory_file_name, 'w') as fd:
print(yaml.safe_dump(full_inventory, default_flow_style=False),
file=fd)
cnt = yaml.safe_dump(full_inventory, default_flow_style=False)
print(cnt, file=fd)
LOG.debug('Inventory:\n%s', cnt)
play = {
'hosts': 'all',
@ -173,7 +174,9 @@ class AnsibleRunner(object):
}
with open(playbook_file_name, 'w') as fd:
print(yaml.safe_dump([play], default_flow_style=False), file=fd)
cnt = yaml.safe_dump([play], default_flow_style=False)
print(cnt, file=fd)
LOG.debug('Playbook:\n%s', cnt)
cmd = ('%(ansible)s --module-path %(module_path)s '
'-i %(inventory)s %(playbook)s' %

View File

@ -4,6 +4,9 @@ node_discover:
driver: node_list
args:
- ip: localhost
auth:
username: stack
private_key_file: os_faults_key
services:
memcached:
args:

View File

@ -0,0 +1,23 @@
---
- hosts: all
vars:
- test_results_path: "/opt/stack/os-faults/.tox/{{tox_envlist}}/log/pytest_results.html"
tasks:
- name: Check whether test results file exists
stat:
path: "{{ test_results_path }}"
register: test_results
- name: Copy job results
become: yes
synchronize:
src: "{{ test_results_path }}"
dest: "{{ zuul.executor.log_root }}"
mode: pull
copy_links: true
verify_host: true
rsync_opts:
- "--include=/**"
- "--include=*/"
when: test_results.stat.exists

View File

@ -0,0 +1,5 @@
---
- hosts: all
roles:
- orchestrate-devstack

View File

@ -1,30 +1,53 @@
---
- hosts: all
roles:
- orchestrate-devstack
- hosts: all
vars:
- stack_home: "/opt/stack"
- os_faults_home: "/opt/stack/os-faults"
tasks:
- name: Run integration tests
- name: Create folder for SSH keys (as stack user)
file:
path: "{{ stack_home }}/.ssh"
state: directory
mode: 0755
become: yes
become_user: stack
- name: Generate SSH key pair
command: "ssh-keygen -t rsa -f {{ os_faults_home }}/os_faults_key -N ''"
become: yes
become_user: stack
- name: List os-faults folder
command: "ls -al {{ os_faults_home }}"
become: yes
become_user: stack
- name: Add os-faults key into authorized_keys for stack user
shell: |
cat {{ os_faults_home}}/os_faults_key.pub >> {{ stack_home }}/.ssh/authorized_keys
become: yes
become_user: stack
- name: Check SSH connection using os-faults key
command: "ssh -vvv -i os_faults_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=60 -o IdentitiesOnly=yes stack@localhost"
args:
chdir: "{{ os_faults_home }}"
become: yes
become_user: stack
- name: Run tests
command: "tox -e {{tox_envlist}}"
args:
chdir: "/opt/stack/os-faults"
- hosts: all
vars:
- test_results_path: "/opt/stack/os-faults/.tox/{{tox_envlist}}/log/pytest_results.html"
tasks:
- name: Copy job results
chdir: "{{ os_faults_home }}"
become: yes
synchronize:
src: "{{ test_results_path }}"
dest: "{{ zuul.executor.log_root }}"
mode: pull
copy_links: true
verify_host: true
rsync_opts:
- "--include=/**"
- "--include=*/"
become_user: stack
- name: Check connectivity using command-line tool
shell: |
cd /opt/stack/os-faults
. .tox/devstack/bin/activate
os-inject-fault -c /opt/stack/os-faults/os_faults/tests/devstack/os-faults-universal.yaml -vd
become: yes
become_user: stack

View File

@ -0,0 +1,48 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import logging
from oslotest import base
import os_faults
LOG = logging.getLogger(__name__)
class TestOSFaultsLibrary(base.BaseTestCase):
def test_connection_stack_user(self):
cloud_config = {
'cloud_management': {
'driver': 'universal'
},
'node_discover': {
'driver': 'node_list',
'args': [
{
'ip': 'localhost',
'auth': {
'username': 'stack',
'private_key_file': 'os_faults_key'
}
}
]
}
}
LOG.info('# Create connection to the cloud')
cloud_management = os_faults.connect(cloud_config)
self.assertIsNotNone(cloud_management)
LOG.info('# Verify connection to the cloud')
cloud_management.verify()

View File

@ -28,7 +28,7 @@ class TestOSInjectFaultUniversalDriver(test.TestCase):
'os-faults-universal.yaml')
def test_connect(self):
cmd = 'os-inject-fault -c %s -v' % self.CONFIG_FILE
cmd = 'os-inject-fault -dc %s -v' % self.CONFIG_FILE
command_stdout, command_stderr = processutils.execute(
*shlex.split(cmd))
@ -37,7 +37,7 @@ class TestOSInjectFaultUniversalDriver(test.TestCase):
self.assertTrue(success)
def test_restart_etcd(self):
cmd = 'os-inject-fault -c %s restart etcd service' % self.CONFIG_FILE
cmd = 'os-inject-fault -dc %s restart etcd service' % self.CONFIG_FILE
command_stdout, command_stderr = processutils.execute(
*shlex.split(cmd))

View File

@ -58,9 +58,14 @@ install_command = {[testenv:common-constraints]install_command}
commands = {[testenv:cover]commands}
[testenv:devstack]
# to execute the tests:
# 1) create SSH key in os-faults folder: ssh-keygen -t rsa -f os_faults_key -N ''
# 2) copy public key into authorized_keys of user stack: cat os_faults_key.pub >> ~/.ssh/authorized_keys
# 3) run tests normally: tox -e devstack
basepython = python3
setenv = {[testenv]setenv}
OS_TEST_PATH=./os_faults/tests/devstack
OS_DEBUG=True
deps = {[testenv]deps}
extras =
commands =