diff --git a/Puppetfile b/Puppetfile index 389c89ace..82dc8f430 100644 --- a/Puppetfile +++ b/Puppetfile @@ -147,7 +147,7 @@ mod 'module-data', :git => 'https://github.com/ripienaar/puppet-module-data.git' mod 'mongodb', - :commit => '3bcfc75229c4faffe5ccfe9caf1278a54ef0f7cc', + :commit => 'b25bdb3ce7dcb3e60a4427806fe72cc93625de13', :git => 'https://github.com/puppetlabs/puppetlabs-mongodb.git' mod 'mysql', 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/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 70b6f6c97..aa9a99e33 100644 --- a/mongodb/manifests/repo.pp +++ b/mongodb/manifests/repo.pp @@ -16,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/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 eeb093740..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 @@ -32,8 +34,9 @@ context 'when yumrepo has a proxy set' do let :facts do { - :osfamily => 'RedHat', - :operatingsystem => 'RedHat', + :osfamily => 'RedHat', + :operatingsystem => 'RedHat', + :operatingsystemrelease => '7.0', } end let :params do