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'