
This patch allows to customize sysctl values on all nodes, by defining the values in Hiera directly. Change-Id: Iab8b2f8559d6748f77630d68c48aebed90cf07ec
254 lines
6.7 KiB
Puppet
254 lines
6.7 KiB
Puppet
#
|
|
# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
# == Class: cloud
|
|
#
|
|
# Installs the system requirements
|
|
#
|
|
# === Parameters:
|
|
#
|
|
# [*rhn_registration*]
|
|
# (optional) The RedHat network authentication token
|
|
# Defaults to undef
|
|
#
|
|
# [*root_password*]
|
|
# (optional) Unix root password
|
|
# Defaults to 'root'
|
|
#
|
|
# [*dns_ips*]
|
|
# (optional) Hostname or IP of the Domain Name Server (dns) used
|
|
# Should by an array.
|
|
# Defaults to google public dns ['8.8.8.8', '8.8.4.4']
|
|
#
|
|
# [*site_domain*]
|
|
# (optional) Domain name (used for search and domain fields
|
|
# of resolv.conf configuration file
|
|
# Defaults to 'mydomain'
|
|
#
|
|
# [*motd_title*]
|
|
# (optional) A string used in the top of the server's motd
|
|
# Defaults to 'eNovance IT Operations'
|
|
#
|
|
# [*selinux_mode*]
|
|
# (optional) SELinux mode the system should be in
|
|
# Defaults to 'permissive'
|
|
# Possible values : disabled, permissive, enforcing
|
|
#
|
|
# [*selinux_directory*]
|
|
# (optional) Path where to find the SELinux modules
|
|
# Defaults to '/usr/share/selinux'
|
|
#
|
|
# [*selinux_booleans*]
|
|
# (optional) Set of booleans to persistently enables
|
|
# SELinux booleans are the one getsebool -a returns
|
|
# Defaults []
|
|
# Example: ['rsync_full_access', 'haproxy_connect_any']
|
|
#
|
|
# [*selinux_modules*]
|
|
# (optional) Set of modules to load on the system
|
|
# Defaults []
|
|
# Example: ['module1', 'module2']
|
|
# Note: Those module should be in the $directory path
|
|
#
|
|
# [*limits*]
|
|
# (optional) Set of limits to set in /etc/security/limits.d/
|
|
# Defaults {}
|
|
# Example:
|
|
# {
|
|
# 'mysql_nofile' => {
|
|
# 'ensure' => 'present',
|
|
# 'user' => 'mysql',
|
|
# 'limit_type' => 'nofile',
|
|
# 'both' => '16384',
|
|
# },
|
|
# }
|
|
#
|
|
# [*sysctl*]
|
|
# (optional) Set of sysctl values to set.
|
|
# Defaults {}
|
|
# Example:
|
|
# {
|
|
# 'net.ipv4.ip_forward' => {
|
|
# 'value' => '1',
|
|
# },
|
|
# 'net.ipv6.conf.all.forwarding => {
|
|
# 'value' => '1',
|
|
# },
|
|
# }
|
|
#
|
|
# [*manage_firewall*]
|
|
# (optional) Completely enable or disable firewall settings
|
|
# (false means disabled, and true means enabled)
|
|
# Defaults to false
|
|
#
|
|
# [*firewall_rules*]
|
|
# (optional) Allow to add custom firewall rules
|
|
# Should be an hash.
|
|
# Default to {}
|
|
#
|
|
# [*purge_firewall_rules*]
|
|
# (optional) Boolean, purge all firewall resources
|
|
# Defaults to false
|
|
#
|
|
# [*firewall_pre_extras*]
|
|
# (optional) Allow to add custom parameters to firewall rules (pre stage)
|
|
# Should be an hash.
|
|
# Default to {}
|
|
#
|
|
# [*firewall_post_extras*]
|
|
# (optional) Allow to add custom parameters to firewall rules (post stage)
|
|
# Should be an hash.
|
|
# Default to {}
|
|
#
|
|
class cloud(
|
|
$rhn_registration = undef,
|
|
$root_password = 'root',
|
|
$dns_ips = ['8.8.8.8', '8.8.4.4'],
|
|
$site_domain = 'mydomain',
|
|
$motd_title = 'eNovance IT Operations',
|
|
$selinux_mode = 'permissive',
|
|
$selinux_directory = '/usr/share/selinux',
|
|
$selinux_booleans = [],
|
|
$selinux_modules = [],
|
|
$limits = {},
|
|
$sysctl = {},
|
|
$manage_firewall = false,
|
|
$firewall_rules = {},
|
|
$purge_firewall_rules = false,
|
|
$firewall_pre_extras = {},
|
|
$firewall_post_extras = {},
|
|
) {
|
|
|
|
include ::stdlib
|
|
|
|
if ! ($::osfamily in [ 'RedHat', 'Debian' ]) {
|
|
fail("OS family unsuppored yet (${::osfamily}), module puppet-openstack-cloud only support RedHat or Debian")
|
|
}
|
|
|
|
# motd
|
|
file
|
|
{
|
|
'/etc/motd':
|
|
ensure => file,
|
|
mode => '0644',
|
|
content => "
|
|
############################################################################
|
|
# ${motd_title} #
|
|
############################################################################
|
|
# #
|
|
# *** RESTRICTED ACCESS *** #
|
|
# Only the authorized users may access this system. #
|
|
# Any attempted unauthorized access or any action affecting this computer #
|
|
# system is punishable by the law of local country. #
|
|
# #
|
|
############################################################################
|
|
This node is under the control of Puppet ${::puppetversion}.
|
|
";
|
|
}
|
|
|
|
# DNS
|
|
class { 'dnsclient':
|
|
nameservers => $dns_ips,
|
|
domain => $site_domain
|
|
}
|
|
|
|
# Sudo
|
|
include ::sudo
|
|
include ::sudo::configs
|
|
|
|
# NTP
|
|
include ::ntp
|
|
|
|
# Security Limits
|
|
include ::limits
|
|
create_resources('limits::limits', $limits)
|
|
|
|
# sysctl values
|
|
include ::sysctl::base
|
|
create_resources('sysctl::value', $sysctl)
|
|
|
|
# SELinux
|
|
if $::osfamily == 'RedHat' {
|
|
class {'cloud::selinux' :
|
|
mode => $selinux_mode,
|
|
booleans => $selinux_booleans,
|
|
modules => $selinux_modules,
|
|
directory => $selinux_directory,
|
|
stage => 'setup',
|
|
}
|
|
}
|
|
|
|
# Strong root password for all servers
|
|
user { 'root':
|
|
ensure => 'present',
|
|
gid => '0',
|
|
password => $root_password,
|
|
uid => '0',
|
|
}
|
|
|
|
$cron_service_name = $::osfamily ? {
|
|
'RedHat' => 'crond',
|
|
default => 'cron',
|
|
}
|
|
|
|
service { 'cron':
|
|
ensure => running,
|
|
name => $cron_service_name,
|
|
enable => true
|
|
}
|
|
|
|
if $::osfamily == 'RedHat' and $rhn_registration {
|
|
create_resources('rhn_register', {
|
|
"rhn-${::hostname}" => $rhn_registration
|
|
} )
|
|
}
|
|
|
|
if $manage_firewall {
|
|
|
|
# Only purges IPv4 rules
|
|
if $purge_firewall_rules {
|
|
resources { 'firewall':
|
|
purge => true
|
|
}
|
|
}
|
|
|
|
# anyone can add your own rules
|
|
# example with Hiera:
|
|
#
|
|
# cloud::firewall::rules:
|
|
# '300 allow custom application 1':
|
|
# port: 999
|
|
# proto: udp
|
|
# action: accept
|
|
# '301 allow custom application 2':
|
|
# port: 8081
|
|
# proto: tcp
|
|
# action: accept
|
|
#
|
|
create_resources('cloud::firewall::rule', $firewall_rules)
|
|
|
|
ensure_resource('class', 'cloud::firewall::pre', {
|
|
'firewall_settings' => $firewall_pre_extras,
|
|
'stage' => 'setup',
|
|
})
|
|
|
|
ensure_resource('class', 'cloud::firewall::post', {
|
|
'stage' => 'runtime',
|
|
'firewall_settings' => $firewall_post_extras,
|
|
})
|
|
}
|
|
|
|
}
|