Fix Ironic modules so services properly run in Juno

Initially, the module was not creating an ironic.conf file and now
it does.  The configurations that are being put into the ironic.conf
file come straight out of the documentation.

The package 'python-pbr' is required and was not being installed
elsewhere so it is installed by the init module.

The ironic-conductor service requires the execution of 'ironic-dbsync'
before it can be active.

In the params module, the 'RedHat' packages and services were named
incorrectly or were otherwise missing.

Change-Id: I73cecc590038fa7d9518453c448bfc243ddedff1
This commit is contained in:
Ryan Hallisey 2014-12-18 20:18:28 -05:00
parent a34629f956
commit f0c76ee82a
6 changed files with 69 additions and 36 deletions

View File

@ -31,7 +31,7 @@ $glance_api_servers = 'glance:9292'
$deploy_kernel = 'glance://deploy_kernel_uuid'
$deploy_ramdisk = 'glance://deploy_ramdisk_uuid'
node db {
node 'db' {
class { 'mysql::server':
config_hash => {

View File

@ -68,6 +68,10 @@
# (optional) The name of the user to create in keystone for use by the ironic services
# Defaults to 'ironic'
#
# [*neutron_url*]
# (optional) The Neutron URL to be used for requests from ironic
# Defaults to false
#
# [*admin_password*]
# (required) The password to set for the ironic admin user in keystone
#
@ -79,13 +83,14 @@ class ironic::api (
$port = '6385',
$max_limit = '1000',
$auth_host = '127.0.0.1',
$auth_port = 35357,
$auth_port = '35357',
$auth_protocol = 'http',
$auth_uri = false,
$auth_admin_prefix = false,
$auth_version = false,
$admin_tenant_name = 'services',
$admin_user = 'ironic',
$neutron_url = false,
$admin_password,
) {
@ -97,8 +102,8 @@ class ironic::api (
# Configure ironic.conf
ironic_config {
'api/host_ip': value => $host_ip;
'api/port': value => $port;
'api/host_ip': value => $host_ip;
'api/port': value => $port;
'api/max_limit': value => $max_limit;
}
@ -127,6 +132,12 @@ class ironic::api (
hasstatus => true,
}
if $neutron_url {
ironic_config { 'neutron/url': value => $neutron_url; }
} else {
ironic_config { 'neutron/url': value => "${auth_protocol}://${auth_host}:9696/"; }
}
if $auth_uri {
ironic_config { 'keystone_authtoken/auth_uri': value => $auth_uri; }
} else {
@ -159,5 +170,4 @@ class ironic::api (
}
}
}

View File

@ -156,25 +156,32 @@ class ironic (
include ironic::params
Package['ironic'] -> Ironic_config<||>
Package['ironic-common'] -> Ironic_config<||>
File {
require => Package['ironic'],
file { '/etc/ironic':
ensure => directory,
require => Package['ironic-common'],
owner => 'root',
group => 'ironic',
mode => '0750',
}
file { '/etc/ironic/ironic.conf':
require => Package['ironic-common'],
owner => 'root',
group => 'ironic',
mode => '0640',
}
file { '/etc/ironic':
ensure => directory,
mode => '0750',
package { 'python-pbr':
ensure => $package_ensure,
name => $::ironic::params::pbr_package,
}
file { '/etc/ironic/ironic.conf': }
package { 'ironic':
ensure => $package_ensure,
name => $::ironic::params::package_name,
package { 'ironic-common':
ensure => $package_ensure,
name => $::ironic::params::common_package_name,
require => Package['python-pbr'],
}
validate_re($database_connection, '(sqlite|mysql|postgresql):\/\/(\S+:\S+@\S+\/\S+)?')
@ -182,7 +189,6 @@ class ironic (
case $database_connection {
/mysql:\/\/\S+:\S+@\S+\/\S+/: {
$database_backend_package = false
require 'mysql::python'
}
/postgresql:\/\/\S+:\S+@\S+\/\S+/: {
$database_backend_package = 'python-psycopg2'
@ -226,6 +232,16 @@ class ironic (
'glance/glance_api_insecure': value => $glance_api_insecure;
}
Ironic_config['database/connection'] ~> Exec['ironic-dbsync']
exec { 'ironic-dbsync':
command => $::ironic::params::dbsync_command,
path => '/usr/bin',
user => 'ironic',
refreshonly => true,
logoutput => on_failure,
}
if $rpc_backend == 'ironic.openstack.common.rpc.impl_kombu' {
if ! $rabbit_password {
fail('When rpc_backend is rabbitmq, you must set rabbit password')

View File

@ -20,22 +20,27 @@
class ironic::params {
$dbsync_command =
'ironic-dbsync --config-file /etc/ironic/ironic.conf'
case $::osfamily {
'RedHat': {
$package_name = 'openstack-ironic'
$api_package = false
$conductor_package = false
$api_service = 'ironic-api'
$conductor_service = 'ironic-conductor'
$client_package = 'python-ironicclient'
$common_package_name = 'openstack-ironic-common'
$api_package = 'openstack-ironic-api'
$api_service = 'openstack-ironic-api'
$conductor_package = 'openstack-ironic-conductor'
$conductor_service = 'openstack-ironic-conductor'
$client_package = 'python-ironicclient'
$pbr_package = 'python-pbr'
}
'Debian': {
$package_name = 'ironic-common'
$api_service = 'ironic-api'
$conductor_service = 'ironic-conductor'
$api_package = 'ironic-api'
$conductor_package = 'ironic-conductor'
$client_package = 'python-ironicclient'
$common_package_name = 'ironic-common'
$api_service = 'ironic-api'
$api_package = 'ironic-api'
$conductor_service = 'ironic-conductor'
$conductor_package = 'ironic-conductor'
$client_package = 'python-ironicclient'
$pbr_package = 'python-pbr'
}
default: {
fail("Unsupported osfamily ${::osfamily}")

View File

@ -66,6 +66,7 @@ describe 'ironic::api' do
should contain_ironic_config('keystone_authtoken/admin_password').with_value(p[:admin_password])
should contain_ironic_config('keystone_authtoken/admin_user').with_value(p[:admin_user])
should contain_ironic_config('keystone_authtoken/auth_uri').with_value('http://127.0.0.1:5000/')
should contain_ironic_config('neutron/url').with_value('http://127.0.0.1:9696/')
end
context 'when overriding parameters' do
@ -74,8 +75,8 @@ describe 'ironic::api' do
:port => '3430',
:host_ip => '127.0.0.1',
:max_limit => '10',
:auth_protocol => 'https',
:auth_host => '1.2.3.4'
:auth_protocol => 'https',
:auth_host => '1.2.3.4'
)
end
it 'should replace default parameter with new value' do

View File

@ -102,7 +102,7 @@ describe 'ironic' do
:owner => 'root',
:group => 'ironic',
:mode => '0750',
:require => 'Package[ironic]'
:require => 'Package[ironic-common]'
)
end
@ -111,14 +111,15 @@ describe 'ironic' do
:owner => 'root',
:group => 'ironic',
:mode => '0640',
:require => 'Package[ironic]'
:require => 'Package[ironic-common]'
)
end
it 'installs ironic package' do
should contain_package('ironic').with(
should contain_package('ironic-common').with(
:ensure => 'present',
:name => platform_params[:common_package_name]
:name => platform_params[:common_package_name],
:require => 'Package[python-pbr]'
)
end
@ -233,7 +234,7 @@ describe 'ironic' do
end
let :platform_params do
{ :common_package_name => 'openstack-ironic' }
{ :common_package_name => 'openstack-ironic-common' }
end
it_configures 'ironic'