Exemple #1
0
    def revert_snapshot(self, name):
        if self.get_virtual_environment().has_snapshot(name):
            logger.info('We have snapshot with such name %s' % name)

            self.get_virtual_environment().revert(name)
            logger.info('Starting snapshot reverting ....')

            self.get_virtual_environment().resume()
            logger.info('Starting snapshot resuming ...')

            self.nodes().admin.await(self.admin_net, timeout=10 * 60)

            list = self.nodes().slaves
            for node in list:
                nailgun_node = self.fuel_web.get_nailgun_node_by_devops_node(
                    node)
                if not node.driver.node_active(node) or \
                        nailgun_node['status'] not in ['provisioned', 'ready']:
                    continue
                try:
                    self.sync_node_time(self.get_ssh_to_remote(
                        node.get_ip_address_by_network_name(self.admin_net)))
                except Exception as e:
                    logger.warn(
                        'Paramiko exception catched while'
                        ' trying to run ntpdate: %s' % e)
            return True
        return False
Exemple #2
0
    def revert_snapshot(self, name):
        if self.get_virtual_environment().has_snapshot(name):
            logger.info('We have snapshot with such name %s' % name)

            self.get_virtual_environment().revert(name)
            logger.info('Starting snapshot reverting ....')

            self.get_virtual_environment().resume()
            logger.info('Starting snapshot resuming ...')

            self.nodes().admin. await (self.admin_net, timeout=10 * 60)

            self.sync_time_admin_node()

            for node in self.nodes().slaves:
                if not node.driver.node_active(node):
                    continue
                try:
                    logger.info("Sync time on revert for node %s" % node.name)
                    self.sync_node_time(
                        self.get_ssh_to_remote_by_name(node.name))
                except Exception as e:
                    logger.warn('Paramiko exception catched while'
                                ' trying to run ntpdate: %s' % e)

                self.run_nailgun_agent(
                    self.get_ssh_to_remote_by_name(node.name))
            return True
        return False
Exemple #3
0
    def revert_snapshot(self, name):
        if self.get_virtual_environment().has_snapshot(name):
            logger.info('We have snapshot with such name %s' % name)

            self.get_virtual_environment().revert(name)
            logger.info('Starting snapshot reverting ....')

            self.get_virtual_environment().resume()
            logger.info('Starting snapshot resuming ...')

            self.nodes().admin.await(self.admin_net, timeout=10 * 60)

            self.sync_time_admin_node()

            for node in self.nodes().slaves:
                if not node.driver.node_active(node):
                    continue
                try:
                    logger.info("Sync time on revert for node %s" % node.name)
                    self.sync_node_time(
                        self.get_ssh_to_remote_by_name(node.name))
                except Exception as e:
                    logger.warn(
                        'Paramiko exception catched while'
                        ' trying to run ntpdate: %s' % e)

                self.run_nailgun_agent(
                    self.get_ssh_to_remote_by_name(node.name))
            return True
        return False
    def activate_plugin(self, name, version, options=None, strict=False):
        """Enable and configure a plugin for the cluster.

        :param name: name of the plugin.
        :type name: str
        :param version: version of the plugin.
        :type name: str
        :param options: configuration of the plugin (optional).
        :type options: dict
        :param strict: whether or not to fail when setting an unknown option
        (default: False).
        :type strict: boolean
        :returns: None
        """
        if options is None:
            options = {}
        msg = "Plugin {0} isn't found.".format(name)
        asserts.assert_true(
            self.fuel_web.check_plugin_exists(self.cluster_id, name),
            msg)

        logger.info("Updating settings for plugin {0} ({1}): {2}".format(
            name, version, options))
        attributes = self.nailgun_client.get_cluster_attributes(
            self.cluster_id)
        attributes = attributes['editable'][name]

        plugin_data = None
        # This key does not exist in MOS 7.0
        if 'versions' in attributes['metadata']:
            for item in attributes['metadata']['versions']:
                if item['metadata']['plugin_version'] == version:
                    plugin_data = item
                    break
            asserts.assert_is_not_none(
                plugin_data,
                "Plugin {0} ({1}) is not found".format(
                    name, version))
        else:
            plugin_data = attributes

        attributes['metadata']['enabled'] = True
        for option, value in options.items():
            path = option.split("/")
            for p in path[:-1]:
                if p in plugin_data:
                    plugin_option = plugin_data[p]
                else:
                    msg = "Plugin option {} not found".format(option)
                    if strict:
                        raise NotFound(msg)
                    logger.warn(msg)
                    plugin_option = None
                    break

            if plugin_option is not None:
                plugin_option[path[-1]] = value

        self.nailgun_client.update_cluster_attributes(self.cluster_id, {
            "editable": {name: attributes}
        })