aboutsummaryrefslogtreecommitdiffstats
path: root/testcases/config_functest.py
diff options
context:
space:
mode:
authorjose.lausuch <jose.lausuch@ericsson.com>2015-09-30 15:29:04 +0200
committerjose.lausuch <jose.lausuch@ericsson.com>2015-10-07 10:07:22 +0200
commit71d85bca9549348b0c2f486bac58923f299e5a88 (patch)
tree51ba663c21cf3facfe98625839993379c7b0f08d /testcases/config_functest.py
parentec6b78ebea4aee67f299d31af99b9e0e2ea4e9a5 (diff)
Dockerfile for Functest
Includes also: - script to trigger Functest automatically within the container - common requirements file to install python modules - added new parameters in the config_functest.yaml - other small adjustements JIRA: FUNCTEST-29 Change-Id: I230631e43e5f7e14938b35903ecec1b17db0f88a Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
Diffstat (limited to 'testcases/config_functest.py')
-rwxr-xr-xtestcases/config_functest.py61
1 files changed, 13 insertions, 48 deletions
diff --git a/testcases/config_functest.py b/testcases/config_functest.py
index e209a3b94..8bc632c71 100755
--- a/testcases/config_functest.py
+++ b/testcases/config_functest.py
@@ -51,35 +51,31 @@ f.close()
""" global variables """
# Directories
-HOME = os.environ['HOME']+"/"
REPO_PATH = args.repo_path
RALLY_DIR = REPO_PATH + functest_yaml.get("general").get("directories").get("dir_rally")
-RALLY_REPO_DIR = HOME + functest_yaml.get("general").get("directories").get("dir_rally_repo")
-RALLY_INSTALLATION_DIR = HOME + functest_yaml.get("general").get("directories").get("dir_rally_inst")
-RALLY_RESULT_DIR = HOME + functest_yaml.get("general").get("directories").get("dir_rally_res")
+RALLY_REPO_DIR = functest_yaml.get("general").get("directories").get("dir_repo_rally")
+RALLY_INSTALLATION_DIR = functest_yaml.get("general").get("directories").get("dir_rally_inst")
+RALLY_RESULT_DIR = functest_yaml.get("general").get("directories").get("dir_rally_res")
VPING_DIR = REPO_PATH + functest_yaml.get("general").get("directories").get("dir_vping")
ODL_DIR = REPO_PATH + functest_yaml.get("general").get("directories").get("dir_odl")
+IMAGE_DIR = functest_yaml.get("general").get("directories").get("dir_functest_data")
# Tempest/Rally configuration details
DEPLOYMENT_MAME = "opnfv-rally"
+RALLY_COMMIT = functest_yaml.get("general").get("openstack").get("rally_stable_commit")
#GLANCE image parameters
IMAGE_URL = functest_yaml.get("general").get("openstack").get("image_url")
IMAGE_DISK_FORMAT = functest_yaml.get("general").get("openstack").get("image_disk_format")
IMAGE_NAME = functest_yaml.get("general").get("openstack").get("image_name")
IMAGE_FILE_NAME = IMAGE_URL.rsplit('/')[-1]
-IMAGE_DIR = HOME + functest_yaml.get("general").get("openstack").get("image_download_path")
-IMAGE_PATH = IMAGE_DIR + IMAGE_FILE_NAME
+IMAGE_PATH = IMAGE_DIR + "/" + IMAGE_FILE_NAME
def action_start():
"""
Start the functest environment installation
"""
- if not check_permissions():
- logger.error("Bad Python cache directory ownership.")
- exit(-1)
-
if not functest_utils.check_internet_connectivity():
logger.error("There is no Internet connectivity. Please check the network configuration.")
exit(-1)
@@ -93,11 +89,6 @@ def action_start():
logger.debug("Cleaning possible functest environment leftovers.")
action_clean()
- logger.info("Installing needed libraries on the host")
- cmd = "sudo yum -y install gcc libffi-devel python-devel openssl-devel gmp-devel libxml2-devel libxslt-devel postgresql-devel git wget crudini"
- if not functest_utils.execute_command(cmd, logger):
- logger.error("There has been a problem while installing software packages.")
- exit(-1)
logger.info("Installing ODL environment...")
if not install_odl():
@@ -142,11 +133,11 @@ def action_check():
Check if the functest environment is properly installed
"""
errors_all = False
-
+ errors = False
logger.info("Checking current functest configuration...")
logger.debug("Checking script directories...")
- errors = False
+
dirs = [RALLY_DIR, RALLY_INSTALLATION_DIR, VPING_DIR, ODL_DIR]
for dir in dirs:
if not os.path.exists(dir):
@@ -197,11 +188,7 @@ def action_check():
logger.debug("...FAIL")
#TODO: check OLD environment setup
- if errors_all:
- return False
- else:
- return True
-
+ return not errors_all
@@ -214,11 +201,6 @@ def action_clean():
logger.debug("Removing Rally installation directory %s" % RALLY_INSTALLATION_DIR)
shutil.rmtree(RALLY_INSTALLATION_DIR,ignore_errors=True)
- if os.path.exists(RALLY_REPO_DIR):
- logger.debug("Removing Rally repository %s" % RALLY_REPO_DIR)
- cmd = "sudo rm -rf " + RALLY_REPO_DIR #need to be sudo, not possible with rmtree
- functest_utils.execute_command(cmd,logger)
-
if os.path.exists(IMAGE_PATH):
logger.debug("Deleting image")
os.remove(IMAGE_PATH)
@@ -240,30 +222,12 @@ def action_clean():
-def check_permissions():
- current_user = getpass.getuser()
- cache_dir = HOME+".cache/pip"
- logger.info("Checking permissions of '%s'..." %cache_dir)
- logger.debug("Current user is '%s'" %current_user)
- cache_user = getpwuid(stat(cache_dir).st_uid).pw_name
- logger.debug("Cache directory owner is '%s'" %cache_user)
- if cache_user != current_user:
- logger.info("The owner of '%s' is '%s'. Please run 'sudo chown -R %s %s'." %(cache_dir, cache_user, current_user, cache_dir))
- return False
-
- return True
-
-
def install_rally():
if check_rally():
logger.info("Rally is already installed.")
else:
- logger.debug("Cloning repository...")
- url = "https://git.openstack.org/openstack/rally"
- Repo.clone_from(url, RALLY_REPO_DIR)
-
logger.debug("Executing %s./install_rally.sh..." %RALLY_REPO_DIR)
- install_script = RALLY_REPO_DIR + "install_rally.sh --yes"
+ install_script = RALLY_REPO_DIR + "/install_rally.sh --yes"
cmd = 'sudo ' + install_script
functest_utils.execute_command(cmd,logger)
@@ -311,7 +275,7 @@ def configure_tempest():
return False
logger.debug("Finding tempest.conf file...")
- tempest_conf_file = RALLY_INSTALLATION_DIR+"tempest/for-deployment-" \
+ tempest_conf_file = RALLY_INSTALLATION_DIR+"/tempest/for-deployment-" \
+deployment_uuid+"/tempest.conf"
logger.debug(" Updating fixed_network_name...")
@@ -359,7 +323,8 @@ def create_glance_image(path,name,disk_format):
"""
Create a glance image given the absolute path of the image, its name and the disk format
"""
- cmd = "glance image-create --name "+name+" --is-public true --disk-format "+disk_format+" --container-format bare --file "+path
+ cmd = ("glance image-create --name "+name+" --visibility public "
+ "--disk-format "+disk_format+" --container-format bare --file "+path)
functest_utils.execute_command(cmd,logger)
return True
light .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
heat_template_version: pike

description: >
  Utility stack to convert an array of services into a set of combined
  role configs.

parameters:
  Services:
    default: []
    description: |
        List nested stack service templates.
    type: comma_delimited_list
  ServiceData:
    default: {}
    description: Dictionary packing service data
    type: json
  ServiceNetMap:
    default: {}
    description: Mapping of service_name -> network name. Typically set
                 via parameter_defaults in the resource registry.  This
                 mapping overrides those in ServiceNetMapDefaults.
    type: json
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    type: json
  DefaultPasswords:
    default: {}
    description: Mapping of service -> default password. Used to help
                 pass top level passwords managed by Heat into services.
    type: json
  RoleName:
    default: ''
    description: Role name on which the service is applied
    type: string
  RoleParameters:
    description: Parameters specific to the role
    default: {}
    type: json

resources:

  ServiceChain:
    type: OS::Heat::ResourceChain
    properties:
      resources: {get_param: Services}
      concurrent: true
      resource_properties:
        ServiceData: {get_param: ServiceData}
        ServiceNetMap: {get_param: ServiceNetMap}
        EndpointMap: {get_param: EndpointMap}
        DefaultPasswords: {get_param: DefaultPasswords}
        RoleName: {get_param: RoleName}
        RoleParameters: {get_param: RoleParameters}

  LoggingConfiguration:
    type: OS::TripleO::LoggingConfiguration

  ServiceServerMetadataHook:
    type: OS::TripleO::ServiceServerMetadataHook
    properties:
      RoleData: {get_attr: [ServiceChain, role_data]}

  PuppetStepConfig:
    type: OS::Heat::Value
    properties:
      type: string
      value:
        yaql:
          expression:
            # select 'step_config' only from services that do not have a docker_config
            coalesce($.data.service_names, []).zip(coalesce($.data.step_config, []), coalesce($.data.docker_config, [])).where($[2] = null).where($[1] != null).select($[1]).join("\n")
          data:
            service_names: {get_attr: [ServiceChain, role_data, service_name]}
            step_config: {get_attr: [ServiceChain, role_data, step_config]}
            docker_config: {get_attr: [ServiceChain, role_data, docker_config]}

  DockerConfig:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        yaql:
          expression:
            # select 'docker_config' only from services that have it
            coalesce($.data.service_names, []).zip(coalesce($.data.docker_config, [])).where($[1] != null).select($[1]).reduce($1.mergeWith($2), {})
          data:
            service_names: {get_attr: [ServiceChain, role_data, service_names]}
            docker_config: {get_attr: [ServiceChain, role_data, docker_config]}

  LoggingSourcesConfig:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        # Transform the individual logging_source configuration from
        # each service in the chain into a global list, adding some
        # default configuration at the same time.
        yaql:
          expression: >
            let(
            default_format => coalesce($.data.default_format, ''),
            pos_file_path => coalesce($.data.pos_file_path, ''),
            sources => coalesce($.data.sources, {}).flatten()
            ) ->
            $sources.where($ != null).select({
            'type' => 'tail',
            'tag' => $.tag,
            'path' => $.path,
            'format' => $.get('format', $default_format),
            'pos_file' => $.get('pos_file', $pos_file_path + '/' + $.tag + '.pos')
            })
          data:
            sources:
              - {get_attr: [LoggingConfiguration, LoggingDefaultSources]}
              - yaql:
                  expression: list(coalesce($.data.role_data, []).where($ != null).select($.get('logging_source')).where($ != null))
                  data: {role_data: {get_attr: [ServiceChain, role_data]}}

              - {get_attr: [LoggingConfiguration, LoggingExtraSources]}
            default_format: {get_attr: [LoggingConfiguration, LoggingDefaultFormat]}
            pos_file_path: {get_attr: [LoggingConfiguration, LoggingPosFilePath]}

  LoggingGroupsConfig:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        # Build a list of unique groups to which we should add the
        # fluentd user.
        yaql:
          expression: >
            set((coalesce($.data.default, []) + coalesce($.data.extra, []) + coalesce($.data.role_data, []).where($ != null).select($.get('logging_groups'))).flatten()).where($)
          data:
            default: {get_attr: [LoggingConfiguration, LoggingDefaultGroups]}
            extra: {get_attr: [LoggingConfiguration, LoggingExtraGroups]}
            role_data: {get_attr: [ServiceChain, role_data]}

  MonitoringSubscriptionsConfig:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        yaql:
          expression: list(coalesce($.data.role_data, []).where($ != null).select($.get('monitoring_subscription')).where($ != null))
          data: {role_data: {get_attr: [ServiceChain, role_data]}}

  ServiceNames:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        filter:
          - [null]
          - {get_attr: [ServiceChain, role_data, service_name]}

  GlobalConfigSettings:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        map_merge:
          yaql:
            expression: list(coalesce($.data.role_data, []).where($ != null).select($.get('global_config_settings')).where($ != null))
            data: {role_data: {get_attr: [ServiceChain, role_data]}}

  ServiceConfigSettings:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        yaql:
          expression: coalesce($.data.role_data, []).where($ != null).select($.get('service_config_settings')).where($ != null).reduce($1.mergeWith($2), {})
          data: {role_data: {get_attr: [ServiceChain, role_data]}}

  ServiceWorkflowTasks:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        yaql:
          expression: coalesce($.data.role_data, []).where($ != null).select($.get('service_workflow_tasks')).where($ != null).reduce($1.mergeWith($2), {})
          data: {role_data: {get_attr: [ServiceChain, role_data]}}

  UpgradeTasks:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        yaql:
          # Note we use distinct() here to filter any identical tasks, e.g yum update for all services
          expression: coalesce($.data, []).where($ != null).select($.get('upgrade_tasks')).where($ != null).flatten().distinct()
          data: {get_attr: [ServiceChain, role_data]}

  UpdateTasks:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        yaql:
          # Note we use distinct() here to filter any identical tasks, e.g yum update for all services
          expression: coalesce($.data, []).where($ != null).select($.get('update_tasks')).where($ != null).flatten().distinct()
          data: {get_attr: [ServiceChain, role_data]}

  UpgradeBatchTasks:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        yaql:
          expression: coalesce($.data, []).where($ != null).select($.get('upgrade_batch_tasks')).where($ != null).flatten().distinct()
          data: {get_attr: [ServiceChain, role_data]}

  PuppetConfig:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        yaql:
          expression: coalesce($.data, []).where($ != null).select($.get('puppet_config')).where($ != null).distinct()
          data: {get_attr: [ServiceChain, role_data]}

  KollaConfig:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        yaql:
          expression: coalesce($.data.role_data, []).where($ != null).select($.get('kolla_config')).where($ != null).reduce($1.mergeWith($2), {})
          data: {role_data: {get_attr: [ServiceChain, role_data]}}

  DockerPuppetTasks:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        yaql:
          expression: dict(coalesce($.data, []).where($ != null).select($.get('docker_puppet_tasks')).where($ != null).selectMany($.items()).groupBy($[0], $[1]))
          data: {get_attr: [ServiceChain, role_data]}

  HostPrepTasks:
    type: OS::Heat::Value
    properties:
      type: comma_delimited_list
      value:
        yaql:
          # Note we use distinct() here to filter any identical tasks
          expression: coalesce($.data, []).where($ != null).select($.get('host_prep_tasks')).where($ != null).flatten().distinct()
          data: {get_attr: [ServiceChain, role_data]}

outputs:
  role_data:
    description: Combined Role data for this set of services.
    value:
      service_names: {get_attr: [ServiceNames, value]}
      monitoring_subscriptions: {get_attr: [MonitoringSubscriptionsConfig, value]}
      logging_sources: {get_attr: [LoggingSourcesConfig, value]}
      logging_groups: {get_attr: [LoggingGroupsConfig, value]}
      config_settings: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}}
      global_config_settings: {get_attr: [GlobalConfigSettings, value]}
      service_config_settings: {get_attr: [ServiceConfigSettings, value]}
      service_workflow_tasks: {get_attr: [ServiceWorkflowTasks, value]}
      step_config: {get_attr: [PuppetStepConfig, value]}
      upgrade_tasks: {get_attr: [UpgradeTasks, value]}
      update_tasks: {get_attr: [UpdateTasks, value]}
      upgrade_batch_tasks: {get_attr: [UpgradeBatchTasks, value]}
      service_metadata_settings: {get_attr: [ServiceServerMetadataHook, metadata]}

      # Keys to support docker/services
      puppet_config: {get_attr: [PuppetConfig, value]}
      kolla_config: {get_attr: [KollaConfig, value]}
      docker_config: {get_attr: [DockerConfig, value]}
      docker_puppet_tasks: {get_attr: [DockerPuppetTasks, value]}
      host_prep_tasks: {get_attr: [HostPrepTasks, value]}