From 74bcc6babd3eea77568a9881a6d09a9e92b6010f Mon Sep 17 00:00:00 2001 From: Jaume Devesa Date: Wed, 10 Jun 2015 15:41:04 +0200 Subject: [PATCH] Creating the .midonetrc file Introduce rspec tests for this functionality Change-Id: Ib52d2d3d7cfe4301af0f423d186fe01c3590918f --- .fixtures.yml | 7 ++ .gitignore | 1 + Rakefile | 1 + .../midonet_client_conf/ini_setting.rb | 22 ++++++ lib/puppet/type/midonet_client_conf.rb | 29 ++++++++ manifests/midonet_cli.pp | 25 +++++-- metadata.json | 1 + spec/classes/midonet_client_spec.rb | 68 +++++++++++++++++++ spec/spec_helper.rb | 12 ++++ .../default/bats/verify_server.bats | 5 ++ 10 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 .fixtures.yml create mode 100644 lib/puppet/provider/midonet_client_conf/ini_setting.rb create mode 100644 lib/puppet/type/midonet_client_conf.rb create mode 100644 spec/classes/midonet_client_spec.rb create mode 100644 spec/spec_helper.rb diff --git a/.fixtures.yml b/.fixtures.yml new file mode 100644 index 0000000..afa4928 --- /dev/null +++ b/.fixtures.yml @@ -0,0 +1,7 @@ +fixtures: + forge_modules: + apt: + repo: "puppetlabs-apt" + ref: "1.8.0" + stdlib: "puppetlabs-stdlib" + inifile: "puppetlabs-inifile" diff --git a/.gitignore b/.gitignore index 2a32bfd..6e377cd 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ /InstalledFiles **/pkg/ /spec/reports/ +/spec/fixtures/modules/* /test/tmp/ /test/version_tmp/ /tmp/ diff --git a/Rakefile b/Rakefile index c71edc0..1c844cc 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,7 @@ require 'rubygems' require 'puppetlabs_spec_helper/rake_tasks' require 'puppet-lint/tasks/puppet-lint' +require 'rspec/core/rake_task' PuppetLint.configuration.send('disable_80chars') PuppetLint.configuration.send('disable_autoloader_layout') PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"] diff --git a/lib/puppet/provider/midonet_client_conf/ini_setting.rb b/lib/puppet/provider/midonet_client_conf/ini_setting.rb new file mode 100644 index 0000000..24be2a0 --- /dev/null +++ b/lib/puppet/provider/midonet_client_conf/ini_setting.rb @@ -0,0 +1,22 @@ +Puppet::Type.type(:midonet_client_conf).provide( + :ini_setting, + :parent => Puppet::Type.type(:ini_setting).provider(:ruby) +) do + + def section + resource[:name].split('/', 2).first + end + + def setting + resource[:name].split('/', 2).last + end + + def setparator + '=' + end + + def file_path + '/root/.midonetrc' + end + +end diff --git a/lib/puppet/type/midonet_client_conf.rb b/lib/puppet/type/midonet_client_conf.rb new file mode 100644 index 0000000..c6f081a --- /dev/null +++ b/lib/puppet/type/midonet_client_conf.rb @@ -0,0 +1,29 @@ +Puppet::Type.newtype(:midonet_client_conf) do + + ensurable + + newparam(:name, :namevar => true) do + desc 'Section/setting name to manage from .midonetrc' + newvalues(/\S+\/\S+/) + end + + autorequire(:package) do ['python-midonetclient'] end + + newproperty(:value) do + desc 'The value of the setting to be defined.' + munge do |value| + value = value.to_s.strip + value.capitalize! if value =~ /^(true|false)$/i + value + end + + def is_to_s( currentvalue ) + return currentvalue + end + + def should_to_s( newvalue ) + return newvalue + end + end + +end diff --git a/manifests/midonet_cli.pp b/manifests/midonet_cli.pp index 76a5836..9abf70f 100644 --- a/manifests/midonet_cli.pp +++ b/manifests/midonet_cli.pp @@ -30,12 +30,25 @@ # See the License for the specific language governing permissions and # limitations under the License. # -class midonet::midonet_cli { +class midonet::midonet_cli( + $api_endpoint='http://127.0.0.1:8080/midonet-api', + $username='admin', + $password='admin', + $tenant_name='admin', +) { - require midonet::repository + require midonet::repository + + package {'python-midonetclient': + ensure => present, + require => Exec['update-midonet-repos'] + } + + midonet_client_conf { + 'cli/api_url': value => $api_endpoint; + 'cli/username': value => $username; + 'cli/password': value => $password; + 'cli/project_id': value => $tenant_name; + } - package {'python-midonetclient': - ensure => present, - require => Exec['update-midonet-repos'] - } } diff --git a/metadata.json b/metadata.json index de4ff79..c4595b0 100644 --- a/metadata.json +++ b/metadata.json @@ -9,6 +9,7 @@ "issues_url": "https://midonet.atlassian.net/projects/MDT", "dependencies": [ { "name":"ripienaar-module_data","version_requirement":">=0.0.3" }, + { "name": "puppetlabs/inifile", "version_requirement": ">=1.0.0 <2.0.0" }, { "name":"midonet-zookeeper","version_requirement":">=1.0.0" }, { "name":"midonet-cassandra","version_requirement":">=1.0.0" }, { "name":"puppetlabs-apt","version_requirement":">=1.7.0 <2.0.0" }, diff --git a/spec/classes/midonet_client_spec.rb b/spec/classes/midonet_client_spec.rb new file mode 100644 index 0000000..9df8fdd --- /dev/null +++ b/spec/classes/midonet_client_spec.rb @@ -0,0 +1,68 @@ +require 'spec_helper' + +describe 'midonet::midonet_cli' do + + let :pre_condition do + "class {'midonet::repository': + midonet_repo => 'fake', + midonet_openstack_repo => 'fake', + midonet_thirdparty_repo => 'fake', + midonet_stage => 'fake', + openstack_release => 'fake', + midonet_key => '35FEEF2BAD40EA777D0C5BA6FCE340D250F18FCF', + midonet_key_url => 'http://repo.midonet.org/packages.midokura.com' + }" + end + + let :default_params do + { + :api_endpoint => 'http://87.23.43.2:8080/midonet-api', + :username => 'midonet', + :password => 'dummy', + :tenant_name => 'midonet' + } + end + + shared_examples_for 'midonet client' do + let :params do + {} + end + + before do + params.merge!(default_params) + end + + it 'should have the package installed' do + is_expected.to contain_package('python-midonetclient') + end + + it 'should create .midonetrc file' do + is_expected.to contain_midonet_client_conf('cli/api_url').with_value(params[:api_endpoint]) + is_expected.to contain_midonet_client_conf('cli/username').with_value(params[:username]) + is_expected.to contain_midonet_client_conf('cli/password').with_value(params[:password]) + is_expected.to contain_midonet_client_conf('cli/project_id').with_value(params[:tenant_name]) + end + end + + context 'on Debian' do + let :facts do + { + :osfamily => 'Debian', + :lsbdistrelease => '14.04', + :lsbdistid => 'Ubuntu' + } + end + it_configures 'midonet client' + end + + context 'on RedHat' do + let :facts do + { + :osfamily => 'RedHat', + :operatingsystemmajrelease => 7, + } + end + it_configures 'midonet client' + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..1b1e893 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,12 @@ +require 'rspec-puppet' +require 'puppetlabs_spec_helper/module_spec_helper' + + +fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures')) + +RSpec.configure do |c| + c.alias_it_should_behave_like_to :it_configures, 'configures' + c.alias_it_should_behave_like_to :it_raises, 'raises' + c.module_path = File.join(fixture_path, 'modules') + c.manifest_dir = File.join(fixture_path, 'manifests') +end diff --git a/test/integration/default/bats/verify_server.bats b/test/integration/default/bats/verify_server.bats index f1e09cc..adefa79 100644 --- a/test/integration/default/bats/verify_server.bats +++ b/test/integration/default/bats/verify_server.bats @@ -153,3 +153,8 @@ get_distro exit 1; esac } + +@test 'midonetrc file is created' { + run bash -c "file /root/.midonetrc" + [ "$status" -eq 0 ] +}