示例#1
0
 def scale_node(self):
     """Scale node in cluster"""
     step_config = self.env_config['scale_nodes'][self.scale_step]
     for node in step_config:
         if node['action'] == 'add':
             self._add_node([node])
         elif node['action'] == 'delete':
             self._del_node([node])
         else:
             logger.error("Unknow scale action: {}".format(node['action']))
     self.scale_step += 1
示例#2
0
 def scale_node(self):
     """Scale node in cluster"""
     step_config = self.env_config['scale_nodes'][self.scale_step]
     for node in step_config:
         if node['action'] == 'add':
             self._add_node([node])
         elif node['action'] == 'delete':
             self._del_node([node])
         else:
             logger.error("Unknow scale action: {}".format(node['action']))
     self.scale_step += 1
示例#3
0
文件: base.py 项目: rkhozinov/fuel-qa
    def scale_node(self):
        """Scale node in cluster

        For add nodes with role use scale_nodes in yaml with action add in
        step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: add

        For remove nodes with role use scale_nodes in yaml with action delete
        in step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: delete

        Step may contain add and remove action together::

          scale_nodes:
          - - roles:
              - compute
              count: 2
              action: add
          - - roles:
              - ceph-osd
              count: 1
              action: delete

        """
        step_config = self.env_config['scale_nodes'][self.scale_step]
        for node in step_config:
            if node['action'] == 'add':
                self._add_node([node])
            elif node['action'] == 'delete':
                self._del_node([node])
                if 'compute-vmware' in node['roles']:
                    self.del_vmware_nova_compute()
            elif node['action'] == 'reconfigure':
                if node.get('vmware_vcenter'):
                    nova_computes = node['vmware_vcenter']['nova-compute']
                    self.add_vmware_nova_compute(nova_computes)
                if node.get('vmware_dvs'):
                    dvs_settings = node['vmware_dvs']
                    self.update_dvs_plugin_settings(dvs_settings)
            else:
                logger.error("Unknown scale action: {}".format(node['action']))
        self.scale_step += 1
示例#4
0
    def scale_node(self):
        """Scale node in cluster

        For add nodes with role use scale_nodes in yaml with action add in
        step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: add

        For remove nodes with role use scale_nodes in yaml with action delete
        in step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: delete

        Step may contain add and remove action together::

          scale_nodes:
          - - roles:
              - compute
              count: 2
              action: add
          - - roles:
              - ceph-osd
              count: 1
              action: delete

        """
        step_config = self.env_config['scale_nodes'][self.scale_step]
        for node in step_config:
            if node['action'] == 'add':
                self._add_node([node])
            elif node['action'] == 'delete':
                self._del_node([node])
                if 'compute-vmware' in node['roles']:
                    self.del_vmware_nova_compute()
            elif node['action'] == 'reconfigure':
                if node.get('vmware_vcenter'):
                    nova_computes = node['vmware_vcenter']['nova-compute']
                    self.add_vmware_nova_compute(nova_computes)
                if node.get('vmware_dvs'):
                    dvs_settings = node['vmware_dvs']
                    self.update_dvs_plugin_settings(dvs_settings)
            else:
                logger.error("Unknown scale action: {}".format(node['action']))
        self.scale_step += 1
示例#5
0
文件: base.py 项目: dwong-zh/fuel-qa
    def scale_node(self):
        """Scale node in cluster

        For add nodes with role use scale_nodes in yaml with action add in
        step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: add

        For remove nodes with role use scale_nodes in yaml with action delete
        in step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: delete

        Step may contain add and remove action together::

          scale_nodes:
          - - roles:
              - compute
              count: 2
              action: add
          - - roles:
              - ceph-osd
              count: 1
              action: delete

        """
        step_config = self.env_config['scale_nodes'][self.scale_step]
        for node in step_config:
            if node['action'] == 'add':
                self._add_node([node])
            elif node['action'] == 'delete':
                self._del_node([node])
            else:
                logger.error("Unknown scale action: {}".format(node['action']))
        self.scale_step += 1
示例#6
0
文件: base.py 项目: SergK/fuel-qa
    def scale_node(self):
        """Scale node in cluster

        For add nodes with role use scale_nodes in yaml with action add in
        step::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: add

        For remove nodes with role use scale_nodes in yaml with action delete
        in step:::

          scale_nodes:
          - - roles:
              - controller
              count: 2
              action: delete

        Step may contain add and remove action together::

          scale_nodes:
          - - roles:
              - compute
              count: 2
              action: add
          - - roles:
              - ceph-osd
              count: 1
              action: delete

        """
        step_config = self.env_config['scale_nodes'][self.scale_step]
        for node in step_config:
            if node['action'] == 'add':
                self._add_node([node])
            elif node['action'] == 'delete':
                self._del_node([node])
            else:
                logger.error("Unknow scale action: {}".format(node['action']))
        self.scale_step += 1
示例#7
0
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
     except SkipTest:
         raise SkipTest()
     except Exception as test_exception:
         exc_trace = sys.exc_traceback
         name = 'error_%s' % func.__name__
         description = "Failed in method '%s'." % func.__name__
         if args[0].env is not None:
             try:
                 create_diagnostic_snapshot(args[0].env,
                                            "fail", name)
             except:
                 logger.error("Fetching of diagnostic snapshot failed: {0}".
                              format(traceback.format_exc()))
                 try:
                     with args[0].env.d_env.get_admin_remote()\
                             as admin_remote:
                         pull_out_logs_via_ssh(admin_remote, name)
                 except:
                     logger.error("Fetching of raw logs failed: {0}".
                                  format(traceback.format_exc()))
             finally:
                 logger.debug(args)
                 try:
                     args[0].env.make_snapshot(snapshot_name=name[-50:],
                                               description=description,
                                               is_make=True)
                 except:
                     logger.error("Error making the environment snapshot:"
                                  " {0}".format(traceback.format_exc()))
         raise test_exception, None, exc_trace
     return result
示例#8
0
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
     except SkipTest:
         raise SkipTest()
     except Exception as test_exception:
         exc_trace = sys.exc_traceback
         name = 'error_%s' % func.__name__
         case_name = getattr(func, '_base_class', None)
         step_num = getattr(func, '_step_num', None)
         config_name = getattr(func, '_config_case_group', None)
         description = "Failed in method '%s'." % func.__name__
         if args[0].env is not None:
             try:
                 create_diagnostic_snapshot(args[0].env,
                                            "fail", name)
             except:
                 logger.error("Fetching of diagnostic snapshot failed: {0}".
                              format(traceback.format_exc()))
                 try:
                     with args[0].env.d_env.get_admin_remote()\
                             as admin_remote:
                         pull_out_logs_via_ssh(admin_remote, name)
                 except:
                     logger.error("Fetching of raw logs failed: {0}".
                                  format(traceback.format_exc()))
             finally:
                 logger.debug(args)
                 try:
                     if all([case_name, step_num, config_name]):
                         _hash = hashlib.sha256(config_name)
                         _hash = _hash.hexdigest()[:8]
                         snapshot_name = "{case}_{config}_{step}".format(
                             case=case_name,
                             config=_hash,
                             step="Step{:03d}".format(step_num)
                         )
                     else:
                         snapshot_name = name[-50:]
                     args[0].env.make_snapshot(snapshot_name=snapshot_name,
                                               description=description,
                                               is_make=True)
                 except:
                     logger.error("Error making the environment snapshot:"
                                  " {0}".format(traceback.format_exc()))
         raise test_exception, None, exc_trace
     return result
示例#9
0
 def wrapper(*args, **kwargs):
     try:
         result = func(*args, **kwargs)
     except SkipTest:
         raise SkipTest()
     except Exception as test_exception:
         exc_trace = sys.exc_traceback
         name = 'error_%s' % func.__name__
         case_name = getattr(func, '_base_class', None)
         step_num = getattr(func, '_step_num', None)
         config_name = getattr(func, '_config_case_group', None)
         description = "Failed in method '%s'." % func.__name__
         if args[0].env is not None:
             try:
                 create_diagnostic_snapshot(args[0].env, "fail", name)
             except:
                 logger.error(
                     "Fetching of diagnostic snapshot failed: {0}".format(
                         traceback.format_exc()))
                 try:
                     with args[0].env.d_env.get_admin_remote()\
                             as admin_remote:
                         pull_out_logs_via_ssh(admin_remote, name)
                 except:
                     logger.error("Fetching of raw logs failed: {0}".format(
                         traceback.format_exc()))
             finally:
                 logger.debug(args)
                 try:
                     if all([case_name, step_num, config_name]):
                         _hash = hashlib.sha256(config_name)
                         _hash = _hash.hexdigest()[:8]
                         snapshot_name = "{case}_{config}_{step}".format(
                             case=case_name,
                             config=_hash,
                             step="Step{:03d}".format(step_num))
                     else:
                         snapshot_name = name[-50:]
                     args[0].env.make_snapshot(snapshot_name=snapshot_name,
                                               description=description,
                                               is_make=True)
                 except:
                     logger.error("Error making the environment snapshot:"
                                  " {0}".format(traceback.format_exc()))
         raise test_exception, None, exc_trace
     return result
示例#10
0
文件: base.py 项目: dwong-zh/fuel-qa
    def manage_nodes_power(self):
        """Manage power of node

        To power off node with role use manage_nodes_power in yaml with action
        power_off in step::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: power_off

        To power on node with role use manage_nodes_power in yaml with action
        power_on in step::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: power_on

        To restart node with role use manage_nodes_power in yaml with action
        warm_restart or cold_restart in step::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: warm_restart

        Example of cold restarting two different nodes with the same role::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: cold_restart
          - - roles:
              - controller
              node_number: 1
              action: cold_restart

        """
        power_actions = {
            'power_off_warm': self.fuel_web.warm_shutdown_nodes,
            'power_on_warm': self.fuel_web.warm_start_nodes,
            'reboot_warm': self.fuel_web.warm_restart_nodes,
            'reboot_cold': self.fuel_web.cold_restart_nodes
        }

        step_config = self.env_config['manage_nodes_power'][self.power_step]
        for node in step_config:
            power_action = power_actions.get(node['action'], None)
            node_number = node['node_number']
            if power_action:
                ng_nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
                    cluster_id=self.cluster_id, roles=[node['roles'][0]])

                dev_node = self.fuel_web.get_devops_node_by_nailgun_fqdn(
                    ng_nodes[node_number]['fqdn'])

                # noinspection PyCallingNonCallable
                power_action([dev_node])
            else:
                logger.error("Unknown power switch action: "
                             "{}".format(node['action']))
        self.power_step += 1
示例#11
0
文件: base.py 项目: dtsapikov/fuel-qa
    def manage_nodes_power(self):
        """Manage power of node

        To power off node with role use manage_nodes_power in yaml with action
        power_off in step::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: power_off

        To power on node with role use manage_nodes_power in yaml with action
        power_on in step::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: power_on

        To restart node with role use manage_nodes_power in yaml with action
        warm_restart or cold_restart in step::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: warm_restart

        Example of cold restarting two different nodes with the same role::

          manage_nodes_power:
          - - roles:
              - controller
              node_number: 0
              action: cold_restart
          - - roles:
              - controller
              node_number: 1
              action: cold_restart

        """
        power_actions = {
            'power_off_warm': self.fuel_web.warm_shutdown_nodes,
            'power_on_warm': self.fuel_web.warm_start_nodes,
            'reboot_warm': self.fuel_web.warm_restart_nodes,
            'reboot_cold': self.fuel_web.cold_restart_nodes
        }

        step_config = self.env_config['manage_nodes_power'][self.power_step]
        for node in step_config:
            power_action = power_actions.get(node['action'], None)
            node_number = node['node_number']
            if power_action:
                ng_nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
                    cluster_id=self.cluster_id, roles=[node['roles'][0]])

                dev_node = self.fuel_web.get_devops_node_by_nailgun_fqdn(
                    ng_nodes[node_number]['fqdn'])

                power_action([dev_node])
            else:
                logger.error("Unknown power switch action: "
                             "{}".format(node['action']))
        self.power_step += 1