Add ability to override endpoint creation
For new endpoint creation, only there's no endpoint with the same region name and service id existing, the creation will be executed. closes-Bug: #1313690 Change-Id: Ib287f92f1ac9e75fb258381efe387a083d11efc6
This commit is contained in:
parent
a91bdc2064
commit
dd87c05741
|
@ -61,16 +61,25 @@ end
|
|||
private
|
||||
|
||||
def identity_uuid(resource, type, key, value, args = {}, uuid_field = 'id') # rubocop: disable ParameterLists
|
||||
rc = nil
|
||||
begin
|
||||
output = identity_command resource, "#{type}-list", args
|
||||
output = prettytable_to_array(output)
|
||||
output.each do |obj|
|
||||
return obj[uuid_field] if obj.key?(uuid_field) && obj[key] == value
|
||||
end
|
||||
rc = (type == 'endpoint') ? (search_uuid(output, uuid_field, key => value, 'region' => resource.endpoint_region)) : (search_uuid(output, uuid_field, key => value))
|
||||
rescue RuntimeError => e
|
||||
raise "Could not lookup uuid for #{type}:#{key}=>#{value}. Error was #{e.message}"
|
||||
end
|
||||
nil
|
||||
rc
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def search_uuid(output, uuid_field, required_hash = {})
|
||||
rc = nil
|
||||
output.each do |obj|
|
||||
rc = obj[uuid_field] if obj.key?(uuid_field) && required_hash.values - obj.values_at(*required_hash.keys) == []
|
||||
end
|
||||
rc
|
||||
end
|
||||
|
||||
action :create_service do
|
||||
|
|
|
@ -172,6 +172,55 @@ describe 'openstack-identity::default' do
|
|||
expect(resource).to_not be_updated
|
||||
end
|
||||
end
|
||||
|
||||
context '#identity_uuid, when service id for Region One already exist' do
|
||||
before do
|
||||
output = ' | 000d9c447d124754a197fc612f9d63d7 | Region One | http://public | http://internal | http://admin | f9511a66e0484f3dbd1584065e8bab1c '
|
||||
output_array = [{ 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region One', 'publicurl' => 'http://public', 'internalurl' => 'http://internal', 'adminurl' => 'http://admin', 'service_id' => 'f9511a66e0484f3dbd1584065e8bab1c' }]
|
||||
provider.stub(:identity_command)
|
||||
.with(resource, 'endpoint-list', {})
|
||||
.and_return(output)
|
||||
provider.stub(:prettytable_to_array)
|
||||
.with(output)
|
||||
.and_return(output_array)
|
||||
end
|
||||
|
||||
it 'endpoint uuid should be returned' do
|
||||
provider.send(:identity_uuid, resource, 'endpoint', 'service_id', 'f9511a66e0484f3dbd1584065e8bab1c').should eq('000d9c447d124754a197fc612f9d63d7')
|
||||
end
|
||||
end
|
||||
|
||||
context '#identity_uuid, when service id for Region Two does not exist' do
|
||||
before do
|
||||
output = ' | 000d9c447d124754a197fc612f9d63d7 | Region Two | http://public | http://internal | http://admin | f9511a66e0484f3dbd1584065e8bab1c '
|
||||
output_array = [{ 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region Two', 'publicurl' => 'http://public', 'internalurl' => 'http://internal', 'adminurl' => 'http://admin', 'service_id' => 'f9511a66e0484f3dbd1584065e8bab1c' }]
|
||||
provider.stub(:identity_command)
|
||||
.with(resource, 'endpoint-list', {})
|
||||
.and_return(output)
|
||||
provider.stub(:prettytable_to_array)
|
||||
.with(output)
|
||||
.and_return(output_array)
|
||||
end
|
||||
|
||||
it 'no endpoint uuid should be returned' do
|
||||
provider.send(:identity_uuid, resource, 'endpoint', 'service_id', 'f9511a66e0484f3dbd1584065e8bab1c').should eq(nil)
|
||||
end
|
||||
end
|
||||
|
||||
context '#search_uuid' do
|
||||
it 'required_hash only has key id' do
|
||||
output_array = [{ 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region Two', 'publicurl' => 'http://public' }]
|
||||
provider.send(:search_uuid, output_array, 'id' , 'id' => '000d9c447d124754a197fc612f9d63d7').should eq('000d9c447d124754a197fc612f9d63d7')
|
||||
provider.send(:search_uuid, output_array, 'id' , 'id' => 'abc').should eq(nil)
|
||||
end
|
||||
|
||||
it 'required_hash has key id and region' do
|
||||
output_array = [{ 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region Two', 'publicurl' => 'http://public' }]
|
||||
provider.send(:search_uuid, output_array, 'id' , 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region Two').should eq('000d9c447d124754a197fc612f9d63d7')
|
||||
provider.send(:search_uuid, output_array, 'id' , 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region One').should eq(nil)
|
||||
provider.send(:search_uuid, output_array, 'id' , 'id' => '000d9c447d124754a197fc612f9d63d7', 'region' => 'Region Two', 'key' => 'value').should eq(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'catalog.backend is templated' do
|
||||
|
|
Loading…
Reference in New Issue