From a76d3a2eddbf69ee99b11a9362ab37ccc6d027d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20Gagne=CC=81?= Date: Wed, 22 Jan 2014 18:50:53 -0500 Subject: [PATCH] Introduce public_url, internal_url and admin_url This change deprecates the following parameters: - public_protocol (replaced by public_url) - public_address (replaced by public_url) - public_port (replaced by public_url) - internal_address (replaced by internal_url) - internal_port (replaced by internal_url) - admin_address (replaced by admin_url) - admin_port (replaced by admin_url) Add deprecation warnings if any of those values are provided while maintaining full backward compatibility. Closes-bug: #1274979 Change-Id: If5b0ae003726c5a99b3a2e22b2aafe1a178bb170 --- manifests/endpoint.pp | 186 ++++++++++++++++++------- spec/classes/keystone_endpoint_spec.rb | 128 ++++++++--------- 2 files changed, 200 insertions(+), 114 deletions(-) diff --git a/manifests/endpoint.pp b/manifests/endpoint.pp index 5df3d1385..96f2ec159 100644 --- a/manifests/endpoint.pp +++ b/manifests/endpoint.pp @@ -1,72 +1,158 @@ +# == Class: keystone::endpoint # # Creates the auth endpoints for keystone # -# == Parameters +# === Parameters # -# * public_address - public address for keystone endpoint. Optional. Defaults to 127.0.0.1. -# * admin_address - admin address for keystone endpoint. Optional. Defaults to 127.0.0.1. -# * internal_address - internal address for keystone endpoint. Optional. Defaults to 127.0.0.1. -# * public_port - Port for non-admin access to keystone endpoint. Optional. Defaults to 5000. -# * admin_port - Port for admin access to keystone endpoint. Optional. Defaults to 35357. -# * internal_port - Port for internal access to keystone endpoint. Optional. Defaults to 35357. -# * region - Region for endpoint. Optional. Defaults to RegionOne. -# * version - API version for endpoint. Optional. Defaults to v2.0. -# * public_url - public url for keystone endpoint. Optional. Defaults to undef. Overrides & will deprecate other public_ parameters. -# * internal_url - internal url for keystone endpoint. Optional. Defaults to $public_url if undef. Overrides & will deprecate other internal_ parameters. -# * admin_url - admin url for keystone endpoint. Optional. Defaults to undef. Overrides & will deprecate other admin_ parameters. +# [*public_url*] +# (optional) Public url for keystone endpoint. (Defaults to 'http://127.0.0.1:5000') # -# == Sample Usage +# [*internal_url*] +# (optional) Internal url for keystone endpoint. (Defaults to $public_url) # -# class { 'keystone::endpoint': -# :public_address => '154.10.10.23', -# :admin_address => '10.0.0.7', -# :internal_address => '11.0.1.7', -# } +# [*admin_url*] +# (optional) Admin url for keystone endpoint. (Defaults to 'http://127.0.0.1:35357') # +# [*region*] +# (optional) Region for endpoint. (Defaults to 'RegionOne') # -class keystone::endpoint( - $public_address = '127.0.0.1', - $admin_address = '127.0.0.1', - $internal_address = '127.0.0.1', - $public_port = '5000', - $admin_port = '35357', - $internal_port = undef, - $region = 'RegionOne', - $version = 'v2.0', - $public_protocol = 'http', - $public_url = undef, +# [*version*] +# (optional) API version for endpoint. Appended to all endpoint urls. (Defaults to 'v2.0') +# +# [*public_url*] +# (optional) The endpoint's public url. (Defaults to 'http://127.0.0.1:5000') +# This url should *not* contain any version or trailing '/'. +# +# [*admin_url*] +# (optional) The endpoint's admin url. (Defaults to 'http://127.0.0.1:5000') +# This url should *not* contain any version or trailing '/'. +# +# [*internal_url*] +# (optional) The endpoint's internal url. (Defaults to 'http://127.0.0.1:35357') +# This url should *not* contain any version or trailing '/'. +# +# [*public_protocol*] +# (optional) DEPRECATED: Use public_url instead. +# Protocol for public access to keystone endpoint. (Defaults to 'http') +# Setting this parameter overrides public_url parameter. +# +# [*public_address*] +# (optional) DEPRECATED: Use public_url instead. +# Public address for keystone endpoint. (Defaults to '127.0.0.1') +# Setting this parameter overrides public_url parameter. +# +# [*public_port*] +# (optional) DEPRECATED: Use public_url instead. +# Port for non-admin access to keystone endpoint. (Defaults to 5000) +# Setting this parameter overrides public_url parameter. +# +# [*internal_address*] +# (optional) DEPRECATED: Use internal_url instead. +# Internal address for keystone endpoint. (Defaults to '127.0.0.1') +# Setting this parameter overrides internal_url parameter. +# +# [*internal_port*] +# (optional) DEPRECATED: Use internal_url instead. +# Port for internal access to keystone endpoint. (Defaults to $public_port) +# Setting this parameter overrides internal_url parameter. +# +# [*admin_address*] +# (optional) DEPRECATED: Use admin_url instead. +# Admin address for keystone endpoint. (Defaults to '127.0.0.1') +# Setting this parameter overrides admin_url parameter. +# +# [*admin_port*] +# (optional) DEPRECATED: Use admin_url instead. +# Port for admin access to keystone endpoint. (Defaults to 35357) +# Setting this parameter overrides admin_url parameter. +# +# === Deprecation notes +# +# If any value is provided for public_protocol, public_address or public_port parameters, +# public_url will be completely ignored. The same applies for internal and admin parameters. +# +# === Examples +# +# class { 'keystone::endpoint': +# public_url => 'https://154.10.10.23:5000', +# internal_url => 'https://11.0.1.7:5000', +# admin_url => 'https://10.0.1.7:35357', +# } +# +class keystone::endpoint ( + $public_url = 'http://127.0.0.1:5000', $internal_url = undef, - $admin_url = undef, + $admin_url = 'http://127.0.0.1:35357', + $version = 'v2.0', + $region = 'RegionOne', + # DEPRECATED PARAMETERS + $public_protocol = undef, + $public_address = undef, + $public_port = undef, + $internal_address = undef, + $internal_port = undef, + $admin_address = undef, + $admin_port = undef, ) { - if $internal_port == undef { - $internal_port_real = $public_port - } else { - $internal_port_real = $internal_port + if $public_port { + warning('The public_port parameter is deprecated, use public_url instead.') } - if $public_url { - $public_url_real = "${public_url}/${version}" - } else { - $public_url_real = "${public_protocol}://${public_address}:${public_port}/${version}" + if $public_protocol { + warning('The public_protocol parameter is deprecated, use public_url instead.') } - if $internal_url { - $internal_url_real = "${internal_url}/${version}" - } else { - if $public_url { - $internal_url_real = $public_url_real - } else { - $internal_url_real = "http://${internal_address}:${internal_port_real}/${version}" - } + if $public_address { + warning('The public_address parameter is deprecated, use public_url instead.') } - if $admin_url { - $admin_url_real = "${admin_url}/${version}" - } else { - $admin_url_real = "http://${admin_address}:${admin_port}/${version}" + if $internal_address { + warning('The internal_address parameter is deprecated, use internal_url instead.') } + if $internal_port { + warning('The internal_port parameter is deprecated, use internal_url instead.') + } + + if $admin_address { + warning('The admin_address parameter is deprecated, use admin_url instead.') + } + + if $admin_port { + warning('The admin_port parameter is deprecated, use admin_url instead.') + } + + $public_url_real = inline_template('<%= + if (!@public_protocol.nil?) || (!@public_address.nil?) || (!@public_port.nil?) + @public_protocol ||= "http" + @public_address ||= "127.0.0.1" + @public_port ||= "5000" + "#{@public_protocol}://#{@public_address}:#{@public_port}/#{@version}" + else + "#{@public_url}/#{@version}" + end %>') + + $internal_url_real = inline_template('<%= + if (!@internal_address.nil?) || (!@internal_port.nil?) || (!@public_port.nil?) + @internal_address ||= @public_address ||= "127.0.0.1" + @internal_port ||= @public_port ||= "5000" + "http://#{@internal_address}:#{@internal_port}/#{@version}" + elsif (!@internal_url.nil?) + "#{@internal_url}/#{@version}" + else + "#{@public_url}/#{@version}" + end %>') + + $admin_url_real = inline_template('<%= + if (!@admin_address.nil?) || (!@admin_port.nil?) + @admin_address ||= "127.0.0.1" + @admin_port ||= "35357" + "http://#{@admin_address}:#{@admin_port}/#{@version}" + else + "#{@admin_url}/#{@version}" + end %>') + keystone_service { 'keystone': ensure => present, type => 'identity', diff --git a/spec/classes/keystone_endpoint_spec.rb b/spec/classes/keystone_endpoint_spec.rb index 93be75b23..61b596abd 100644 --- a/spec/classes/keystone_endpoint_spec.rb +++ b/spec/classes/keystone_endpoint_spec.rb @@ -10,7 +10,7 @@ describe 'keystone::endpoint' do describe 'with default parameters' do it { should contain_keystone_endpoint('RegionOne/keystone').with( - :ensure => 'present', + :ensure => 'present', :public_url => 'http://127.0.0.1:5000/v2.0', :admin_url => 'http://127.0.0.1:35357/v2.0', :internal_url => 'http://127.0.0.1:5000/v2.0' @@ -20,70 +20,10 @@ describe 'keystone::endpoint' do describe 'with overridden parameters' do let :params do - { - :public_address => '10.0.0.1', - :admin_address => '10.0.0.2', - :internal_address => '10.0.0.3', - :public_port => '23456', - :admin_port => '12345', - :region => 'RegionTwo', - :version => 'v3.0', - } - end - - it { should contain_keystone_endpoint('RegionTwo/keystone').with( - :ensure => 'present', - :public_url => 'http://10.0.0.1:23456/v3.0', - :admin_url => 'http://10.0.0.2:12345/v3.0', - :internal_url => 'http://10.0.0.3:23456/v3.0' - )} - - end - - describe 'with overridden internal port' do - - let :params do - { - :internal_port => '12345' - } - end - - it { should contain_keystone_endpoint('RegionOne/keystone').with( - :ensure => 'present', - :public_url => 'http://127.0.0.1:5000/v2.0', - :admin_url => 'http://127.0.0.1:35357/v2.0', - :internal_url => 'http://127.0.0.1:12345/v2.0' - )} - - end - - describe 'with overriden public and private paths' do - - let :params do - { - :public_url => 'https://identity.some.tld/the/main/endpoint', - :admin_url => 'https://identity-int.some.tld/some/admin/endpoint', - } - end - - it { should contain_keystone_endpoint('RegionOne/keystone').with( - :ensure => 'present', - :public_url => 'https://identity.some.tld/the/main/endpoint/v2.0', - :admin_url => 'https://identity-int.some.tld/some/admin/endpoint/v2.0', - :internal_url => 'https://identity.some.tld/the/main/endpoint/v2.0' - )} - - end - - describe 'with overriden public, private and internal paths and version' do - - let :params do - { - :version => 'v42.6', + { :version => 'v42.6', :public_url => 'https://identity.some.tld/the/main/endpoint', :admin_url => 'https://identity-int.some.tld/some/admin/endpoint', - :internal_url => 'https://identity-int.some.tld/some/internal/endpoint' - } + :internal_url => 'https://identity-int.some.tld/some/internal/endpoint' } end it { should contain_keystone_endpoint('RegionOne/keystone').with( @@ -92,8 +32,68 @@ describe 'keystone::endpoint' do :admin_url => 'https://identity-int.some.tld/some/admin/endpoint/v42.6', :internal_url => 'https://identity-int.some.tld/some/internal/endpoint/v42.6' )} - end + describe 'without internal_url parameter' do + + let :params do + { :public_url => 'https://identity.some.tld/the/main/endpoint' } + end + + it 'internal_url should default to public_url' do + should contain_keystone_endpoint('RegionOne/keystone').with( + :ensure => 'present', + :public_url => 'https://identity.some.tld/the/main/endpoint/v2.0', + :internal_url => 'https://identity.some.tld/the/main/endpoint/v2.0' + ) + end + end + + describe 'with deprecated parameters' do + + let :params do + { :public_address => '10.0.0.1', + :admin_address => '10.0.0.2', + :internal_address => '10.0.0.3', + :public_port => '23456', + :admin_port => '12345', + :region => 'RegionTwo', + :version => 'v3.0' } + end + + it { should contain_keystone_endpoint('RegionTwo/keystone').with( + :ensure => 'present', + :public_url => 'http://10.0.0.1:23456/v3.0', + :admin_url => 'http://10.0.0.2:12345/v3.0', + :internal_url => 'http://10.0.0.3:23456/v3.0' + )} + + describe 'public_address overrides public_url' do + let :params do + { :public_address => '10.0.0.1', + :public_port => '12345', + :public_url => 'http://10.10.10.10:23456/v3.0' } + end + + it { should contain_keystone_endpoint('RegionOne/keystone').with( + :ensure => 'present', + :public_url => 'http://10.0.0.1:12345/v2.0' + )} + end + end + + describe 'with overridden deprecated internal_port' do + + let :params do + { :internal_port => '12345' } + end + + it { should contain_keystone_endpoint('RegionOne/keystone').with( + :ensure => 'present', + :public_url => 'http://127.0.0.1:5000/v2.0', + :admin_url => 'http://127.0.0.1:35357/v2.0', + :internal_url => 'http://127.0.0.1:12345/v2.0' + )} + end end