diff options
Diffstat (limited to 'saharaclient/osc/v2/clusters.py')
-rw-r--r-- | saharaclient/osc/v2/clusters.py | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/saharaclient/osc/v2/clusters.py b/saharaclient/osc/v2/clusters.py new file mode 100644 index 0000000..40cb2cf --- /dev/null +++ b/saharaclient/osc/v2/clusters.py @@ -0,0 +1,172 @@ +# Copyright (c) 2015 Mirantis Inc. +# +# 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. + +from osc_lib import utils as osc_utils +from oslo_log import log as logging + +from saharaclient.osc import utils +from saharaclient.osc.v1 import clusters as c_v1 + + +def _format_cluster_output(app, data): + data['image'] = data.pop('default_image_id') + data['node_groups'] = c_v1._format_node_groups_list(data['node_groups']) + data['anti_affinity'] = osc_utils.format_list(data['anti_affinity']) + + +class CreateCluster(c_v1.CreateCluster): + """Creates cluster""" + + log = logging.getLogger(__name__ + ".CreateCluster") + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + client = self.app.client_manager.data_processing + + data = self._take_action(client, parsed_args) + + if parsed_args.count and parsed_args.count > 1: + clusters = [] + for cluster in data['clusters']: + clusters.append( + utils.get_resource(client.clusters, + cluster['cluster']['id'])) + + if parsed_args.wait: + for cluster in clusters: + if not osc_utils.wait_for_status( + client.clusters.get, cluster.id): + self.log.error( + 'Error occurred during cluster creation: %s', + data['id']) + + data = {} + for cluster in clusters: + data[cluster.name] = cluster.id + + else: + if parsed_args.wait: + if not osc_utils.wait_for_status( + client.clusters.get, data['id']): + self.log.error( + 'Error occurred during cluster creation: %s', + data['id']) + data = client.clusters.get(data['id']).to_dict() + _format_cluster_output(self.app, data) + data = utils.prepare_data(data, c_v1.CLUSTER_FIELDS) + + return self.dict2columns(data) + + +class ListClusters(c_v1.ListClusters): + """Lists clusters""" + + log = logging.getLogger(__name__ + ".ListClusters") + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + client = self.app.client_manager.data_processing + search_opts = {} + if parsed_args.plugin: + search_opts['plugin_name'] = parsed_args.plugin + if parsed_args.plugin_version: + search_opts['plugin_version'] = parsed_args.plugin_version + + data = client.clusters.list(search_opts=search_opts) + + if parsed_args.name: + data = utils.get_by_name_substring(data, parsed_args.name) + + if parsed_args.long: + columns = ('name', 'id', 'plugin_name', 'plugin_version', + 'status', 'description', 'default_image_id') + column_headers = utils.prepare_column_headers( + columns, {'default_image_id': 'image'}) + else: + columns = ('name', 'id', 'plugin_name', 'plugin_version', + 'status') + column_headers = utils.prepare_column_headers( + columns, {'default_image_id': 'image'}) + + return ( + column_headers, + (osc_utils.get_item_properties( + s, + columns + ) for s in data) + ) + + +class ShowCluster(c_v1.ShowCluster): + """Display cluster details""" + + log = logging.getLogger(__name__ + ".ShowCluster") + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + client = self.app.client_manager.data_processing + + data, provision_steps = self._take_action(client, parsed_args) + + _format_cluster_output(self.app, data) + + data = self._show_cluster_info(data, provision_steps, parsed_args) + return data + + +class DeleteCluster(c_v1.DeleteCluster): + """Deletes cluster""" + + log = logging.getLogger(__name__ + ".DeleteCluster") + + +class UpdateCluster(c_v1.UpdateCluster): + """Updates cluster""" + + log = logging.getLogger(__name__ + ".UpdateCluster") + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + client = self.app.client_manager.data_processing + + data = self._take_action(client, parsed_args) + + _format_cluster_output(self.app, data) + data = utils.prepare_data(data, c_v1.CLUSTER_FIELDS) + + return self.dict2columns(data) + + +class ScaleCluster(c_v1.ScaleCluster): + """Scales cluster""" + + log = logging.getLogger(__name__ + ".ScaleCluster") + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + client = self.app.client_manager.data_processing + + data = self._take_action(client, parsed_args) + + _format_cluster_output(self.app, data) + data = utils.prepare_data(data, c_v1.CLUSTER_FIELDS) + + return self.dict2columns(data) + + +class VerificationUpdateCluster(c_v1.VerificationUpdateCluster): + """Updates cluster verifications""" + + log = logging.getLogger(__name__ + ".VerificationUpdateCluster") |