From e1d8cb6576e1ffa6efcde61230165ac3e198811e Mon Sep 17 00:00:00 2001 From: Sebastien DOIDO Date: Mon, 27 Jul 2015 18:13:50 +0200 Subject: [PATCH] Handle endpoint_type attribute Change-Id: Ie7a419146f71cb480433062b480036311f14b042 --- flameclient/cmd.py | 7 ++++- flameclient/flame.py | 9 ++++--- flameclient/managers.py | 46 ++++++++++++++++++++------------- flameclient/tests/test_flame.py | 3 ++- 4 files changed, 42 insertions(+), 23 deletions(-) diff --git a/flameclient/cmd.py b/flameclient/cmd.py index 19378af..eb6a4d6 100644 --- a/flameclient/cmd.py +++ b/flameclient/cmd.py @@ -59,6 +59,10 @@ def main(args=None): "server's certificate will not be verified " "against any certificate authorities. This " "option should be used with caution.") + parser.add_argument("--endpoint_type", type=str, + default=os.environ.get("OS_ENDPOINT_TYPE", + "publicURL"), + help="Defaults to env[OS_ENDPOINT_TYPE] or publicURL") parser.add_argument('--exclude-servers', action='store_true', default=False, help="Do not export in template server resources") @@ -73,7 +77,8 @@ def main(args=None): args = parser.parse_args() template = flame.TemplateGenerator(args.username, args.password, args.project, args.auth_url, - args.insecure, region_name=args.region) + args.insecure, args.endpoint_type, + region_name=args.region) template.extract_vm_details(args.exclude_servers, args.exclude_volumes, args.generate_stack_data) template.extract_data() diff --git a/flameclient/flame.py b/flameclient/flame.py index cc08000..4993d26 100644 --- a/flameclient/flame.py +++ b/flameclient/flame.py @@ -105,11 +105,11 @@ class Resource(object): class TemplateGenerator(object): def __init__(self, username, password, tenant_name, auth_url, insecure, - region_name=None): + endpoint_type, region_name=None): self.generate_data = False self._setup_templates() self._setup_managers(username, password, tenant_name, auth_url, - insecure, region_name=region_name) + insecure, endpoint_type, region_name=region_name) def _setup_templates(self): self.template = yaml.load(template_skeleton) @@ -120,15 +120,18 @@ class TemplateGenerator(object): self.stack_data['resources'] = {} def _setup_managers(self, username, password, tenant_name, auth_url, - insecure, region_name=None): + insecure, endpoint_type, region_name=None): self.neutron = managers.NeutronManager(username, password, tenant_name, auth_url, insecure, + endpoint_type, region_name=region_name) self.nova = managers.NovaManager(username, password, tenant_name, auth_url, insecure, + endpoint_type, region_name=region_name) self.cinder = managers.CinderManager(username, password, tenant_name, auth_url, insecure, + endpoint_type, region_name=region_name) def extract_vm_details(self, exclude_servers, exclude_volumes, diff --git a/flameclient/managers.py b/flameclient/managers.py index ecc884c..7c8a2b8 100644 --- a/flameclient/managers.py +++ b/flameclient/managers.py @@ -35,22 +35,25 @@ class KeystoneManager(object): _client = None def __init__(self, username, password, project, auth_url, insecure, - region_name=None): + endpoint_type='publicURL', region_name=None): self.username = username self.password = password self.project = project self.auth_url = auth_url self.insecure = insecure self.region_name = region_name + self.endpoint_type = endpoint_type def client(self): if not self._client: - self._client = keystone_client.Client(username=self.username, - password=self.password, - tenant_name=self.project, - auth_url=self.auth_url, - region_name=self.region_name, - insecure=self.insecure) + self._client = keystone_client.Client( + username=self.username, + password=self.password, + tenant_name=self.project, + auth_url=self.auth_url, + region_name=self.region_name, + insecure=self.insecure, + endpoint_type=self.endpoint_type) return self._client def set_client(self, client): @@ -72,22 +75,25 @@ class NeutronManager(object): _project_id = None def __init__(self, username, password, project, auth_url, insecure, - region_name=None): + endpoint_type='publicURL', region_name=None): self.username = username self.password = password self.project = project self.auth_url = auth_url self.insecure = insecure + self.endpoint_type = endpoint_type self.region_name = region_name def client(self): if not self._client: - self._client = neutron_client.Client(username=self.username, - password=self.password, - tenant_name=self.project, - auth_url=self.auth_url, - region_name=self.region_name, - insecure=self.insecure) + self._client = neutron_client.Client( + username=self.username, + password=self.password, + tenant_name=self.project, + auth_url=self.auth_url, + region_name=self.region_name, + insecure=self.insecure, + endpoint_type=self.endpoint_type) if not self._project_id: keystone_mgr = KeystoneManager(self.username, self.password, self.project, self.auth_url, @@ -138,20 +144,22 @@ class NovaManager(object): _client = None def __init__(self, username, password, project, auth_url, insecure, - region_name=None): + endpoint_type='publicURL', region_name=None): self.username = username self.password = password self.project = project self.auth_url = auth_url self.region_name = region_name self.insecure = insecure + self.endpoint_type = endpoint_type def client(self): if not self._client: self._client = nova_client.Client(self.username, self.password, self.project, self.auth_url, region_name=self.region_name, - insecure=self.insecure) + insecure=self.insecure, + endpoint_type=self.endpoint_type) return self._client def set_client(self, client): @@ -184,7 +192,7 @@ class CinderManager(object): _client = None def __init__(self, username, password, project, auth_url, insecure, - region_name=None): + endpoint_type='publicURL', region_name=None): self.username = username self.password = password self.project = project @@ -192,6 +200,7 @@ class CinderManager(object): self.region_name = region_name self.insecure = insecure self.defined = True + self.endpoint_type = endpoint_type def client(self): if self.defined and not self._client: @@ -200,7 +209,8 @@ class CinderManager(object): self.project, self.auth_url, region_name=self.region_name, - insecure=self.insecure) + insecure=self.insecure, + endpoint_type=self.endpoint_type) # Check cinder endpoint existence try: diff --git a/flameclient/tests/test_flame.py b/flameclient/tests/test_flame.py index b11e680..11ee905 100644 --- a/flameclient/tests/test_flame.py +++ b/flameclient/tests/test_flame.py @@ -246,7 +246,8 @@ class BaseTestCase(base.TestCase): super(BaseTestCase, self).tearDown() def get_generator(self, exclude_servers, exclude_volumes, generate_data): - generator = flame.TemplateGenerator('x', 'x', 'x', 'x', True) + generator = flame.TemplateGenerator('x', 'x', 'x', 'x', True, + 'publicURL') generator.extract_vm_details(exclude_servers, exclude_volumes, generate_data) return generator