From 5acd6004f48065ba8747593981a5bc7cd5fdf233 Mon Sep 17 00:00:00 2001 From: Ryan Hallisey Date: Wed, 12 Nov 2014 15:09:31 -0500 Subject: [PATCH] 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. Conflicts: manifests/keystone/auth.pp Change-Id: I73cecc590038fa7d9518453c448bfc243ddedff1 --- examples/ironic.pp | 2 +- manifests/api.pp | 12 +++++++++- manifests/init.pp | 40 ++++++++++++++++++++++---------- manifests/params.pp | 29 +++++++++++++---------- spec/classes/ironic_api_spec.rb | 1 + spec/classes/ironic_init_spec.rb | 9 +++---- 6 files changed, 63 insertions(+), 30 deletions(-) diff --git a/examples/ironic.pp b/examples/ironic.pp index c4096ae7..e80680c7 100644 --- a/examples/ironic.pp +++ b/examples/ironic.pp @@ -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 => { diff --git a/manifests/api.pp b/manifests/api.pp index 6b50a62b..5a8cc2ab 100644 --- a/manifests/api.pp +++ b/manifests/api.pp @@ -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 # @@ -86,6 +90,7 @@ class ironic::api ( $auth_version = false, $admin_tenant_name = 'services', $admin_user = 'ironic', + $neutron_url = false, $admin_password, ) { @@ -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 ( } } - } diff --git a/manifests/init.pp b/manifests/init.pp index ab59b241..7e3ce4e6 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -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') diff --git a/manifests/params.pp b/manifests/params.pp index a9dc9f5a..c1c93c7a 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -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}") diff --git a/spec/classes/ironic_api_spec.rb b/spec/classes/ironic_api_spec.rb index 54c44042..5f3c5eab 100644 --- a/spec/classes/ironic_api_spec.rb +++ b/spec/classes/ironic_api_spec.rb @@ -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 diff --git a/spec/classes/ironic_init_spec.rb b/spec/classes/ironic_init_spec.rb index e7df8bf0..7590a331 100644 --- a/spec/classes/ironic_init_spec.rb +++ b/spec/classes/ironic_init_spec.rb @@ -102,7 +102,8 @@ describe 'ironic' do :owner => 'root', :group => 'ironic', :mode => '0750', - :require => 'Package[ironic]' + :require => 'Package[python-pbr]', + :require => 'Package[ironic-common]' ) end @@ -111,12 +112,12 @@ 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] ) @@ -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'