Skip to content

Commit 46431ed

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Allow multiple --remove-tag in project set"
2 parents 7178371 + b4ba046 commit 46431ed

2 files changed

Lines changed: 30 additions & 6 deletions

File tree

openstackclient/identity/v3/tag.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ def add_tag_option_to_parser_for_set(parser, resource_name):
113113
)
114114
parser.add_argument(
115115
'--remove-tag',
116+
action='append',
116117
metavar='<tag>',
117118
default=[],
118119
help=_(
@@ -128,9 +129,7 @@ def update_tags_in_args(parsed_args, obj, args):
128129
args['tags'] = []
129130
obj.tags = []
130131
if parsed_args.remove_tag:
131-
if parsed_args.remove_tag in obj.tags:
132-
obj.tags.remove(parsed_args.remove_tag)
133-
args['tags'] = list(set(obj.tags))
132+
args['tags'] = list(set(obj.tags) - set(parsed_args.remove_tag))
134133
return
135134
if parsed_args.tags:
136135
args['tags'] = list(set(obj.tags).union(set(parsed_args.tags)))

openstackclient/tests/unit/identity/v3/test_project.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ def test_project_list_my_projects(self):
947947
class TestProjectSet(TestProject):
948948
domain = identity_fakes.FakeDomain.create_one_domain()
949949
project = identity_fakes.FakeProject.create_one_project(
950-
attrs={'domain_id': domain.id}
950+
attrs={'domain_id': domain.id, 'tags': ['tag1', 'tag2', 'tag3']}
951951
)
952952

953953
def setUp(self):
@@ -1127,13 +1127,38 @@ def test_project_set_tags(self):
11271127

11281128
result = self.cmd.take_action(parsed_args)
11291129

1130-
# Set expected values
1131-
kwargs = {'name': 'qwerty', 'tags': ['foo']}
1130+
# Set expected values. new tag is added to original tags for update.
1131+
kwargs = {
1132+
'name': 'qwerty',
1133+
'tags': list(set(['tag1', 'tag2', 'tag3', 'foo'])),
1134+
}
11321135
# ProjectManager.update(project, name=, domain=, description=,
11331136
# enabled=, **kwargs)
11341137
self.projects_mock.update.assert_called_with(self.project.id, **kwargs)
11351138
self.assertIsNone(result)
11361139

1140+
def test_project_remove_tags(self):
1141+
arglist = [
1142+
'--remove-tag',
1143+
'tag1',
1144+
'--remove-tag',
1145+
'tag2',
1146+
self.project.name,
1147+
]
1148+
verifylist = [
1149+
('enable', False),
1150+
('disable', False),
1151+
('project', self.project.name),
1152+
('remove_tag', ['tag1', 'tag2']),
1153+
]
1154+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1155+
1156+
result = self.cmd.take_action(parsed_args)
1157+
1158+
kwargs = {'tags': list(set(['tag3']))}
1159+
self.projects_mock.update.assert_called_with(self.project.id, **kwargs)
1160+
self.assertIsNone(result)
1161+
11371162
def test_project_set_with_immutable_option(self):
11381163
arglist = [
11391164
'--domain',

0 commit comments

Comments
 (0)