|
27 | 27 | import sys |
28 | 28 | import time |
29 | 29 |
|
30 | | -import keystoneauth1 |
| 30 | +from keystoneauth1 import loading |
| 31 | +from keystoneauth1 import session |
31 | 32 | from cinderclient import client |
32 | 33 | from cinderclient import v2 |
33 | 34 | from cinderclient import __version__ as cinder_version |
@@ -138,6 +139,20 @@ def error(self, message): |
138 | 139 | default=os.environ.get('OS_AUTH_URL', ''), |
139 | 140 | help='URL for the authentication service. ' |
140 | 141 | 'Default=env[OS_AUTH_URL]') |
| 142 | + parser.add_argument('--os-project-domain-name', |
| 143 | + metavar='<project-domain-name>', |
| 144 | + dest='project_domain_name', |
| 145 | + default=os.environ.get('OS_PROJECT_DOMAIN_NAME', |
| 146 | + 'Default'), |
| 147 | + help='Domain name for OpenStack project. ' |
| 148 | + 'Default=env[OS_PROJECT_DOMAIN_NAME]') |
| 149 | + parser.add_argument('--os-user-domain-name', |
| 150 | + metavar='<user-domain-name>', |
| 151 | + dest='user_domain_name', |
| 152 | + default=os.environ.get('OS_USER_DOMAIN_NAME', |
| 153 | + 'Default'), |
| 154 | + help='Domain name for OpenStack user. ' |
| 155 | + 'Default=env[OS_USER_DOMAIN_NAME]') |
141 | 156 | parser.add_argument('-q', '--quiet', dest='quiet', |
142 | 157 | default=False, action='store_true', |
143 | 158 | help='No output except warnings or errors') |
@@ -324,23 +339,30 @@ class BackupService(object): |
324 | 339 | WANT_V = '1.1.1' |
325 | 340 | HAS_SEARCH_OPTS = LooseVersion(cinder_version) >= LooseVersion(WANT_V) |
326 | 341 |
|
327 | | - def __init__(self, username, api_key, project_id, auth_url, |
328 | | - poll_delay=None, name_prefix='auto_backup_', |
329 | | - max_secs_gbi=None): |
| 342 | + def __init__(self, username, api_key, project_name, auth_url, |
| 343 | + project_domain_name, user_domain_name, poll_delay=None, |
| 344 | + name_prefix='auto_backup_', max_secs_gbi=None): |
330 | 345 | super(BackupService, self).__init__() |
331 | 346 | self.username = username |
332 | 347 | self.api_key = api_key |
333 | | - self.project_id = project_id |
| 348 | + self.project_name = project_name |
334 | 349 | self.auth_url = auth_url |
| 350 | + self.project_domain_name = project_domain_name |
| 351 | + self.user_domain_name = user_domain_name |
335 | 352 | self.poll_delay = poll_delay or self.default_poll_deplay |
336 | 353 | self.name_prefix = name_prefix |
337 | 354 |
|
| 355 | + loader = loading.get_plugin_loader('password') |
| 356 | + auth = loader.load_from_options(auth_url=auth_url, |
| 357 | + username=username, |
| 358 | + password=api_key, |
| 359 | + project_name=project_name, |
| 360 | + project_domain_name= |
| 361 | + project_domain_name, |
| 362 | + user_domain_name=user_domain_name) |
| 363 | + sess = session.Session(auth=auth) |
338 | 364 | # Some functionality requires API version 2 |
339 | | - self.client = client.Client(version=2, |
340 | | - username=username, |
341 | | - api_key=api_key, |
342 | | - project_id=project_id, |
343 | | - auth_url=auth_url) |
| 365 | + self.client = client.Client(2, session=sess) |
344 | 366 |
|
345 | 367 | self.status_msg = '' |
346 | 368 | self.max_secs_gbi = max_secs_gbi or 300 |
@@ -782,25 +804,26 @@ def get_client(self, tenant_id, keep_tenant=True): |
782 | 804 | if not keep_tenant: |
783 | 805 | return self.client |
784 | 806 |
|
785 | | - auth_ref = self.client.client.auth_ref |
786 | | - |
787 | | - # Get project ID for Keystone V3 |
788 | | - if isinstance(auth_ref, keystoneauth1.access.access.AccessInfoV3): |
789 | | - auth_project_id = auth_ref.project_id |
790 | | - # Get project ID for Keystone v2 |
791 | | - else: |
792 | | - auth_project_id = auth_ref['token']['tenant']['id'] |
| 807 | + auth_project_id = self.client.client.get_project_id() |
793 | 808 |
|
794 | 809 | if auth_project_id == tenant_id: |
795 | 810 | return self.client |
796 | 811 | else: |
797 | 812 |
|
798 | 813 | _LI("Using tenant id %s", tenant_id) |
799 | | - return client.Client(version=2, |
800 | | - username=self.username, |
801 | | - api_key=self.api_key, |
802 | | - tenant_id=tenant_id, |
803 | | - auth_url=self.auth_url) |
| 814 | + |
| 815 | + loader = loading.get_plugin_loader('password') |
| 816 | + auth = loader.load_from_options(auth_url=self.auth_url, |
| 817 | + username=self.username, |
| 818 | + password=self.api_key, |
| 819 | + project_id=tenant_id, |
| 820 | + project_domain_name= |
| 821 | + self.project_domain_name, |
| 822 | + user_domain_name= |
| 823 | + self.user_domain_name) |
| 824 | + sess = session.Session(auth=auth) |
| 825 | + # Some functionality requires API version 2 |
| 826 | + return client.Client(2, session=sess) |
804 | 827 |
|
805 | 828 | def import_metadata(self, filename): |
806 | 829 | """Import backup metadata to DB from file.""" |
@@ -849,8 +872,10 @@ def _separator(separator): |
849 | 872 | def main(args): |
850 | 873 | backup = BackupService(username=args.username, |
851 | 874 | api_key=args.password, |
852 | | - project_id=args.tenant_name, |
| 875 | + project_name=args.tenant_name, |
853 | 876 | auth_url=args.auth_url, |
| 877 | + project_domain_name=args.project_domain_name, |
| 878 | + user_domain_name=args.user_domain_name, |
854 | 879 | max_secs_gbi=getattr(args, 'max_secs_gbi', None)) |
855 | 880 |
|
856 | 881 | if not backup.is_up: |
|
0 commit comments