aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjose.lausuch <jose.lausuch@ericsson.com>2016-06-30 14:12:54 +0200
committerJose Lausuch <jose.lausuch@ericsson.com>2016-07-04 07:27:32 +0000
commitbbc47d487f06da2906116e5ade134e11c4221786 (patch)
treed52c4ded1b3774b449c8d89b961ab17b0d28e7c5
parent7388d059ff9f4efed594582ded843f795e56c9fa (diff)
Change OpenStack clean behaviour
JIRA: FUNCTEST-236 The openstack snapshot generation is now triggered before running a test case and removed from prepare_env Change-Id: I4d1bc95dedd7f59d4b1d5866f288e1c1a70ec69e Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
-rwxr-xr-xci/check_os.sh2
-rw-r--r--ci/config_functest.yaml2
-rw-r--r--ci/prepare_env.py12
-rw-r--r--ci/run_tests.py14
-rw-r--r--cli/commands/cli_os.py26
-rw-r--r--docs/configguide/configguide.rst4
-rw-r--r--utils/functest_utils.py33
-rw-r--r--utils/openstack_clean.py (renamed from utils/clean_openstack.py)44
-rw-r--r--utils/openstack_snapshot.py (renamed from utils/generate_defaults.py)55
9 files changed, 112 insertions, 80 deletions
diff --git a/ci/check_os.sh b/ci/check_os.sh
index c9e0b513..38fe32f5 100755
--- a/ci/check_os.sh
+++ b/ci/check_os.sh
@@ -26,7 +26,7 @@ fi
echo "Checking OpenStack endpoints:"
publicURL=$OS_AUTH_URL
publicIP=$(echo $publicURL|sed 's/^.*http\:\/\///'|sed 's/.[^:]*$//')
-publicPort=$(echo $publicURL|sed 's/^.*://'|sed 's/.[^\/]*$//')
+publicPort=$(echo $publicURL|sed 's/^.*://'|sed 's/\/.*$//')
echo ">>Verifying connectivity to the public endpoint $publicIP:$publicPort..."
verify_connectivity $publicIP $publicPort
RETVAL=$?
diff --git a/ci/config_functest.yaml b/ci/config_functest.yaml
index dc0919bb..ea502dac 100644
--- a/ci/config_functest.yaml
+++ b/ci/config_functest.yaml
@@ -29,6 +29,8 @@ general:
dir_rally_inst: /home/opnfv/.rally
openstack:
+ snapshot_file: /home/opnfv/functest/conf/openstack_snapshot.yaml
+
image_name: Cirros-0.3.4
image_file_name: cirros-0.3.4-x86_64-disk.img
image_disk_format: qcow2
diff --git a/ci/prepare_env.py b/ci/prepare_env.py
index 5754a62b..4f29260f 100644
--- a/ci/prepare_env.py
+++ b/ci/prepare_env.py
@@ -12,20 +12,19 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
+
import argparse
import os
import re
import subprocess
import sys
-import yaml
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
-import functest.utils.generate_defaults as gen_def
import functest.utils.openstack_utils as os_utils
+import yaml
-""" arguments """
actions = ['start', 'check']
parser = argparse.ArgumentParser()
parser.add_argument("action", help="Possible actions are: "
@@ -241,12 +240,6 @@ def install_rally():
"OpenStack flavors."))
-def generate_os_defaults():
- print_separator()
- logger.info("Generating OpenStack defaults...")
- gen_def.main()
-
-
def check_environment():
msg_not_active = "The Functest environment is not installed."
if not os.path.isfile(ENV_FILE):
@@ -274,7 +267,6 @@ def main():
source_rc_file()
verify_deployment()
install_rally()
- generate_os_defaults()
with open(ENV_FILE, "w") as env_file:
env_file.write("1")
diff --git a/ci/run_tests.py b/ci/run_tests.py
index 5dba1819..29b01d7f 100644
--- a/ci/run_tests.py
+++ b/ci/run_tests.py
@@ -14,13 +14,13 @@ import re
import sys
import functest.ci.tier_builder as tb
-import functest.utils.clean_openstack as clean_os
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
+import functest.utils.openstack_clean as os_clean
+import functest.utils.openstack_snapshot as os_snapshot
import functest.utils.openstack_utils as os_utils
-""" arguments """
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--test", dest="test", action='store',
help="Test case or tier (group of tests) to be executed. "
@@ -61,8 +61,13 @@ def source_rc_file():
os_utils.source_credentials(rc_file)
+def generate_os_snapshot():
+ logger.debug("Generating OpenStack snapshot...")
+ os_snapshot.main()
+
+
def cleanup():
- clean_os.main()
+ os_clean.main()
def run_test(test):
@@ -71,6 +76,9 @@ def run_test(test):
logger.info("Running test case '%s'..." % test_name)
print_separator("=")
logger.debug("\n%s" % test)
+
+ generate_os_snapshot()
+
flags = (" -t %s" % (test_name))
if REPORT_FLAG:
flags += " -r"
diff --git a/cli/commands/cli_os.py b/cli/commands/cli_os.py
index 23b7beaa..b007842b 100644
--- a/cli/commands/cli_os.py
+++ b/cli/commands/cli_os.py
@@ -7,15 +7,15 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
-import click
+
import os
+import click
+import functest.utils.functest_utils as ft_utils
+import functest.utils.openstack_clean as os_clean
+import functest.utils.openstack_snapshot as os_snapshot
import yaml
-import functest.utils.clean_openstack as clean_os
-import functest.utils.functest_utils as ft_utils
-import functest.utils.generate_defaults as gen_def
-""" global variables """
with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f:
functest_yaml = yaml.safe_load(f)
@@ -24,10 +24,12 @@ FUNCTEST_REPO = ("%s/functest/" % REPOS_DIR)
FUNCTEST_CONF_DIR = functest_yaml.get("general").get(
"directories").get("dir_functest_conf")
RC_FILE = os.getenv('creds')
-OS_DEFAULTS_FILE = FUNCTEST_CONF_DIR + '/os_defaults.yaml'
+OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml(
+ "general.openstack.snapshot_file")
class CliOpenStack:
+
def __init__(self):
self.os_auth_url = os.getenv('OS_AUTH_URL')
self.endpoint_ip = None
@@ -86,7 +88,7 @@ class CliOpenStack:
def snapshot_create(self):
self.ping_endpoint()
- if os.path.isfile(OS_DEFAULTS_FILE):
+ if os.path.isfile(OS_SNAPSHOT_FILE):
answer = raw_input("It seems there is already an OpenStack "
"snapshot. Do you want to overwrite it with "
"the current OpenStack status? [y|n]\n")
@@ -99,22 +101,22 @@ class CliOpenStack:
answer = raw_input("Invalid answer. Please type [y|n]\n")
click.echo("Generating Openstack snapshot...")
- gen_def.main()
+ os_snapshot.main()
def snapshot_show(self):
- if not os.path.isfile(OS_DEFAULTS_FILE):
+ if not os.path.isfile(OS_SNAPSHOT_FILE):
click.echo("There is no OpenStack snapshot created. To create "
"one run the command 'functest env os-create-snapshot'")
return
- with open(OS_DEFAULTS_FILE, 'r') as yaml_file:
+ with open(OS_SNAPSHOT_FILE, 'r') as yaml_file:
click.echo("\n%s"
% yaml_file.read())
def clean(self):
self.ping_endpoint()
- if not os.path.isfile(OS_DEFAULTS_FILE):
+ if not os.path.isfile(OS_SNAPSHOT_FILE):
click.echo("Not possible to clean OpenStack without a snapshot. "
"This could cause problems. "
"Run first the command 'os-create-shapshot'.")
return
- clean_os.main()
+ os_clean.main()
diff --git a/docs/configguide/configguide.rst b/docs/configguide/configguide.rst
index 7c8ce8b8..9f669398 100644
--- a/docs/configguide/configguide.rst
+++ b/docs/configguide/configguide.rst
@@ -327,10 +327,10 @@ The structure under the **functest** repository can be described as follows::
| `-- vIMS
`-- utils
|-- __init__.py
- |-- clean_openstack.py
|-- functest_logger.py
|-- functest_utils.py
- |-- generate_defaults.py
+ |-- openstack_clean.py
+ |-- openstack_snapshot.py
`-- openstack_utils.py
(Note: All *.pyc files removed from above list for brevity...)
diff --git a/utils/functest_utils.py b/utils/functest_utils.py
index 2e7a1223..285f887c 100644
--- a/utils/functest_utils.py
+++ b/utils/functest_utils.py
@@ -8,23 +8,25 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
+""" global variables """
+
from datetime import datetime as dt
import json
import os
import os.path
import re
-import requests
import shutil
import socket
import subprocess
import sys
import urllib2
-import yaml
-from git import Repo
+
import functest.ci.tier_builder as tb
+from git import Repo
+import requests
+import yaml
-""" global variables """
REPOS_DIR = os.getenv('repos_dir')
FUNCTEST_REPO = ("%s/functest/" % REPOS_DIR)
@@ -300,3 +302,26 @@ def get_criteria_by_test(testname):
criteria = test.get_criteria()
return criteria
+
+
+# ----------------------------------------------------------
+#
+# YAML UTILS
+#
+# -----------------------------------------------------------
+def get_parameter_from_yaml(parameter):
+ """
+ Returns the value of a given parameter in config_functest.yaml
+ parameter must be given in string format with dots
+ Example: general.openstack.image_name
+ """
+ with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f:
+ functest_yaml = yaml.safe_load(f)
+ f.close()
+ value = functest_yaml
+ for element in parameter.split("."):
+ value = value.get(element)
+ if value is None:
+ raise ValueError("The parameter %s is not defined in"
+ " config_functest.yaml" % parameter)
+ return value
diff --git a/utils/clean_openstack.py b/utils/openstack_clean.py
index 70eced62..3eb39a26 100644
--- a/utils/clean_openstack.py
+++ b/utils/openstack_clean.py
@@ -20,24 +20,24 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
-import os
+""" logging configuration """
+
import time
-import yaml
-from novaclient import client as novaclient
-from neutronclient.v2_0 import client as neutronclient
-from keystoneclient.v2_0 import client as keystoneclient
from cinderclient import client as cinderclient
-
import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
+from keystoneclient.v2_0 import client as keystoneclient
+from neutronclient.v2_0 import client as neutronclient
+from novaclient import client as novaclient
+import yaml
-""" logging configuration """
-logger = ft_logger.Logger("clean_openstack").getLogger()
+logger = ft_logger.Logger("openstack_clean").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/functest/'
-DEFAULTS_FILE = '/home/opnfv/functest/conf/os_defaults.yaml'
+OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml(
+ "general.openstack.snapshot_file")
def separator():
@@ -365,22 +365,22 @@ def main():
logger.info("+++++++++++++++++++++++++++++++")
try:
- with open(DEFAULTS_FILE) as f:
- defaults_yaml = yaml.safe_load(f)
+ with open(OS_SNAPSHOT_FILE) as f:
+ snapshot_yaml = yaml.safe_load(f)
except Exception:
logger.info("The file %s does not exist. The OpenStack snapshot must"
- " be created first. Aborting cleanup." % DEFAULTS_FILE)
+ " be created first. Aborting cleanup." % OS_SNAPSHOT_FILE)
exit(0)
- default_images = defaults_yaml.get('images')
- default_instances = defaults_yaml.get('instances')
- default_volumes = defaults_yaml.get('volumes')
- default_networks = defaults_yaml.get('networks')
- default_routers = defaults_yaml.get('routers')
- default_security_groups = defaults_yaml.get('secgroups')
- default_floatingips = defaults_yaml.get('floatingips')
- default_users = defaults_yaml.get('users')
- default_tenants = defaults_yaml.get('tenants')
+ default_images = snapshot_yaml.get('images')
+ default_instances = snapshot_yaml.get('instances')
+ default_volumes = snapshot_yaml.get('volumes')
+ default_networks = snapshot_yaml.get('networks')
+ default_routers = snapshot_yaml.get('routers')
+ default_security_groups = snapshot_yaml.get('secgroups')
+ default_floatingips = snapshot_yaml.get('floatingips')
+ default_users = snapshot_yaml.get('users')
+ default_tenants = snapshot_yaml.get('tenants')
creds_nova = os_utils.get_credentials("nova")
nova_client = novaclient.Client('2', **creds_nova)
diff --git a/utils/generate_defaults.py b/utils/openstack_snapshot.py
index 35b9ed30..704ef505 100644
--- a/utils/generate_defaults.py
+++ b/utils/openstack_snapshot.py
@@ -20,19 +20,21 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
+""" logging configuration """
+
import os
-import yaml
-from novaclient import client as novaclient
-from neutronclient.v2_0 import client as neutronclient
-from keystoneclient.v2_0 import client as keystoneclient
from cinderclient import client as cinderclient
-
-import functest.utils.openstack_utils as os_utils
import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as ft_utils
+import functest.utils.openstack_utils as os_utils
+from keystoneclient.v2_0 import client as keystoneclient
+from neutronclient.v2_0 import client as neutronclient
+from novaclient import client as novaclient
+import yaml
-""" logging configuration """
-logger = ft_logger.Logger("generate_defaults").getLogger()
+
+logger = ft_logger.Logger("openstack_snapshot").getLogger()
REPO_PATH = os.environ['repos_dir'] + '/functest/'
if not os.path.exists(REPO_PATH):
@@ -40,7 +42,8 @@ if not os.path.exists(REPO_PATH):
exit(-1)
-DEFAULTS_FILE = '/home/opnfv/functest/conf/os_defaults.yaml'
+OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml(
+ "general.openstack.snapshot_file")
def separator():
@@ -129,7 +132,7 @@ def get_users(keystone_client):
def get_tenants(keystone_client):
- logger.debug("Getting users...")
+ logger.debug("Getting tenants...")
dic_tenants = {}
tenants = os_utils.get_tenants(keystone_client)
if not (tenants is None or len(tenants) == 0):
@@ -161,24 +164,24 @@ def main():
"script again.")
exit(-1)
- defaults = {}
- defaults.update(get_instances(nova_client))
- defaults.update(get_images(nova_client))
- defaults.update(get_volumes(cinder_client))
- defaults.update(get_networks(neutron_client))
- defaults.update(get_routers(neutron_client))
- defaults.update(get_security_groups(neutron_client))
- defaults.update(get_floatinips(nova_client))
- defaults.update(get_users(keystone_client))
- defaults.update(get_tenants(keystone_client))
-
- with open(DEFAULTS_FILE, 'w+') as yaml_file:
- yaml_file.write(yaml.safe_dump(defaults, default_flow_style=False))
+ snapshot = {}
+ snapshot.update(get_instances(nova_client))
+ snapshot.update(get_images(nova_client))
+ snapshot.update(get_volumes(cinder_client))
+ snapshot.update(get_networks(neutron_client))
+ snapshot.update(get_routers(neutron_client))
+ snapshot.update(get_security_groups(neutron_client))
+ snapshot.update(get_floatinips(nova_client))
+ snapshot.update(get_users(keystone_client))
+ snapshot.update(get_tenants(keystone_client))
+
+ with open(OS_SNAPSHOT_FILE, 'w+') as yaml_file:
+ yaml_file.write(yaml.safe_dump(snapshot, default_flow_style=False))
yaml_file.seek(0)
- logger.info("Openstack Defaults found in the deployment:\n%s"
- % yaml_file.read())
+ logger.debug("Openstack Snapshot found in the deployment:\n%s"
+ % yaml_file.read())
logger.debug("NOTE: These objects will NOT be deleted after " +
- "running the tests.")
+ "running the test.")
if __name__ == '__main__':