From 1bbd2fd55fdaf8dda6031f754ae16013fc314962 Mon Sep 17 00:00:00 2001 From: David Andino Date: Thu, 15 Sep 2022 10:20:47 +0200 Subject: [PATCH] Adding new property project_id --- jobs/openstack_cpi/spec | 4 +++- jobs/openstack_cpi/templates/cpi.json.erb | 1 + .../lib/cloud/openstack/cloud.rb | 7 ++++++- .../lib/cloud/openstack/openstack.rb | 15 ++++++++++++++- src/bosh_openstack_cpi/spec/unit/cloud_spec.rb | 13 ++++++++++++- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/jobs/openstack_cpi/spec b/jobs/openstack_cpi/spec index b45e6519..76a85aec 100644 --- a/jobs/openstack_cpi/spec +++ b/jobs/openstack_cpi/spec @@ -24,7 +24,9 @@ properties: openstack.tenant: description: OpenStack tenant name (required for Keystone API V2) openstack.project: - description: OpenStack project name (required for Keystone API V3) + description: OpenStack project name (required for Keystone API V3. Also can be used the project_id property ) + openstack.project_id: + description: OpenStack project id (required for Keystone API V3. Also can be used the project property) openstack.domain: description: OpenStack domain (required for Keystone API V3) openstack.region: diff --git a/jobs/openstack_cpi/templates/cpi.json.erb b/jobs/openstack_cpi/templates/cpi.json.erb index eec19f7d..292b0060 100644 --- a/jobs/openstack_cpi/templates/cpi.json.erb +++ b/jobs/openstack_cpi/templates/cpi.json.erb @@ -31,6 +31,7 @@ if_p('openstack.user_domain_name') { |value| openstack_params['user_domain_name'] = value } if_p('openstack.project_domain_name') { |value| openstack_params['project_domain_name'] = value } if_p('openstack.project') { |value| openstack_params['project'] = value } + if_p('openstack.project_id') { |value| openstack_params['project_id'] = value } if_p('openstack.tenant') { |value| openstack_params['tenant'] = value } if_p('openstack.human_readable_vm_names') { |value| openstack_params['human_readable_vm_names'] = value } diff --git a/src/bosh_openstack_cpi/lib/cloud/openstack/cloud.rb b/src/bosh_openstack_cpi/lib/cloud/openstack/cloud.rb index 97f57671..1019703c 100644 --- a/src/bosh_openstack_cpi/lib/cloud/openstack/cloud.rb +++ b/src/bosh_openstack_cpi/lib/cloud/openstack/cloud.rb @@ -748,6 +748,7 @@ def validate_options auth_url = @options['openstack']['auth_url'] user_domain_name = @options['openstack']['user_domain_name'] project_domain_name = @options['openstack']['project_domain_name'] + project_id = @options['openstack']['project_id'] schema = Membrane::SchemaParser.parse do openstack_options_schema = { 'openstack' => { @@ -778,7 +779,11 @@ def validate_options optional('agent') => Hash, } if Bosh::OpenStackCloud::Openstack.is_v3(auth_url) - openstack_options_schema['openstack']['project'] = String + if project_id + openstack_options_schema['openstack']['project_id'] = String + else + openstack_options_schema['openstack']['project'] = String + end if user_domain_name || project_domain_name openstack_options_schema['openstack']['user_domain_name'] = String openstack_options_schema['openstack']['project_domain_name'] = String diff --git a/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb b/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb index bd2c4dd2..6734466c 100644 --- a/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb +++ b/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb @@ -76,7 +76,19 @@ def with_openstack(retryable: false, ignore_not_found: false) end def project_name - is_v3 ? params[:openstack_project_name] : params[:openstack_tenant] + if is_v3 + # Check if our connection is done through the openstack_project_name + if params.key?(:openstack_project_name) + params[:openstack_project_name] + else + # Then it means that we are using the openstack_project_id + connection = compute + connection.current_tenant['name'] + end + else + # Return the tenant name + params[:openstack_tenant] + end end def use_nova_networking? @@ -257,6 +269,7 @@ def openstack_params(options) openstack_api_key: options['api_key'], openstack_tenant: options['tenant'], openstack_project_name: options['project'], + openstack_project_id: options['project_id'], openstack_domain_name: options['domain'], openstack_user_domain_name: options['user_domain_name'], openstack_project_domain_name: options['project_domain_name'], diff --git a/src/bosh_openstack_cpi/spec/unit/cloud_spec.rb b/src/bosh_openstack_cpi/spec/unit/cloud_spec.rb index 93d837dd..beb3dbe8 100644 --- a/src/bosh_openstack_cpi/spec/unit/cloud_spec.rb +++ b/src/bosh_openstack_cpi/spec/unit/cloud_spec.rb @@ -139,7 +139,7 @@ options['openstack']['auth_url'] = 'http://127.0.0.1:5000/v3' end - it 'raises an error when no project is specified' do + it 'raises an error when no project or project_id is specified' do options['openstack']['domain'] = 'fake_domain' expect { subject } .to raise_error(ArgumentError, @@ -166,6 +166,17 @@ end end + context 'when project_id and domain are specified' do + before do + options['openstack']['project_id'] = 'fake_project_id' + options['openstack']['domain'] = 'fake_domain' + end + + it 'does not raise an error' do + expect { subject }.to_not raise_error + end + end + context 'when project and user_domain_name and project_domain_name are specified' do before do options['openstack']['project'] = 'fake_project'