simp-cli 1.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/LICENSE +27 -0
- data/README.md +48 -0
- data/Rakefile +142 -0
- data/bin/simp +5 -0
- data/lib/simp/cli.rb +88 -0
- data/lib/simp/cli/commands/bootstrap.rb +275 -0
- data/lib/simp/cli/commands/check.rb +163 -0
- data/lib/simp/cli/commands/cleancerts.rb +114 -0
- data/lib/simp/cli/commands/config.rb +235 -0
- data/lib/simp/cli/commands/doc.rb +14 -0
- data/lib/simp/cli/commands/passgen.rb +128 -0
- data/lib/simp/cli/commands/puppeteval.rb +82 -0
- data/lib/simp/cli/commands/runpuppet.rb +95 -0
- data/lib/simp/cli/config/item.rb +456 -0
- data/lib/simp/cli/config/item/add_ldap_to_hiera.rb +43 -0
- data/lib/simp/cli/config/item/answers_yaml_file_writer.rb +58 -0
- data/lib/simp/cli/config/item/certificates.rb +39 -0
- data/lib/simp/cli/config/item/client_nets.rb +65 -0
- data/lib/simp/cli/config/item/common_runlevel_default.rb +32 -0
- data/lib/simp/cli/config/item/dns_search.rb +48 -0
- data/lib/simp/cli/config/item/dns_servers.rb +57 -0
- data/lib/simp/cli/config/item/failover_log_servers.rb +27 -0
- data/lib/simp/cli/config/item/gateway.rb +32 -0
- data/lib/simp/cli/config/item/grub_password.rb +51 -0
- data/lib/simp/cli/config/item/hostname.rb +24 -0
- data/lib/simp/cli/config/item/hostname_conf.rb +48 -0
- data/lib/simp/cli/config/item/ipaddress.rb +46 -0
- data/lib/simp/cli/config/item/is_master_yum_server.rb +23 -0
- data/lib/simp/cli/config/item/ldap_base_dn.rb +38 -0
- data/lib/simp/cli/config/item/ldap_bind_dn.rb +34 -0
- data/lib/simp/cli/config/item/ldap_bind_hash.rb +28 -0
- data/lib/simp/cli/config/item/ldap_bind_pw.rb +24 -0
- data/lib/simp/cli/config/item/ldap_master.rb +33 -0
- data/lib/simp/cli/config/item/ldap_root_dn.rb +42 -0
- data/lib/simp/cli/config/item/ldap_root_hash.rb +35 -0
- data/lib/simp/cli/config/item/ldap_sync_dn.rb +24 -0
- data/lib/simp/cli/config/item/ldap_sync_hash.rb +28 -0
- data/lib/simp/cli/config/item/ldap_sync_pw.rb +26 -0
- data/lib/simp/cli/config/item/ldap_uri.rb +43 -0
- data/lib/simp/cli/config/item/log_servers.rb +27 -0
- data/lib/simp/cli/config/item/netmask.rb +39 -0
- data/lib/simp/cli/config/item/network_conf.rb +63 -0
- data/lib/simp/cli/config/item/network_dhcp.rb +27 -0
- data/lib/simp/cli/config/item/network_interface.rb +41 -0
- data/lib/simp/cli/config/item/network_setup_nic.rb +28 -0
- data/lib/simp/cli/config/item/ntp_servers.rb +69 -0
- data/lib/simp/cli/config/item/puppet_autosign.rb +66 -0
- data/lib/simp/cli/config/item/puppet_ca.rb +31 -0
- data/lib/simp/cli/config/item/puppet_ca_port.rb +28 -0
- data/lib/simp/cli/config/item/puppet_conf.rb +98 -0
- data/lib/simp/cli/config/item/puppet_fileserver.rb +104 -0
- data/lib/simp/cli/config/item/puppet_hosts_entry.rb +44 -0
- data/lib/simp/cli/config/item/puppet_server.rb +30 -0
- data/lib/simp/cli/config/item/puppet_server_ip.rb +25 -0
- data/lib/simp/cli/config/item/puppetdb_port.rb +25 -0
- data/lib/simp/cli/config/item/puppetdb_server.rb +26 -0
- data/lib/simp/cli/config/item/remove_ldap_from_hiera.rb +47 -0
- data/lib/simp/cli/config/item/rename_fqdn_yaml.rb +40 -0
- data/lib/simp/cli/config/item/rsync_base.rb +37 -0
- data/lib/simp/cli/config/item/rsync_server.rb +44 -0
- data/lib/simp/cli/config/item/rsync_timeout.rb +26 -0
- data/lib/simp/cli/config/item/set_grub_password.rb +19 -0
- data/lib/simp/cli/config/item/simp_yum_servers.rb +30 -0
- data/lib/simp/cli/config/item/use_auditd.rb +19 -0
- data/lib/simp/cli/config/item/use_fips.rb +46 -0
- data/lib/simp/cli/config/item/use_iptables.rb +22 -0
- data/lib/simp/cli/config/item/use_ldap.rb +19 -0
- data/lib/simp/cli/config/item/use_selinux.rb +32 -0
- data/lib/simp/cli/config/item/yum_repositories.rb +75 -0
- data/lib/simp/cli/config/item_list_factory.rb +236 -0
- data/lib/simp/cli/config/questionnaire.rb +86 -0
- data/lib/simp/cli/config/utils.rb +128 -0
- data/lib/simp/cli/lib/utils.rb +114 -0
- data/lib/simp/simp.rb +77 -0
- data/spec/lib/simp/cli/commands/config_spec.rb +42 -0
- data/spec/lib/simp/cli/config/item/add_ldap_to_hiera_spec.rb +58 -0
- data/spec/lib/simp/cli/config/item/answers_yaml_file_writer_spec.rb +86 -0
- data/spec/lib/simp/cli/config/item/certificates_spec.rb +50 -0
- data/spec/lib/simp/cli/config/item/client_nets_spec.rb +66 -0
- data/spec/lib/simp/cli/config/item/common_runlevel_default_spec.rb +27 -0
- data/spec/lib/simp/cli/config/item/dns_search_spec.rb +74 -0
- data/spec/lib/simp/cli/config/item/dns_servers_spec.rb +76 -0
- data/spec/lib/simp/cli/config/item/failover_log_servers_spec.rb +49 -0
- data/spec/lib/simp/cli/config/item/files/FakeCA/cacertkey +1 -0
- data/spec/lib/simp/cli/config/item/files/FakeCA/gencerts_nopass.sh +10 -0
- data/spec/lib/simp/cli/config/item/files/autosign.conf.new +11 -0
- data/spec/lib/simp/cli/config/item/files/autosign.conf.used +15 -0
- data/spec/lib/simp/cli/config/item/files/fileserver.conf +41 -0
- data/spec/lib/simp/cli/config/item/files/hosts +2 -0
- data/spec/lib/simp/cli/config/item/files/hosts.old_puppet_entry +3 -0
- data/spec/lib/simp/cli/config/item/files/puppet.conf +25 -0
- data/spec/lib/simp/cli/config/item/files/puppet.your.domain.yaml +21 -0
- data/spec/lib/simp/cli/config/item/files/resolv.conf__multiple +10 -0
- data/spec/lib/simp/cli/config/item/files/resolv.conf__single +4 -0
- data/spec/lib/simp/cli/config/item/files/rsyncd.conf +225 -0
- data/spec/lib/simp/cli/config/item/gateway_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/grub_password_spec.rb +24 -0
- data/spec/lib/simp/cli/config/item/hostname_conf_spec.rb +27 -0
- data/spec/lib/simp/cli/config/item/hostname_spec.rb +22 -0
- data/spec/lib/simp/cli/config/item/ipaddress_spec.rb +40 -0
- data/spec/lib/simp/cli/config/item/is_master_yum_server_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/ldap_base_dn_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/ldap_bind_dn_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/ldap_bind_hash_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/ldap_bind_pw_spec.rb +21 -0
- data/spec/lib/simp/cli/config/item/ldap_master_spec.rb +37 -0
- data/spec/lib/simp/cli/config/item/ldap_root_dn_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/ldap_root_hash_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/ldap_sync_dn_spec.rb +22 -0
- data/spec/lib/simp/cli/config/item/ldap_sync_hash_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/ldap_sync_pw_spec.rb +21 -0
- data/spec/lib/simp/cli/config/item/ldap_uri_spec.rb +32 -0
- data/spec/lib/simp/cli/config/item/log_servers_spec.rb +49 -0
- data/spec/lib/simp/cli/config/item/netmask_spec.rb +28 -0
- data/spec/lib/simp/cli/config/item/network_conf_spec.rb +63 -0
- data/spec/lib/simp/cli/config/item/network_dhcp_spec.rb +11 -0
- data/spec/lib/simp/cli/config/item/network_interface_spec.rb +26 -0
- data/spec/lib/simp/cli/config/item/network_setup_nic_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/ntp_servers_spec.rb +43 -0
- data/spec/lib/simp/cli/config/item/puppet_autosign_spec.rb +55 -0
- data/spec/lib/simp/cli/config/item/puppet_ca_port_spec.rb +23 -0
- data/spec/lib/simp/cli/config/item/puppet_ca_spec.rb +22 -0
- data/spec/lib/simp/cli/config/item/puppet_conf_spec.rb +110 -0
- data/spec/lib/simp/cli/config/item/puppet_fileserver_spec.rb +53 -0
- data/spec/lib/simp/cli/config/item/puppet_hosts_entry_spec.rb +85 -0
- data/spec/lib/simp/cli/config/item/puppet_server_ip_spec.rb +24 -0
- data/spec/lib/simp/cli/config/item/puppet_server_spec.rb +22 -0
- data/spec/lib/simp/cli/config/item/puppetdb_port_spec.rb +25 -0
- data/spec/lib/simp/cli/config/item/puppetdb_server_spec.rb +25 -0
- data/spec/lib/simp/cli/config/item/remove_ldap_from_hiera_spec.rb +58 -0
- data/spec/lib/simp/cli/config/item/rename_fqdn_yaml_spec.rb +63 -0
- data/spec/lib/simp/cli/config/item/rsync_base_spec.rb +28 -0
- data/spec/lib/simp/cli/config/item/rsync_server_spec.rb +41 -0
- data/spec/lib/simp/cli/config/item/rsync_timeout_spec.rb +21 -0
- data/spec/lib/simp/cli/config/item/set_grub_password_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/simp_yum_servers_spec.rb +41 -0
- data/spec/lib/simp/cli/config/item/spec_helper.rb +22 -0
- data/spec/lib/simp/cli/config/item/use_auditd_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/use_fips_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/use_iptables_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/use_ldap_spec.rb +29 -0
- data/spec/lib/simp/cli/config/item/use_selinux_spec.rb +24 -0
- data/spec/lib/simp/cli/config/item/yum_repositories_spec.rb +94 -0
- data/spec/lib/simp/cli/config/item_spec.rb +106 -0
- data/spec/lib/simp/cli/config/spec_helper.rb +1 -0
- data/spec/lib/simp/cli/config/utils_spec.rb +131 -0
- data/spec/lib/simp/cli/spec_helper.rb +1 -0
- data/spec/spec_helper.rb +91 -0
- metadata +391 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::RsyncBase < Item
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'rsync::base'
|
12
|
+
@description = <<-EOF.gsub(/^ {8}/,'')
|
13
|
+
Several modules use rsync as a means of pulling down large
|
14
|
+
collections of files. This provides a single point of configuration
|
15
|
+
for the system defaults.
|
16
|
+
|
17
|
+
Individual modules can be overridden as required.
|
18
|
+
EOF
|
19
|
+
if Facter.value('lsbmajdistrelease') < '7' then
|
20
|
+
@base_dir = '/srv/rsync'
|
21
|
+
else
|
22
|
+
@base_dir = File.exists?( '/var/simp/' ) ? '/var/simp/rsync' : '/srv/simp/rsync'
|
23
|
+
@base_dir = "#{@base_dir}/%{::operatingsystem}/%{::lsbmajdistrelease}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def os_value; nil; end
|
28
|
+
|
29
|
+
def validate( x )
|
30
|
+
x =~ %r{^/} ? true : false
|
31
|
+
end
|
32
|
+
|
33
|
+
def recommended_value
|
34
|
+
"#{@base_dir}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::RsyncServer < Item
|
9
|
+
attr_accessor :file
|
10
|
+
def initialize
|
11
|
+
super
|
12
|
+
@key = 'rsync::server'
|
13
|
+
@description = 'rsync server (usually the primary puppet master)'
|
14
|
+
@__warning = false
|
15
|
+
@file = '/etc/rsyncd.conf'
|
16
|
+
@skip_query = true
|
17
|
+
end
|
18
|
+
|
19
|
+
def os_value
|
20
|
+
if File.readable?(@file)
|
21
|
+
res = File.readlines(@file).grep( /address\s*=/ ){|x| x.split('=').last.strip}
|
22
|
+
res.empty? ? nil : res.first
|
23
|
+
else
|
24
|
+
# only show the FIRST warning
|
25
|
+
if !@__warning
|
26
|
+
warning = "WARNING: cannot read #{file}"
|
27
|
+
say "<%= color(%q{#{warning}}, YELLOW) %>\n" unless @silent
|
28
|
+
@__warning = true
|
29
|
+
end
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def recommended_value
|
35
|
+
os_value || '127.0.0.1'
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate item
|
39
|
+
( Simp::Cli::Config::Utils.validate_ip( item ) ||
|
40
|
+
Simp::Cli::Config::Utils.validate_fqdn( item ) ||
|
41
|
+
Simp::Cli::Config::Utils.validate_hostname( item ) )
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::RsyncTimeout < Item
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'rsync::timeout'
|
12
|
+
@description = 'maximum rsync timeout in seconds. 0 = no timeout'
|
13
|
+
@skip_query = true
|
14
|
+
end
|
15
|
+
|
16
|
+
def os_value; nil; end
|
17
|
+
|
18
|
+
def validate( x )
|
19
|
+
x.to_s =~ %r{^\d+} ? true : false
|
20
|
+
end
|
21
|
+
|
22
|
+
def recommended_value
|
23
|
+
'1'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::SetGrubPassword < YesNoItem
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'set_grub_password'
|
12
|
+
@description = %Q{Whether or not to set the GRUB password on this system.}
|
13
|
+
end
|
14
|
+
|
15
|
+
def recommended_value
|
16
|
+
os_value || 'yes'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "resolv"
|
2
|
+
require 'highline/import'
|
3
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
4
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
5
|
+
|
6
|
+
module Simp; end
|
7
|
+
class Simp::Cli; end
|
8
|
+
module Simp::Cli::Config
|
9
|
+
class Item::SimpYumServers < ListItem
|
10
|
+
def initialize
|
11
|
+
super
|
12
|
+
@key = 'simp::yum::servers'
|
13
|
+
@description = %Q{Your SIMP yum server(s).}
|
14
|
+
@allow_empty_list = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def recommended_value
|
18
|
+
["%{hiera('puppet::server')}"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate_item item
|
22
|
+
(
|
23
|
+
Simp::Cli::Config::Utils.validate_hiera_lookup( item ) ||
|
24
|
+
Simp::Cli::Config::Utils.validate_hostname( item ) ||
|
25
|
+
Simp::Cli::Config::Utils.validate_fqdn( item ) ||
|
26
|
+
Simp::Cli::Config::Utils.validate_ip( item )
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::UseAuditd < YesNoItem
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'use_auditd'
|
12
|
+
@description = %q{Whether or not to use auditd on this system.}
|
13
|
+
end
|
14
|
+
|
15
|
+
def recommended_value
|
16
|
+
os_value || 'yes'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::UseFips < YesNoItem
|
9
|
+
include Simp::Cli::Config::SafeApplying
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
super
|
13
|
+
@key = 'use_fips'
|
14
|
+
@description = %q{Enable FIPS mode on this system.
|
15
|
+
|
16
|
+
FIPS mode enforces strict compliance with FIPS-140-2. All core SIMP modules
|
17
|
+
can support this configuration.
|
18
|
+
|
19
|
+
IMPORTANT: Be sure you know the security tradeoffs of FIPS-140-2 compliance.
|
20
|
+
FIPS mode disables the use of MD5 and may require weaker ciphers or key lengths
|
21
|
+
than your security policies allow.
|
22
|
+
}
|
23
|
+
@allow_user_apply = true
|
24
|
+
end
|
25
|
+
|
26
|
+
def os_value
|
27
|
+
Facter.value('fips_enabled') ? 'yes' : 'no'
|
28
|
+
end
|
29
|
+
|
30
|
+
def recommended_value
|
31
|
+
os_value || 'yes'
|
32
|
+
end
|
33
|
+
|
34
|
+
def apply
|
35
|
+
if @value
|
36
|
+
# This is a one-off prep item needed to handle Puppet certs w/FIPS mode
|
37
|
+
cmd = %q(puppet config set digest_algorithm sha256)
|
38
|
+
puts cmd unless @silent
|
39
|
+
%x{#{cmd}}
|
40
|
+
else
|
41
|
+
puts 'not using FIPS mode: noop'
|
42
|
+
true # we applied nothing, successfully!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::UseIPtables < YesNoItem
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'use_iptables'
|
12
|
+
@description = %Q{Whether or not to use iptables on this system.
|
13
|
+
|
14
|
+
If there is code that calls the IPTables native type directly, this option may
|
15
|
+
not function properly. We are looking into solutions for this issue.}
|
16
|
+
end
|
17
|
+
|
18
|
+
def recommended_value
|
19
|
+
os_value || 'yes'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::UseLdap < YesNoItem
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'use_ldap'
|
12
|
+
@description = %Q{Whether or not to use LDAP on this system.\nIf you disable this, modules will not attempt to use LDAP where possible.}
|
13
|
+
end
|
14
|
+
|
15
|
+
def recommended_value
|
16
|
+
os_value || 'yes'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
3
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
4
|
+
|
5
|
+
module Simp; end
|
6
|
+
class Simp::Cli; end
|
7
|
+
module Simp::Cli::Config
|
8
|
+
class Item::UseSELinux < Item
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@key = 'selinux::ensure'
|
12
|
+
@fact = 'selinux_current_mode'
|
13
|
+
@description = %Q{SELinux is good.
|
14
|
+
|
15
|
+
Not all modules are compatible with SELinux in enforcing mode but the core
|
16
|
+
SIMP modules are. You should not take this below 'permissive' unless it is
|
17
|
+
truly necessary.}
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate( x )
|
21
|
+
(x.to_s =~ /permissive|disabled|enforcing/i ) ? true : false
|
22
|
+
end
|
23
|
+
|
24
|
+
def not_valid_message
|
25
|
+
'Must be "enforcing," "permissive," or "disabled" (not recommended)'
|
26
|
+
end
|
27
|
+
|
28
|
+
def recommended_value
|
29
|
+
os_value || 'enforcing'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require "resolv"
|
2
|
+
require 'highline/import'
|
3
|
+
require File.expand_path( '../item', File.dirname(__FILE__) )
|
4
|
+
require File.expand_path( '../utils', File.dirname(__FILE__) )
|
5
|
+
|
6
|
+
module Simp; end
|
7
|
+
class Simp::Cli; end
|
8
|
+
module Simp::Cli::Config
|
9
|
+
class Item::YumRepositories < ActionItem
|
10
|
+
|
11
|
+
attr_accessor :www_yum_dir, :yum_repos_d, :yaml_file
|
12
|
+
def initialize
|
13
|
+
super
|
14
|
+
@key = 'yum::repositories'
|
15
|
+
@description = %Q{Sets up the yum repositores for SIMP on apply. (apply-only; noop)}
|
16
|
+
@www_yum_dir = File.exists?( '/var/www/yum/') ? '/var/www/yum' : '/srv/www/yum'
|
17
|
+
@yum_repos_d = '/etc/yum.repos.d'
|
18
|
+
@yaml_file = '/etc/puppet/environments/simp/hieradata/hosts/puppet.your.domain.yaml'
|
19
|
+
end
|
20
|
+
|
21
|
+
def apply
|
22
|
+
result = true
|
23
|
+
|
24
|
+
# set up yum repos
|
25
|
+
say_green 'Updating YUM Updates Repositories (NOTE: This may take some time)' if !@silent
|
26
|
+
yumpath = File.join( @www_yum_dir,
|
27
|
+
Facter.value('operatingsystem'),
|
28
|
+
Facter.value('operatingsystemrelease'),
|
29
|
+
Facter.value('architecture')
|
30
|
+
)
|
31
|
+
begin
|
32
|
+
Dir.chdir(yumpath) do
|
33
|
+
FileUtils.mkdir('Updates') unless File.directory?('Updates')
|
34
|
+
Dir.chdir('Updates') do
|
35
|
+
system( %q(find .. -type f -name '*.rpm' -exec ln -sf {} \\;) )
|
36
|
+
cmd = 'createrepo -qqq -p --update .'
|
37
|
+
if @silent
|
38
|
+
cmd << ' &> /dev/null'
|
39
|
+
else
|
40
|
+
puts cmd
|
41
|
+
end
|
42
|
+
system(cmd)
|
43
|
+
raise RuntimeError "'#{cmd}' failed in #{Dir.pwd}" unless ($?.nil? || $?.success?)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
system("chown -R root:apache #{@www_yum_dir}/ #{ '&> /dev/null' if @silent }")
|
47
|
+
system("chmod -R u=rwX,g=rX,o-rwx #{@www_yum_dir}/")
|
48
|
+
raise RuntimeError, "chmod -R u=rwX,g=rX,o-rwx #{@www_yum_dir}/ failed!" unless ($?.nil? || $?.success?)
|
49
|
+
say_green "Finished configuring Updates repository at #{yumpath}/Updates" if !@silent
|
50
|
+
rescue => err
|
51
|
+
say_red "ERROR: Something went wrong setting up the Updates repo in #{yumpath}!"
|
52
|
+
say_red ' Please make sure your Updates repo is properly configured.'
|
53
|
+
say_red "\nError output:\n #{err.class}\n\n #{err}"
|
54
|
+
result = false
|
55
|
+
end
|
56
|
+
|
57
|
+
# disable any CentOS repo spam
|
58
|
+
Dir.chdir( @yum_repos_d ) do
|
59
|
+
if ! Dir.glob('CentOS*.repo').empty?
|
60
|
+
`grep "\\[*\\]" *CentOS*.repo | cut -d "[" -f2 | cut -d "]" -f1 | xargs yum-config-manager --disable`
|
61
|
+
end
|
62
|
+
|
63
|
+
# enable 'simp::yum::enable_simp_repos' in hosts/puppet.your.domain.yaml
|
64
|
+
if @config_items.fetch('is_master_yum_server').value && !File.exist?('filesystem.repo')
|
65
|
+
cmd = %Q{sed -i '/simp::yum::enable_simp_repos : false/ c\\simp::yum::enable_simp_repos : true' #{@yaml_file}}
|
66
|
+
puts cmd if !@silent
|
67
|
+
%x{#{cmd}}
|
68
|
+
result = result && ($?.nil? || $?.success?)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
result
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,236 @@
|
|
1
|
+
require File.expand_path( 'item', File.dirname(__FILE__) )
|
2
|
+
|
3
|
+
module Simp; end
|
4
|
+
class Simp::Cli; end
|
5
|
+
module Simp::Cli::Config; end
|
6
|
+
|
7
|
+
# Builds an Array of Config::Items
|
8
|
+
class Simp::Cli::Config::ItemListFactory
|
9
|
+
def initialize( options )
|
10
|
+
@options = {
|
11
|
+
:verbose => 0,
|
12
|
+
:puppet_system_file => '/tmp/out.yaml',
|
13
|
+
}.merge( options )
|
14
|
+
|
15
|
+
# A hash to look up Config::Item values set from other sources (files, cli).
|
16
|
+
# for each Hash element:
|
17
|
+
# - the key will be the the Config::Item#key
|
18
|
+
# - the value will be the @options#value
|
19
|
+
@answers_hash = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def process( yaml=nil, answers_hash={} )
|
24
|
+
@answers_hash = answers_hash
|
25
|
+
|
26
|
+
# Require the config items
|
27
|
+
rb_files = File.expand_path( '../config/item/*.rb', File.dirname(__FILE__))
|
28
|
+
Dir.glob( rb_files ).sort_by(&:to_s).each { |file| require file }
|
29
|
+
|
30
|
+
items_yaml = yaml || <<-EOF.gsub(/^ {6}/,'')
|
31
|
+
# The Config::Item list is really a conditional tree. Some Items can
|
32
|
+
# prepend additional Items to the queue, depending on the answer.
|
33
|
+
#
|
34
|
+
# This YAML describes the full Item structure. The format is:
|
35
|
+
#
|
36
|
+
# - ItemA
|
37
|
+
# - ItemB
|
38
|
+
# answer1:
|
39
|
+
# - ItemC
|
40
|
+
# - ItemD
|
41
|
+
# answer2:
|
42
|
+
# - ItemE
|
43
|
+
# - ItemF
|
44
|
+
# - ItemG
|
45
|
+
---
|
46
|
+
# ==== network ====
|
47
|
+
- UseFips
|
48
|
+
- NetworkInterface
|
49
|
+
- SetupNIC:
|
50
|
+
true:
|
51
|
+
- DHCP:
|
52
|
+
static: # gather info first, then configure network
|
53
|
+
- Hostname
|
54
|
+
- IPAddress
|
55
|
+
- Netmask
|
56
|
+
- Gateway
|
57
|
+
- DNSServers
|
58
|
+
- DNSSearch
|
59
|
+
- NetworkConf
|
60
|
+
dhcp: # configure network, then get info (silently)
|
61
|
+
- NetworkConf
|
62
|
+
- Hostname SILENT
|
63
|
+
- IPAddress SILENT
|
64
|
+
- Netmask SILENT
|
65
|
+
- Gateway SILENT
|
66
|
+
- DNSServers SILENT
|
67
|
+
- DNSSearch SILENT
|
68
|
+
false: # don't configure network (but get network info)
|
69
|
+
- Hostname
|
70
|
+
- IPAddress
|
71
|
+
- Netmask
|
72
|
+
- Gateway
|
73
|
+
- DNSServers
|
74
|
+
- DNSSearch
|
75
|
+
- HostnameConf
|
76
|
+
- ClientNets
|
77
|
+
|
78
|
+
# ==== globals ====
|
79
|
+
- NTPServers NOAPPLY
|
80
|
+
- LogServers
|
81
|
+
- FailoverLogServers
|
82
|
+
- SimpYumServers
|
83
|
+
- UseAuditd
|
84
|
+
- UseIPtables
|
85
|
+
- CommonRunLevelDefault
|
86
|
+
- UseSELinux
|
87
|
+
- SetGrubPassword:
|
88
|
+
true:
|
89
|
+
- GrubPassword
|
90
|
+
- Certificates
|
91
|
+
- IsMasterYumServer
|
92
|
+
- YumRepositories
|
93
|
+
- RenameFqdnYaml
|
94
|
+
|
95
|
+
# ==== puppet ====
|
96
|
+
- PuppetServer
|
97
|
+
- PuppetServerIP
|
98
|
+
- PuppetCA
|
99
|
+
- PuppetCAPort
|
100
|
+
### NOTE: removed since update to puppet server: - PuppetFileServer
|
101
|
+
- PuppetAutosign
|
102
|
+
- PuppetConf
|
103
|
+
- PuppetHostsEntry
|
104
|
+
- PuppetDBServer
|
105
|
+
- PuppetDBPort
|
106
|
+
|
107
|
+
# ==== ldap ====
|
108
|
+
- UseLdap:
|
109
|
+
true:
|
110
|
+
- AddLdapToHiera
|
111
|
+
- LdapBaseDn
|
112
|
+
- LdapBindDn
|
113
|
+
- LdapBindPw
|
114
|
+
- LdapBindHash
|
115
|
+
- LdapSyncDn
|
116
|
+
- LdapSyncPw
|
117
|
+
- LdapSyncHash
|
118
|
+
- LdapRootDn
|
119
|
+
- LdapRootHash
|
120
|
+
- LdapMaster
|
121
|
+
- LdapUri
|
122
|
+
false:
|
123
|
+
- RemoveLdapFromHiera
|
124
|
+
|
125
|
+
# ==== rsync ====
|
126
|
+
- RsyncBase
|
127
|
+
- RsyncServer
|
128
|
+
- RsyncTimeout
|
129
|
+
|
130
|
+
# ==== writers ====
|
131
|
+
- AnswersYAMLFileWriter FILE=#{ @options.fetch( :puppet_system_file, '/dev/null') }
|
132
|
+
- AnswersYAMLFileWriter FILE=#{ @options.fetch( :output_file, '/dev/null') } USERAPPLY
|
133
|
+
EOF
|
134
|
+
items = YAML.load items_yaml
|
135
|
+
item_queue = build_item_queue( [], items )
|
136
|
+
item_queue
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
def assign_value_from_hash( hash, item )
|
142
|
+
value = hash.fetch( item.key, nil )
|
143
|
+
if !value.nil?
|
144
|
+
# workaround to allow cli/env var arrays
|
145
|
+
value = value.split(',,') if item.is_a?(Simp::Cli::Config::ListItem) && !value.is_a?(Array)
|
146
|
+
if ! item.validate value
|
147
|
+
print_warning "'#{value}' is not an acceptable answer for '#{item.key}' (skipping)."
|
148
|
+
else
|
149
|
+
item.value = value
|
150
|
+
end
|
151
|
+
end
|
152
|
+
item
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
# returns an instance of an Config::Item based on a String of its class name
|
157
|
+
def create_item item_string
|
158
|
+
# create item instance
|
159
|
+
parts = item_string.split( /\s+/ )
|
160
|
+
name = parts.shift
|
161
|
+
item = Simp::Cli::Config::Item.const_get(name).new
|
162
|
+
|
163
|
+
# set item options
|
164
|
+
# ...based on YAML keywords
|
165
|
+
while !parts.empty?
|
166
|
+
part = parts.shift
|
167
|
+
if part =~ /^#/
|
168
|
+
parts = []
|
169
|
+
next
|
170
|
+
end
|
171
|
+
item.silent = true if part == 'SILENT'
|
172
|
+
item.skip_apply = true if part == 'NOAPPLY'
|
173
|
+
item.skip_query = true if part == 'SKIPQUERY'
|
174
|
+
item.skip_yaml = true if part == 'NOYAML'
|
175
|
+
item.allow_user_apply = true if part == 'USERAPPLY'
|
176
|
+
if part =~ /^FILE=(.+)/
|
177
|
+
item.file = $1
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
# ...based on cli options
|
182
|
+
item.silent = true if @options.fetch( :verbose ) < 0
|
183
|
+
item.skip_apply = true if @options.fetch( :dry_run, false )
|
184
|
+
|
185
|
+
# (try to) assign item values from various sources
|
186
|
+
item = assign_value_from_hash( @answers_hash, item )
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
# recursively build an item queue
|
191
|
+
def build_item_queue( item_queue, items )
|
192
|
+
writer = create_safety_writer_item
|
193
|
+
if !items.empty?
|
194
|
+
item = items.shift
|
195
|
+
item_queue << writer if writer
|
196
|
+
|
197
|
+
if item.is_a? String
|
198
|
+
item_queue << create_item( item )
|
199
|
+
|
200
|
+
elsif item.is_a? Hash
|
201
|
+
answers_tree = {}
|
202
|
+
item.values.first.each{ |answer, values|
|
203
|
+
answers_tree[ answer ] = build_item_queue( [], values )
|
204
|
+
}
|
205
|
+
_item = create_item( item.keys.first )
|
206
|
+
_item.next_items_tree = answers_tree
|
207
|
+
item_queue << _item
|
208
|
+
item_queue << writer if writer
|
209
|
+
end
|
210
|
+
|
211
|
+
item_queue = build_item_queue( item_queue, items )
|
212
|
+
end
|
213
|
+
|
214
|
+
# append a silent YAML writer to save progress after each item
|
215
|
+
|
216
|
+
item_queue
|
217
|
+
end
|
218
|
+
|
219
|
+
|
220
|
+
# create a YAML writer that will "safety save" after each answer
|
221
|
+
def create_safety_writer_item
|
222
|
+
if file = @options.fetch( :output_file, nil)
|
223
|
+
FileUtils.mkdir_p File.dirname( file ), :verbose => false
|
224
|
+
writer = Simp::Cli::Config::Item::AnswersYAMLFileWriter.new
|
225
|
+
file = File.join( File.dirname( file ), ".#{File.basename( file )}" )
|
226
|
+
writer.file = file
|
227
|
+
writer.allow_user_apply = true
|
228
|
+
writer.silent = true if @options.fetch(:verbose, 0) < 2
|
229
|
+
writer
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def print_warning error
|
234
|
+
say "<%= color(%q{WARNING: }, YELLOW,BOLD) %><%= color(%q{#{error}}, YELLOW) %>\n"
|
235
|
+
end
|
236
|
+
end
|