From 6beefeabd0a2e0ae93e2f934f9ececfc2046f92a Mon Sep 17 00:00:00 2001 From: Alexey Deryugin Date: Fri, 28 Aug 2015 18:02:08 +0300 Subject: [PATCH] Client and dashboard class implementation Change-Id: Ie16be0d3707611279f0e782b33827de180143f14 --- manifests/client.pp | 23 +++++ manifests/dashboard.pp | 115 +++++++++++++++++++++++++ spec/classes/murano_client_spec.rb | 22 +++++ spec/classes/murano_dashboard_spec.rb | 116 ++++++++++++++++++++++++++ templates/local_settings.py.erb | 8 ++ 5 files changed, 284 insertions(+) create mode 100644 manifests/client.pp create mode 100644 manifests/dashboard.pp create mode 100644 spec/classes/murano_client_spec.rb create mode 100644 spec/classes/murano_dashboard_spec.rb create mode 100644 templates/local_settings.py.erb diff --git a/manifests/client.pp b/manifests/client.pp new file mode 100644 index 0000000..b6036f3 --- /dev/null +++ b/manifests/client.pp @@ -0,0 +1,23 @@ +# == Class: murano::client +# +# murano client package +# +# === Parameters +# +# [*package_ensure*] +# (Optional) Ensure state for package +# Defaults to 'present' +# +class murano::client( + $package_ensure = 'present', +) { + + include ::murano::params + + package { 'python-muranoclient': + ensure => $package_ensure, + name => $::murano::params::pythonclient_package_name, + tag => ['openstack', 'murano-packages'], + } + +} diff --git a/manifests/dashboard.pp b/manifests/dashboard.pp new file mode 100644 index 0000000..598bcea --- /dev/null +++ b/manifests/dashboard.pp @@ -0,0 +1,115 @@ +# == Class: murano::dashboard +# +# murano dashboard package +# +# === Parameters +# +# [*package_ensure*] +# (Optional) Ensure state for package +# Defaults to 'present' +# +# [*api_url*] +# (Optional) API url for murano-dashboard +# Defaults to 'http://127.0.0.1:8082' +# +# [*repo_url*] +# (Optional) Application repository URL for murano-dashboard +# Defaults to 'undef' +# +# [*collect_static_script*] +# (Optional) Path to horizon manage utility +# Defaults to '/usr/share/openstack-dashboard/manage.py' +# +# [*metadata_dir*] +# (Optional) Directory to store murano dashboard metadata cache +# Defaults to '/var/cache/muranodashboard-cache' +# +# [*max_file_size*] +# (Optional) Maximum allowed filesize to upload +# Defaults to '5' +# +# [*dashboard_debug_level*] +# (Optional) Murano dashboard logging level +# Defaults to 'DEBUG' +# +# [*client_debug_level*] +# (Optional) Murano client logging level +# Defaults to 'ERROR' +# +class murano::dashboard( + $package_ensure = 'present', + $api_url = 'http://127.0.0.1:8082', + $repo_url = undef, + $collect_static_script = '/usr/share/openstack-dashboard/manage.py', + $metadata_dir = '/var/cache/muranodashboard-cache', + $max_file_size = '5', + $dashboard_debug_level = 'DEBUG', + $client_debug_level = 'ERROR', +) { + + include ::murano::params + + package { 'murano-dashboard': + ensure => $package_ensure, + name => $::murano::params::dashboard_package_name, + tag => ['openstack', 'murano-packages'], + } + + concat { $::murano::params::local_settings_path: } + + concat::fragment { 'original_config': + target => $::murano::params::local_settings_path, + source => $::murano::params::local_settings_path, + order => 1, + } + + concat::fragment { 'murano_dashboard_section': + target => $::murano::params::local_settings_path, + content => template('murano/local_settings.py.erb'), + order => 2, + } + + exec { 'clean_horizon_config': + command => "sed -e '/^## MURANO_CONFIG_BEGIN/,/^## MURANO_CONFIG_END ##/ d' -i ${::murano::params::local_settings_path}", + onlyif => "grep '^## MURANO_CONFIG_BEGIN' ${::murano::params::local_settings_path}", + path => [ '/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/' ], + } + + exec { 'django_collectstatic': + command => "${collect_static_script} collectstatic --noinput --clear", + environment => [ + "APACHE_USER=${::apache::params::user}", + "APACHE_GROUP=${::apache::params::group}", + ], + refreshonly => true, + } + + exec { 'django_compressstatic': + command => "${collect_static_script} compress --force", + environment => [ + "APACHE_USER=${::apache::params::user}", + "APACHE_GROUP=${::apache::params::group}", + ], + refreshonly => true, + } + + exec { 'django_syncdb': + command => "${collect_static_script} syncdb --noinput", + environment => [ + "APACHE_USER=${::apache::params::user}", + "APACHE_GROUP=${::apache::params::group}", + ], + refreshonly => true, + } + + Package['murano-dashboard'] -> + Exec['clean_horizon_config'] -> + Concat[$::murano::params::local_settings_path] -> + Service <| title == 'httpd' |> + + Package['murano-dashboard'] ~> + Exec['django_collectstatic'] ~> + Exec['django_compressstatic'] ~> + Exec['django_syncdb'] ~> + Service <| title == 'httpd' |> +} diff --git a/spec/classes/murano_client_spec.rb b/spec/classes/murano_client_spec.rb new file mode 100644 index 0000000..eb231cb --- /dev/null +++ b/spec/classes/murano_client_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe 'murano::client' do + + shared_examples_for 'murano-client' do + it { is_expected.to contain_class('murano::client') } + it { is_expected.to contain_package('python-muranoclient').with( + :name => 'python-muranoclient', + )} + end + + context 'on Debian platforms' do + let :facts do + { + :osfamily => 'Debian', + :operatingsystem => 'Debian' + } + end + + it_configures 'murano-client' + end +end diff --git a/spec/classes/murano_dashboard_spec.rb b/spec/classes/murano_dashboard_spec.rb new file mode 100644 index 0000000..62543e9 --- /dev/null +++ b/spec/classes/murano_dashboard_spec.rb @@ -0,0 +1,116 @@ +require 'spec_helper' + +describe 'murano::dashboard' do + + let :facts do { + :osfamily => 'Debian', + } end + + shared_examples_for 'with default class parameters' do + it { is_expected.to contain_package('murano-dashboard').with({ + :ensure => 'present', + :name => 'python-murano-dashboard', + })} + + it { is_expected.to contain_concat('/etc/openstack-dashboard/local_settings.py')} + it { is_expected.to contain_concat__fragment('original_config').with({ + :target => '/etc/openstack-dashboard/local_settings.py', + :source => '/etc/openstack-dashboard/local_settings.py', + :order => 1, + })} + + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with({ + :target => '/etc/openstack-dashboard/local_settings.py', + :order => 2, + })} + + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/MURANO_API_URL = 'http:\/\/127.0.0.1:8082'/)} + it { is_expected.to_not contain_concat__fragment('murano_dashboard_section').with_content(/MURANO_REPO_URL = /)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/MAX_FILE_SIZE_MB = '5'/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/METADATA_CACHE_DIR = '\/var\/cache\/muranodashboard-cache'/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/LOGGING\['loggers'\]\['muranodashboard'\] = \{'handlers': \['syslog'\], 'level': 'DEBUG'\}/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/LOGGING\['loggers'\]\['muranoclient'\] = \{'handlers': \['syslog'\], 'level': 'ERROR'\}/)} + + it { is_expected.to contain_exec('clean_horizon_config').with({ + :command => 'sed -e \'/^## MURANO_CONFIG_BEGIN/,/^## MURANO_CONFIG_END ##/ d\' -i /etc/openstack-dashboard/local_settings.py', + :onlyif => 'grep \'^## MURANO_CONFIG_BEGIN\' /etc/openstack-dashboard/local_settings.py', + })} + + it { is_expected.to contain_exec('django_collectstatic').with({ + :command => '/usr/share/openstack-dashboard/manage.py collectstatic --noinput --clear' + })} + + it { is_expected.to contain_exec('django_compressstatic').with({ + :command => '/usr/share/openstack-dashboard/manage.py compress --force' + })} + + it { is_expected.to contain_exec('django_syncdb').with({ + :command => '/usr/share/openstack-dashboard/manage.py syncdb --noinput' + })} + end + + shared_examples_for 'with parameters override' do + let :params do { + :api_url => 'http://127.0.0.1:8083', + :repo_url => 'http://storage.apps.openstack.com', + :collect_static_script => '/bin/openstack-dashboard/manage.py', + :metadata_dir => '/tmp/muranodashboard-cache', + :max_file_size => '5', + } + end + + it { is_expected.to contain_package('murano-dashboard').with({ + :ensure => 'present', + :name => 'python-murano-dashboard', + })} + + it { is_expected.to contain_concat('/etc/openstack-dashboard/local_settings.py')} + it { is_expected.to contain_concat__fragment('original_config').with({ + :target => '/etc/openstack-dashboard/local_settings.py', + :source => '/etc/openstack-dashboard/local_settings.py', + :order => 1, + })} + + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with({ + :target => '/etc/openstack-dashboard/local_settings.py', + :order => 2, + })} + + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/MURANO_API_URL = 'http:\/\/127.0.0.1:8083'/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/MURANO_REPO_URL = 'http:\/\/storage.apps.openstack.com'/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/MAX_FILE_SIZE_MB = '5'/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/METADATA_CACHE_DIR = '\/tmp\/muranodashboard-cache'/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/LOGGING\['loggers'\]\['muranodashboard'\] = \{'handlers': \['syslog'\], 'level': 'DEBUG'\}/)} + it { is_expected.to contain_concat__fragment('murano_dashboard_section').with_content(/LOGGING\['loggers'\]\['muranoclient'\] = \{'handlers': \['syslog'\], 'level': 'ERROR'\}/)} + + it { is_expected.to contain_exec('clean_horizon_config').with({ + :command => 'sed -e \'/^## MURANO_CONFIG_BEGIN/,/^## MURANO_CONFIG_END ##/ d\' -i /etc/openstack-dashboard/local_settings.py', + :onlyif => 'grep \'^## MURANO_CONFIG_BEGIN\' /etc/openstack-dashboard/local_settings.py', + })} + + it { is_expected.to contain_exec('django_collectstatic').with({ + :command => '/bin/openstack-dashboard/manage.py collectstatic --noinput --clear' + })} + + it { is_expected.to contain_exec('django_compressstatic').with({ + :command => '/bin/openstack-dashboard/manage.py compress --force' + })} + + it { is_expected.to contain_exec('django_syncdb').with({ + :command => '/bin/openstack-dashboard/manage.py syncdb --noinput' + })} + end + + context 'on Debian platforms' do + let :facts do + { + :osfamily => 'Debian', + :operatingsystem => 'Debian', + :concat_basedir => '/var/lib/puppet/concat' + } + end + + it_configures 'with default class parameters' + it_configures 'with parameters override' + end +end diff --git a/templates/local_settings.py.erb b/templates/local_settings.py.erb new file mode 100644 index 0000000..7fbf921 --- /dev/null +++ b/templates/local_settings.py.erb @@ -0,0 +1,8 @@ +## MURANO_CONFIG_BEGIN ## +MURANO_API_URL = '<%= @api_url %>' +<% if @repo_url != nil %>MURANO_REPO_URL = '<%= @repo_url %>'<% end %> +MAX_FILE_SIZE_MB = '<%= @max_file_size %>' +METADATA_CACHE_DIR = '<%= @metadata_dir %>' +LOGGING['loggers']['muranodashboard'] = {'handlers': ['syslog'], 'level': '<%= @dashboard_debug_level %>'} +LOGGING['loggers']['muranoclient'] = {'handlers': ['syslog'], 'level': '<%= @client_debug_level %>'} +## MURANO_CONFIG_END ##