From 542f5873648df3657e623643a19f723a298fc46f Mon Sep 17 00:00:00 2001
From: Guojian Shao <guojian@unitedstack.com>
Date: Fri, 29 May 2015 11:50:30 -0400
Subject: [PATCH] add --domain argument to v3 project set

Currently argument 'domain' is not supported by command 'os project
set', but it is required by keystone v3 update project API to match
the domain id.

Closes-Bug: #1460122
Change-Id: I1b32f67f78b369f6134a74cdf9a4811b7539d44b
---
 doc/source/command-objects/project.rst            |  6 ++++++
 openstackclient/identity/v3/project.py            |  8 ++++++++
 openstackclient/tests/identity/v3/test_project.py | 15 +++++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/doc/source/command-objects/project.rst b/doc/source/command-objects/project.rst
index b8607f0b62..cde4a9dd6c 100644
--- a/doc/source/command-objects/project.rst
+++ b/doc/source/command-objects/project.rst
@@ -124,6 +124,12 @@ Set project properties
 
     Set project name
 
+.. option:: --domain <domain>
+
+    Domain owning :ref:`\<project\> <project_set-project>` (name or ID)
+
+    .. versionadded:: 3
+
 .. option:: --description <description>
 
     Set project description
diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py
index 0cb3c45310..48f547f3ed 100644
--- a/openstackclient/identity/v3/project.py
+++ b/openstackclient/identity/v3/project.py
@@ -241,6 +241,11 @@ class SetProject(command.Command):
             metavar='<name>',
             help='Set project name',
         )
+        parser.add_argument(
+            '--domain',
+            metavar='<domain>',
+            help='Domain owning <project> (name or ID)',
+        )
         parser.add_argument(
             '--description',
             metavar='<description>',
@@ -271,6 +276,7 @@ class SetProject(command.Command):
         identity_client = self.app.client_manager.identity
 
         if (not parsed_args.name
+                and not parsed_args.domain
                 and not parsed_args.description
                 and not parsed_args.enable
                 and not parsed_args.property
@@ -285,6 +291,8 @@ class SetProject(command.Command):
         kwargs = {}
         if parsed_args.name:
             kwargs['name'] = parsed_args.name
+        if parsed_args.domain:
+            kwargs['domain'] = parsed_args.domain
         if parsed_args.description:
             kwargs['description'] = parsed_args.description
         if parsed_args.enable:
diff --git a/openstackclient/tests/identity/v3/test_project.py b/openstackclient/tests/identity/v3/test_project.py
index ec50da0c30..ebf612ccd3 100644
--- a/openstackclient/tests/identity/v3/test_project.py
+++ b/openstackclient/tests/identity/v3/test_project.py
@@ -618,10 +618,12 @@ class TestProjectSet(TestProject):
     def test_project_set_name(self):
         arglist = [
             '--name', 'qwerty',
+            '--domain', identity_fakes.domain_id,
             identity_fakes.project_name,
         ]
         verifylist = [
             ('name', 'qwerty'),
+            ('domain', identity_fakes.domain_id),
             ('enable', False),
             ('disable', False),
             ('project', identity_fakes.project_name),
@@ -634,6 +636,7 @@ class TestProjectSet(TestProject):
         # Set expected values
         kwargs = {
             'name': 'qwerty',
+            'domain': identity_fakes.domain_id,
         }
         # ProjectManager.update(project, name=, domain=, description=,
         #                       enabled=, **kwargs)
@@ -644,10 +647,12 @@ class TestProjectSet(TestProject):
 
     def test_project_set_description(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--description', 'new desc',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('description', 'new desc'),
             ('enable', False),
             ('disable', False),
@@ -660,6 +665,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'description': 'new desc',
         }
         self.projects_mock.update.assert_called_with(
@@ -669,10 +675,12 @@ class TestProjectSet(TestProject):
 
     def test_project_set_enable(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--enable',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('enable', True),
             ('disable', False),
             ('project', identity_fakes.project_name),
@@ -684,6 +692,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'enabled': True,
         }
         self.projects_mock.update.assert_called_with(
@@ -693,10 +702,12 @@ class TestProjectSet(TestProject):
 
     def test_project_set_disable(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--disable',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('enable', False),
             ('disable', True),
             ('project', identity_fakes.project_name),
@@ -708,6 +719,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'enabled': False,
         }
         self.projects_mock.update.assert_called_with(
@@ -717,11 +729,13 @@ class TestProjectSet(TestProject):
 
     def test_project_set_property(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--property', 'fee=fi',
             '--property', 'fo=fum',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('property', {'fee': 'fi', 'fo': 'fum'}),
             ('project', identity_fakes.project_name),
         ]
@@ -732,6 +746,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'fee': 'fi',
             'fo': 'fum',
         }