diff --git a/eclcli/provider_connectivity/v1/operation.py b/eclcli/provider_connectivity/v1/operation.py new file mode 100644 index 0000000..04af615 --- /dev/null +++ b/eclcli/provider_connectivity/v1/operation.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- + +try: + import json +except ImportError: + import simplejson as json +import copy +from eclcli.common import command +from eclcli.common import utils +from eclcli.i18n import _ # noqa + + +class ListOperation(command.Lister): + _description = _("List operations of between tenants connect") + + def get_parser(self, prog_name): + parser = super(ListOperation, self).get_parser(prog_name) + parser.add_argument( + '--resource_id', + metavar='', + help='Resource ID to query operations [Type: String]') + return parser + + def take_action(self, parsed_args): + client = self.app.eclsdk.conn.provider_connectivity + + columns = [ + 'ID', + 'Resource ID', + 'Request Type', + 'Reception Datetime', + 'Commit Datetime', + 'Operation Status', + ] + column_headers = copy.deepcopy(columns) + + data = client.operations() + + resource_id = getattr(parsed_args, 'resource_id', None) + if resource_id: + data = [datum for datum in data + if datum.resource_id == resource_id] + + sorted(data, + key=lambda datum: datum.reception_datetime, + reverse=True) + + return (column_headers, + (utils.get_item_properties( + s, columns, + formatters={'Metadata': utils.format_dict}, + ) for s in data)) + + +class ShowOperation(command.ShowOne): + _description = _("Show operation of between tenants connect") + + def get_parser(self, prog_name): + parser = super(ShowOperation, self).\ + get_parser(prog_name) + parser.add_argument( + 'operation_id', + metavar='', + help='ID of operation id to look up.') + return parser + + def take_action(self, parsed_args): + client = self.app.eclsdk.conn.provider_connectivity + + rows = [ + 'ID', + 'Resource ID', + 'Request Type', + 'Operation Status', + 'Reception Datetime', + 'Commit Datetime', + 'Request Body', + 'Error', + 'Resource Type', + ] + row_headers = rows + + data = client.get_operation(parsed_args.operation_id) + + if data.request_body: + req_body = data.request_body + req_body_dict = json.loads(req_body) if type(req_body) is str else req_body + setattr(data, 'request_body', json.dumps(req_body_dict, indent=2)) + + if data.error: + err = data.error + err_dict = json.loads(err) if type(err) is str else err + setattr(data, 'error', json.dumps(err_dict, indent=2)) + + return row_headers, (utils.get_item_properties(data, rows)) diff --git a/setup.cfg b/setup.cfg index 0871f7a..1af19d6 100755 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = eclcli -version = 4.6.1 +version = 4.7.0 summary = CLI for Enterprise Cloud 2.0 description-file = README.rst @@ -331,6 +331,8 @@ ecl.provider_connectivity.v1 = icc_network_show = eclcli.provider_connectivity.v1.address_assignment:ShowICCNetwork icc_subnet_list = eclcli.provider_connectivity.v1.address_assignment:ListICCSubnet icc_subnet_show = eclcli.provider_connectivity.v1.address_assignment:ShowICCSubnet + icc_operation_list = eclcli.provider_connectivity.v1.operation:ListOperation + icc_operation_show = eclcli.provider_connectivity.v1.operation:ShowOperation ecl.dns.v2 = dns_zone_create = eclcli.dns.v2.zone:CreateZone dns_zone_list = eclcli.dns.v2.zone:ListZone