diff --git a/Puppetfile b/Puppetfile index 895825747..bb2d1d29f 100644 --- a/Puppetfile +++ b/Puppetfile @@ -147,7 +147,7 @@ mod 'module-data', :git => 'https://github.com/ripienaar/puppet-module-data.git' mod 'mongodb', - :commit => 'a5d6e5d36fb1007534bca85fd277a678e6c5a2ee', + :commit => 'b25bdb3ce7dcb3e60a4427806fe72cc93625de13', :git => 'https://github.com/puppetlabs/puppetlabs-mongodb.git' mod 'mysql', diff --git a/mongodb/CHANGELOG.md b/mongodb/CHANGELOG.md index 57530a055..218d0e911 100644 --- a/mongodb/CHANGELOG.md +++ b/mongodb/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased +### Summary +- support setting a proxy for yum repositories with or without user/password authentication + ## 2015-06-22 - Release 0.11.0 ### Summary diff --git a/mongodb/README.md b/mongodb/README.md index 44fc3ee4a..5753fa888 100644 --- a/mongodb/README.md +++ b/mongodb/README.md @@ -232,6 +232,15 @@ the module will use the default for your OS distro. This setting can be used to override the default MongoDB repository location. If not specified, the module will use the default repository for your OS distro. +#####`repo_proxy` +This will allow you to set a proxy for your repository in case you are behind a corporate firewall. Currently this is only supported with yum repositories + +#####`proxy_username` +This sets the username for the proxyserver, should authentication be required + +#####`proxy_password` +This sets the password for the proxyserver, should authentication be required + ####Class: mongodb::server Most of the parameters manipulate the mongod.conf file. diff --git a/mongodb/lib/puppet/provider/mongodb.rb b/mongodb/lib/puppet/provider/mongodb.rb index 6bbc350b6..f501d6217 100644 --- a/mongodb/lib/puppet/provider/mongodb.rb +++ b/mongodb/lib/puppet/provider/mongodb.rb @@ -28,6 +28,30 @@ def self.get_mongod_conf_file file end + def self.ipv6_is_enabled + file = get_mongod_conf_file + config = YAML.load_file(file) + if config.kind_of?(Hash) + ipv6 = config['net.ipv6'] + else # It has to be a key-value store + config = {} + File.readlines(file).collect do |line| + k,v = line.split('=') + config[k.rstrip] = v.lstrip.chomp if k and v + end + ipv6 = config['ipv6'] + end + ipv6 + end + + def self.mongo_cmd(db, host, cmd) + if ipv6_is_enabled + out = mongo([db, '--quiet', '--ipv6', '--host', host, '--eval', cmd]) + else + out = mongo([db, '--quiet', '--host', host, '--eval', cmd]) + end + end + def self.get_conn_string file = get_mongod_conf_file # The mongo conf is probably a key-value store, even though 2.6 is @@ -55,8 +79,11 @@ def self.get_conn_string if bindip first_ip_in_list = bindip.split(',').first - if first_ip_in_list.eql? '0.0.0.0' + case first_ip_in_list + when '0.0.0.0' ip_real = '127.0.0.1' + when /\[?::0\]?/ + ip_real = '::1' else ip_real = first_ip_in_list end @@ -80,7 +107,8 @@ def self.db_ismaster if mongorc_file cmd_ismaster = mongorc_file + cmd_ismaster end - out = mongo(['admin', '--quiet', '--host', get_conn_string, '--eval', cmd_ismaster]) + db = 'admin' + out = mongo_cmd(db, get_conn_string, cmd_ismaster) out.gsub!(/ObjectId\(([^)]*)\)/, '\1') out.gsub!(/ISODate\((.+?)\)/, '\1 ') out.gsub!(/^Error\:.+/, '') @@ -122,9 +150,9 @@ def self.mongo_eval(cmd, db = 'admin', retries = 10, host = nil) retry_count.times do |n| begin if host - out = mongo([db, '--quiet', '--host', host, '--eval', cmd]) + out = mongo_cmd(db, host, cmd) else - out = mongo([db, '--quiet', '--host', get_conn_string, '--eval', cmd]) + out = mongo_cmd(db, get_conn_string, cmd) end rescue => e Puppet.debug "Request failed: '#{e.message}' Retry: '#{n}'" diff --git a/mongodb/manifests/globals.pp b/mongodb/manifests/globals.pp index 5bb33b9c5..85f418b0b 100644 --- a/mongodb/manifests/globals.pp +++ b/mongodb/manifests/globals.pp @@ -27,6 +27,9 @@ $manage_package_repo = undef, $manage_package = undef, + $repo_proxy = undef, + $proxy_username = undef, + $proxy_password = undef, $repo_location = undef, $use_enterprise_repo = undef, @@ -39,6 +42,7 @@ class { '::mongodb::repo': ensure => present, repo_location => $repo_location, + proxy => $repo_proxy, } } } diff --git a/mongodb/manifests/params.pp b/mongodb/manifests/params.pp index 0926f3946..7f47765b4 100644 --- a/mongodb/manifests/params.pp +++ b/mongodb/manifests/params.pp @@ -22,6 +22,8 @@ $manage_package = pick($mongodb::globals::manage_package, $mongodb::globals::manage_package_repo, false) + $version = $::mongodb::globals::version + # Amazon Linux's OS Family is 'Linux', operating system 'Amazon'. case $::osfamily { 'RedHat', 'Linux': { @@ -29,7 +31,7 @@ if $manage_package { $user = pick($::mongodb::globals::user, 'mongod') $group = pick($::mongodb::globals::group, 'mongod') - if ($::mongodb::globals::version == undef) { + if ($version == undef) { $server_package_name = pick($::mongodb::globals::server_package_name, 'mongodb-org-server') $client_package_name = pick($::mongodb::globals::client_package_name, 'mongodb-org-shell') $mongos_package_name = pick($::mongodb::globals::mongos_package_name, 'mongodb-org-mongos') @@ -38,20 +40,20 @@ $package_ensure_mongos = true } else { # check if the version is greater than 2.6 - if(versioncmp($::mongodb::globals::version, '2.6.0') >= 0) { + if $version and (versioncmp($version, '2.6.0') >= 0) { $server_package_name = pick($::mongodb::globals::server_package_name, 'mongodb-org-server') $client_package_name = pick($::mongodb::globals::client_package_name, 'mongodb-org-shell') $mongos_package_name = pick($::mongodb::globals::mongos_package_name, 'mongodb-org-mongos') - $package_ensure = $::mongodb::globals::version - $package_ensure_client = $::mongodb::globals::version - $package_ensure_mongos = $::mongodb::globals::version + $package_ensure = $version + $package_ensure_client = $version + $package_ensure_mongos = $version } else { $server_package_name = pick($::mongodb::globals::server_package_name, 'mongodb-10gen') $client_package_name = pick($::mongodb::globals::client_package_name, 'mongodb-10gen') $mongos_package_name = pick($::mongodb::globals::mongos_package_name, 'mongodb-10gen') - $package_ensure = $::mongodb::globals::version - $package_ensure_client = $::mongodb::globals::version #this is still needed in case they are only installing the client - $package_ensure_mongos = $::mongodb::globals::version + $package_ensure = $version + $package_ensure_client = $version #this is still needed in case they are only installing the client + $package_ensure_mongos = $version } } $service_name = pick($::mongodb::globals::service_name, 'mongod') @@ -70,14 +72,14 @@ } else { # RedHat/CentOS doesn't come with a prepacked mongodb # so we assume that you are using EPEL repository. - if ($::mongodb::globals::version == undef) { + if ($version == undef) { $package_ensure = true $package_ensure_client = true $package_ensure_mongos = true } else { - $package_ensure = $::mongodb::globals::version - $package_ensure_client = $::mongodb::globals::version - $package_ensure_mongos = $::mongodb::globals::version + $package_ensure = $version + $package_ensure_client = $version + $package_ensure_mongos = $version } $user = pick($::mongodb::globals::user, 'mongodb') $group = pick($::mongodb::globals::group, 'mongodb') @@ -114,7 +116,7 @@ if $manage_package { $user = pick($::mongodb::globals::user, 'mongodb') $group = pick($::mongodb::globals::group, 'mongodb') - if ($::mongodb::globals::version == undef) { + if ($version == undef) { $server_package_name = pick($::mongodb::globals::server_package_name, 'mongodb-org-server') $client_package_name = pick($::mongodb::globals::client_package_name, 'mongodb-org-shell') $mongos_package_name = pick($::mongodb::globals::mongos_package_name, 'mongodb-org-mongos') @@ -125,21 +127,21 @@ $config = '/etc/mongod.conf' } else { # check if the version is greater than 2.6 - if(versioncmp($::mongodb::globals::version, '2.6.0') >= 0) { + if $version and (versioncmp($version, '2.6.0') >= 0) { $server_package_name = pick($::mongodb::globals::server_package_name, 'mongodb-org-server') $client_package_name = pick($::mongodb::globals::client_package_name, 'mongodb-org-shell') $mongos_package_name = pick($::mongodb::globals::mongos_package_name, 'mongodb-org-mongos') - $package_ensure = $::mongodb::globals::version - $package_ensure_client = $::mongodb::globals::version - $package_ensure_mongos = $::mongodb::globals::version + $package_ensure = $version + $package_ensure_client = $version + $package_ensure_mongos = $version $service_name = pick($::mongodb::globals::service_name, 'mongod') $config = '/etc/mongod.conf' } else { $server_package_name = pick($::mongodb::globals::server_package_name, 'mongodb-10gen') $client_package_name = pick($::mongodb::globals::client_package_name, 'mongodb-10gen') $mongos_package_name = pick($::mongodb::globals::mongos_package_name, 'mongodb-10gen') - $package_ensure = $::mongodb::globals::version - $package_ensure_client = $::mongodb::globals::version #this is still needed in case they are only installing the client + $package_ensure = $version + $package_ensure_client = $version #this is still needed in case they are only installing the client $service_name = pick($::mongodb::globals::service_name, 'mongodb') $config = '/etc/mongodb.conf' } @@ -155,14 +157,14 @@ # I would not recommend to use the prepacked # mongodb server on Ubuntu 12.04 or Debian 6/7, # because its really outdated - if ($::mongodb::globals::version == undef) { + if ($version == undef) { $package_ensure = true $package_ensure_client = true $package_ensure_mongos = true } else { - $package_ensure = $::mongodb::globals::version - $package_ensure_client = $::mongodb::globals::version - $package_ensure_mongos = $::mongodb::globals::version + $package_ensure = $version + $package_ensure_client = $version + $package_ensure_mongos = $version } $user = pick($::mongodb::globals::user, 'mongodb') $group = pick($::mongodb::globals::group, 'mongodb') diff --git a/mongodb/manifests/repo.pp b/mongodb/manifests/repo.pp index e117ecc5e..aa9a99e33 100644 --- a/mongodb/manifests/repo.pp +++ b/mongodb/manifests/repo.pp @@ -1,8 +1,11 @@ # PRIVATE CLASS: do not use directly class mongodb::repo ( - $ensure = $mongodb::params::ensure, - $version = $mongodb::params::version, - $repo_location = undef, + $ensure = $mongodb::params::ensure, + $version = $mongodb::params::version, + $repo_location = undef, + $proxy = undef, + $proxy_username = undef, + $proxy_password = undef, ) inherits mongodb::params { case $::osfamily { 'RedHat', 'Linux': { @@ -13,7 +16,7 @@ $location = 'https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/stable/$basearch/' $description = 'MongoDB Enterprise Repository' } - elsif (versioncmp($version, '3.0.0') >= 0) { + elsif $version and (versioncmp($version, '3.0.0') >= 0) { $mongover = split($version, '[.]') $location = $::architecture ? { 'x86_64' => "http://repo.mongodb.org/yum/redhat/${::operatingsystemmajrelease}/mongodb-org/${mongover[0]}.${mongover[1]}/x86_64/", diff --git a/mongodb/manifests/repo/yum.pp b/mongodb/manifests/repo/yum.pp index cc033327f..6046e9a3e 100644 --- a/mongodb/manifests/repo/yum.pp +++ b/mongodb/manifests/repo/yum.pp @@ -5,10 +5,13 @@ if($::mongodb::repo::ensure == 'present' or $::mongodb::repo::ensure == true) { yumrepo { 'mongodb': - descr => $::mongodb::repo::description, - baseurl => $::mongodb::repo::location, - gpgcheck => '0', - enabled => '1', + descr => $::mongodb::repo::description, + baseurl => $::mongodb::repo::location, + gpgcheck => '0', + enabled => '1', + proxy => $::mongodb::repo::proxy, + proxy_username => $::mongodb::repo::proxy_username, + proxy_password => $::mongodb::repo::proxy_password, } Yumrepo['mongodb'] -> Package<|tag == 'mongodb'|> } diff --git a/mongodb/manifests/server/config.pp b/mongodb/manifests/server/config.pp index 6c9df389e..636a12e44 100644 --- a/mongodb/manifests/server/config.pp +++ b/mongodb/manifests/server/config.pp @@ -100,7 +100,7 @@ #Pick which config content to use if $config_content { $cfg_content = $config_content - } elsif (versioncmp($version, '2.6.0') >= 0) { + } elsif $version and (versioncmp($version, '2.6.0') >= 0) { # Template uses: # - $auth # - $bind_ip diff --git a/mongodb/spec/classes/mongos_service_spec.rb b/mongodb/spec/classes/mongos_service_spec.rb index b95582944..41730d0c8 100644 --- a/mongodb/spec/classes/mongos_service_spec.rb +++ b/mongodb/spec/classes/mongos_service_spec.rb @@ -5,8 +5,9 @@ context 'on Debian with service_manage set to true' do let :facts do { - :osfamily => 'Debian', - :operatingsystem => 'Debian', + :osfamily => 'Debian', + :operatingsystem => 'Debian', + :operatingsystemrelease => '7.0', } end @@ -29,8 +30,9 @@ context 'on Debian with service_manage set to false' do let :facts do { - :osfamily => 'Debian', - :operatingsystem => 'Debian', + :osfamily => 'Debian', + :operatingsystem => 'Debian', + :operatingsystemrelease => '7.0', } end @@ -50,8 +52,9 @@ context 'on RedHat with service_manage set to true' do let :facts do { - :osfamily => 'RedHat', - :operatingsystem => 'RedHat', + :osfamily => 'RedHat', + :operatingsystem => 'RedHat', + :operatingsystemrelease => '7.0', } end @@ -78,8 +81,9 @@ context 'on RedHat with service_manage set to false' do let :facts do { - :osfamily => 'RedHat', - :operatingsystem => 'RedHat', + :osfamily => 'RedHat', + :operatingsystem => 'RedHat', + :operatingsystemrelease => '7.0', } end diff --git a/mongodb/spec/classes/repo_spec.rb b/mongodb/spec/classes/repo_spec.rb index ef8b11377..79e14a5cd 100644 --- a/mongodb/spec/classes/repo_spec.rb +++ b/mongodb/spec/classes/repo_spec.rb @@ -5,9 +5,10 @@ context 'when deploying on Debian' do let :facts do { - :osfamily => 'Debian', - :operatingsystem => 'Debian', - :lsbdistid => 'Debian', + :osfamily => 'Debian', + :operatingsystem => 'Debian', + :operatingsystemrelease => '7.0', + :lsbdistid => 'Debian', } end @@ -19,8 +20,9 @@ context 'when deploying on CentOS' do let :facts do { - :osfamily => 'RedHat', - :operatingsystem => 'CentOS', + :osfamily => 'RedHat', + :operatingsystem => 'CentOS', + :operatingsystemrelease => '7.0', } end @@ -29,4 +31,31 @@ } end + context 'when yumrepo has a proxy set' do + let :facts do + { + :osfamily => 'RedHat', + :operatingsystem => 'RedHat', + :operatingsystemrelease => '7.0', + } + end + let :params do + { + :proxy => 'http://proxy-server:8080', + :proxy_username => 'proxyuser1', + :proxy_password => 'proxypassword1', + } + end + it { + is_expected.to contain_class('mongodb::repo::yum') + } + it do + should contain_yumrepo('mongodb').with({ + 'enabled' => '1', + 'proxy' => 'http://proxy-server:8080', + 'proxy_username' => 'proxyuser1', + 'proxy_password' => 'proxypassword1', + }) + end + end end diff --git a/mongodb/templates/mongodb.conf.2.6.erb b/mongodb/templates/mongodb.conf.2.6.erb index 293f8099a..0f1775562 100644 --- a/mongodb/templates/mongodb.conf.2.6.erb +++ b/mongodb/templates/mongodb.conf.2.6.erb @@ -1,6 +1,6 @@ -# mongo.conf - generated from Puppet +#mongo.conf - generated from Puppet -# System Log +#System Log <% if @logpath -%> systemLog.path: <%= @logpath %> @@ -80,7 +80,7 @@ security.javascriptEnabled: <%= @noscripting %> <% end -%> -# Net +#Net <% if @ipv6 -%> net.ipv6=<%= @ipv6 %> <% end -%> @@ -111,7 +111,7 @@ replication.replSetName: <%= @replset %> replication.oplogSizeMB: <%= @oplog_size %> <% end -%> -# Sharding +#Sharding <% if @configsvr -%> sharding.clusterRole: configsvr <% end -%>