add possibility to specify certificates from source
Currently ca/cert/key content needs to be specified as parameter content. With this patch they can also be specified as a source file. Change-Id: I1336c917cd5f4220334d5b0958c33fc4ca86df70
This commit is contained in:
@@ -68,21 +68,39 @@
|
||||
# Defaults to $facts['os_service_default']
|
||||
#
|
||||
# [*ca_certificate_data*]
|
||||
# (Optional) CA certificate for Octavia
|
||||
# (Optional) Data CA certificate for Octavia
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*ca_certificate_source*]
|
||||
# (Optional) Source file for CA certificate for Octavia
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*ca_private_key_data*]
|
||||
# (Optional) CA private key for signing certificates
|
||||
# (Optional) Data CA private key for signing certificates
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*ca_private_key_source*]
|
||||
# (Optional) Source file for CA private key for signing certificates
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*client_ca_data*]
|
||||
# (Optional) Client CA certificate.
|
||||
# (Optional) Data for client CA certificate.
|
||||
# You must specify the client_ca parameter where to place this CA
|
||||
# if you give the data here.
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*client_ca_source*]
|
||||
# (Optional) Source for client CA certificate.
|
||||
# You must specify the client_ca parameter where to place this CA
|
||||
# if you give the data here.
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*client_cert_data*]
|
||||
# (Optional) Client certificate used for connecting to amphorae
|
||||
# (Optional) Data for client certificate used for connecting to amphorae
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*client_cert_source*]
|
||||
# (Optional) Source for client certificate used for connecting to amphorae
|
||||
# Defaults to undef
|
||||
#
|
||||
# [*file_permission_owner*]
|
||||
@@ -109,10 +127,14 @@ class octavia::certificates (
|
||||
$cert_validity_time = $facts['os_service_default'],
|
||||
Optional[Stdlib::Absolutepath] $client_ca = undef,
|
||||
Stdlib::Absolutepath $client_cert = '/etc/octavia/certs/client.pem',
|
||||
$ca_certificate_data = undef,
|
||||
$ca_private_key_data = undef,
|
||||
$client_ca_data = undef,
|
||||
$client_cert_data = undef,
|
||||
Optional[String[1]] $ca_certificate_data = undef,
|
||||
Optional[String[1]] $ca_certificate_source = undef,
|
||||
Optional[String[1]] $ca_private_key_data = undef,
|
||||
Optional[String[1]] $ca_private_key_source = undef,
|
||||
Optional[String[1]] $client_ca_data = undef,
|
||||
Optional[String[1]] $client_ca_source = undef,
|
||||
Optional[String[1]] $client_cert_data = undef,
|
||||
Optional[String[1]] $client_cert_source = undef,
|
||||
$file_permission_owner = $::octavia::params::user,
|
||||
$file_permission_group = $::octavia::params::group,
|
||||
) inherits octavia::params {
|
||||
@@ -142,7 +164,7 @@ class octavia::certificates (
|
||||
|
||||
# The file creation will create the parent directory for each file if necessary, but
|
||||
# only to one level.
|
||||
if $ca_certificate_data {
|
||||
if $ca_certificate_data or $ca_certificate_source {
|
||||
ensure_resource('file', dirname($ca_certificate), {
|
||||
ensure => directory,
|
||||
owner => $file_permission_owner,
|
||||
@@ -153,6 +175,7 @@ class octavia::certificates (
|
||||
file { $ca_certificate:
|
||||
ensure => file,
|
||||
content => $ca_certificate_data,
|
||||
source => $ca_certificate_source,
|
||||
group => $file_permission_owner,
|
||||
owner => $file_permission_group,
|
||||
mode => '0640',
|
||||
@@ -162,7 +185,7 @@ class octavia::certificates (
|
||||
}
|
||||
}
|
||||
|
||||
if $ca_private_key_data {
|
||||
if $ca_private_key_data or $ca_private_key_source {
|
||||
ensure_resource('file', dirname($ca_private_key), {
|
||||
ensure => directory,
|
||||
owner => $file_permission_owner,
|
||||
@@ -173,6 +196,7 @@ class octavia::certificates (
|
||||
file { $ca_private_key:
|
||||
ensure => file,
|
||||
content => $ca_private_key_data,
|
||||
source => $ca_private_key_source,
|
||||
group => $file_permission_owner,
|
||||
owner => $file_permission_group,
|
||||
mode => '0640',
|
||||
@@ -182,7 +206,7 @@ class octavia::certificates (
|
||||
}
|
||||
}
|
||||
|
||||
if $client_ca and $client_ca_data {
|
||||
if $client_ca and ( $client_ca_data or $client_ca_source ) {
|
||||
ensure_resource('file', dirname($client_ca), {
|
||||
ensure => directory,
|
||||
owner => $file_permission_owner,
|
||||
@@ -193,6 +217,7 @@ class octavia::certificates (
|
||||
file { $client_ca:
|
||||
ensure => file,
|
||||
content => $client_ca_data,
|
||||
source => $client_ca_source,
|
||||
group => $file_permission_owner,
|
||||
owner => $file_permission_group,
|
||||
mode => '0640',
|
||||
@@ -202,7 +227,7 @@ class octavia::certificates (
|
||||
}
|
||||
}
|
||||
|
||||
if $client_cert_data {
|
||||
if $client_cert_data or $client_cert_source {
|
||||
ensure_resource('file', dirname($client_cert), {
|
||||
ensure => directory,
|
||||
owner => $file_permission_owner,
|
||||
@@ -213,6 +238,7 @@ class octavia::certificates (
|
||||
file { $client_cert:
|
||||
ensure => file,
|
||||
content => $client_cert_data,
|
||||
source => $client_cert_source,
|
||||
group => $file_permission_owner,
|
||||
owner => $file_permission_group,
|
||||
mode => '0640',
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Add possibility to add cert/key/ca as source instead of content parameter
|
||||
@@ -136,6 +136,73 @@ describe 'octavia::certificates' do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when certificates are configured with source provided' do
|
||||
let :params do
|
||||
{ :ca_certificate => '/etc/octavia/ca-from-source.pem',
|
||||
:ca_private_key => '/etc/octavia/key-from-source.pem',
|
||||
:server_certs_key_passphrase => 'insecure-key-but-32-chars-long:)',
|
||||
:ca_private_key_passphrase => 'secure321',
|
||||
:client_cert => '/etc/octavia/client-from-source.pem',
|
||||
:ca_certificate_source => '/tmp/source/ca_certificate_source',
|
||||
:ca_private_key_source => '/tmp/source/ca_private_key_source',
|
||||
:client_cert_source => '/tmp/source/client_cert_source',
|
||||
}
|
||||
end
|
||||
|
||||
it 'configures octavia certificate manager' do
|
||||
is_expected.to contain_octavia_config('certificates/ca_certificate').with_value('/etc/octavia/ca-from-source.pem')
|
||||
is_expected.to contain_octavia_config('certificates/ca_private_key').with_value('/etc/octavia/key-from-source.pem')
|
||||
is_expected.to contain_octavia_config('certificates/server_certs_key_passphrase').with_value('insecure-key-but-32-chars-long:)')
|
||||
is_expected.to contain_octavia_config('certificates/ca_private_key_passphrase').with_value('secure321')
|
||||
end
|
||||
|
||||
it 'configures octavia authentication credentials' do
|
||||
is_expected.to contain_octavia_config('controller_worker/client_ca').with_value('/etc/octavia/ca-from-source.pem')
|
||||
is_expected.to contain_octavia_config('haproxy_amphora/client_cert').with_value('/etc/octavia/client-from-source.pem')
|
||||
is_expected.to contain_octavia_config('haproxy_amphora/server_ca').with_value('/etc/octavia/ca-from-source.pem')
|
||||
end
|
||||
|
||||
it 'populates certificate files' do
|
||||
is_expected.to contain_file('/etc/octavia/ca-from-source.pem').with({
|
||||
'ensure' => 'file',
|
||||
'source' => '/tmp/source/ca_certificate_source',
|
||||
'owner' => 'octavia',
|
||||
'group' => 'octavia',
|
||||
'mode' => '0640',
|
||||
'replace' => true,
|
||||
'show_diff' => false,
|
||||
'tag' => 'octavia-certificate',
|
||||
})
|
||||
is_expected.to contain_file('/etc/octavia/key-from-source.pem').with({
|
||||
'ensure' => 'file',
|
||||
'source' => '/tmp/source/ca_private_key_source',
|
||||
'owner' => 'octavia',
|
||||
'group' => 'octavia',
|
||||
'mode' => '0640',
|
||||
'replace' => true,
|
||||
'show_diff' => false,
|
||||
'tag' => 'octavia-certificate',
|
||||
})
|
||||
is_expected.to contain_file('/etc/octavia/client-from-source.pem').with({
|
||||
'ensure' => 'file',
|
||||
'source' => '/tmp/source/client_cert_source',
|
||||
'owner' => 'octavia',
|
||||
'group' => 'octavia',
|
||||
'mode' => '0640',
|
||||
'replace' => true,
|
||||
'show_diff' => false,
|
||||
'tag' => 'octavia-certificate',
|
||||
})
|
||||
is_expected.to contain_file('/etc/octavia').with({
|
||||
'ensure' => 'directory',
|
||||
'owner' => 'octavia',
|
||||
'group' => 'octavia',
|
||||
'mode' => '0755',
|
||||
'tag' => 'octavia-certificate',
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
context 'when certificates are configured with data provided but different paths' do
|
||||
let :params do
|
||||
{ :ca_certificate => '/etc/octavia/ca.pem',
|
||||
|
||||
Reference in New Issue
Block a user