def take_action_compute(self, client, parsed_args): column_headers = self._get_column_headers(parsed_args) columns = ( "ID", "IP Protocol", "IP Range", "Port Range", "Remote Security Group", ) rules_to_list = [] if parsed_args.group is not None: group = utils.find_resource( client.security_groups, parsed_args.group, ) rules_to_list = group.rules else: columns = columns + ('parent_group_id',) search = {'all_tenants': parsed_args.all_projects} for group in client.security_groups.list(search_opts=search): rules_to_list.extend(group.rules) # NOTE(rtheis): Turn the raw rules into resources. rules = [] for rule in rules_to_list: rules.append(compute_secgroup_rules.SecurityGroupRule( client.security_group_rules, network_utils.transform_compute_security_group_rule(rule), )) return (column_headers, (utils.get_item_properties( s, columns, ) for s in rules))
def take_action_compute(self, client, parsed_args): column_headers = self._get_column_headers(parsed_args) columns = ( "ID", "IP Protocol", "Ethertype", "IP Range", "Port Range", "Remote Security Group", ) rules_to_list = [] if parsed_args.group is not None: group = client.api.security_group_find(parsed_args.group, ) rules_to_list = group['rules'] else: columns = columns + ('parent_group_id', ) search = {'all_tenants': parsed_args.all_projects} for group in client.api.security_group_list(search_opts=search): rules_to_list.extend(group['rules']) # NOTE(rtheis): Turn the raw rules into resources. rules = [] for rule in rules_to_list: rules.append( network_utils.transform_compute_security_group_rule(rule), ) # rules.append(compute_secgroup_rules.SecurityGroupRule( # client.security_group_rules, # network_utils.transform_compute_security_group_rule(rule), # )) return (column_headers, (utils.get_dict_properties( s, columns, ) for s in rules))
def _format_compute_security_group_rule(sg_rule): info = network_utils.transform_compute_security_group_rule(sg_rule) # Trim parent security group ID since caller has this information. info.pop('parent_group_id', None) # Trim keys with empty string values. keys_to_trim = [ 'ip_protocol', 'ip_range', 'port_range', 'remote_security_group', ] for key in keys_to_trim: if key in info and not info[key]: info.pop(key) return utils.format_dict(info)
def _format_compute_security_group_rule(sg_rule): info = network_utils.transform_compute_security_group_rule(sg_rule) # Trim parent security group ID since caller has this information. info.pop('parent_group_id', None) # Trim keys with empty string values. keys_to_trim = [ 'ip_protocol', 'ip_range', 'port_range', 'remote_security_group', ] for key in keys_to_trim: if key in info and not info[key]: info.pop(key) return utils.format_dict(info)
def _format_security_group_rule_show(obj): data = network_utils.transform_compute_security_group_rule(obj) return zip(*sorted(data.items()))
class TestListSecurityGroupRuleCompute(TestSecurityGroupRuleCompute): # The security group to hold the rules. _security_group = \ compute_fakes.FakeSecurityGroup.create_one_security_group() # The security group rule to be listed. _security_group_rule_tcp = \ compute_fakes.FakeSecurityGroupRule.create_one_security_group_rule({ 'ip_protocol': 'tcp', 'from_port': 80, 'to_port': 80, 'group': {'name': _security_group.name}, }) _security_group_rule_icmp = \ compute_fakes.FakeSecurityGroupRule.create_one_security_group_rule({ 'ip_protocol': 'icmp', 'from_port': -1, 'to_port': -1, 'ip_range': {'cidr': '10.0.2.0/24'}, 'group': {'name': _security_group.name}, }) _security_group.rules = [ _security_group_rule_tcp._info, _security_group_rule_icmp._info ] expected_columns_with_group = ( 'ID', 'IP Protocol', 'IP Range', 'Port Range', 'Remote Security Group', ) expected_columns_no_group = \ expected_columns_with_group + ('Security Group',) expected_data_with_group = [] expected_data_no_group = [] for _security_group_rule in _security_group.rules: rule = network_utils.transform_compute_security_group_rule( _security_group_rule) expected_rule_with_group = ( rule['id'], rule['ip_protocol'], rule['ip_range'], rule['port_range'], rule['remote_security_group'], ) expected_rule_no_group = expected_rule_with_group + \ (_security_group_rule['parent_group_id'],) expected_data_with_group.append(expected_rule_with_group) expected_data_no_group.append(expected_rule_no_group) def setUp(self): super(TestListSecurityGroupRuleCompute, self).setUp() self.app.client_manager.network_endpoint_enabled = False self.compute.security_groups.get.return_value = \ self._security_group self.compute.security_groups.list.return_value = \ [self._security_group] # Get the command object to test self.cmd = security_group_rule.ListSecurityGroupRule(self.app, None) def test_list_default(self): parsed_args = self.check_parser(self.cmd, [], []) columns, data = self.cmd.take_action(parsed_args) self.compute.security_groups.list.assert_called_once_with( search_opts={'all_tenants': False}) self.assertEqual(self.expected_columns_no_group, columns) self.assertEqual(self.expected_data_no_group, list(data)) def test_list_with_group(self): arglist = [ self._security_group.id, ] verifylist = [ ('group', self._security_group.id), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) self.compute.security_groups.get.assert_called_once_with( self._security_group.id) self.assertEqual(self.expected_columns_with_group, columns) self.assertEqual(self.expected_data_with_group, list(data)) def test_list_all_projects(self): arglist = [ '--all-projects', ] verifylist = [ ('all_projects', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) self.compute.security_groups.list.assert_called_once_with( search_opts={'all_tenants': True}) self.assertEqual(self.expected_columns_no_group, columns) self.assertEqual(self.expected_data_no_group, list(data)) def test_list_with_ignored_options(self): arglist = [ '--long', ] verifylist = [ ('long', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) self.compute.security_groups.list.assert_called_once_with( search_opts={'all_tenants': False}) self.assertEqual(self.expected_columns_no_group, columns) self.assertEqual(self.expected_data_no_group, list(data))
def _format_security_group_rule_show(obj): data = network_utils.transform_compute_security_group_rule(obj) return zip(*sorted(six.iteritems(data)))