Configuration Management: Difference between revisions
(Created page with "=Puppet= Puppet version '''5''' tends to get into defunct states where it will not work and will not provide any useful error messages.<br> Here are the steps I used to insta...") |
(→Puppet) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
Puppet version '''5''' tends to get into defunct states where it will not work and will not provide any useful error messages.<br> | Puppet version '''5''' tends to get into defunct states where it will not work and will not provide any useful error messages.<br> | ||
Here are the steps I used to install version 5 (from Puppet's repository) on a master and a node that previously had version 3 installed (from Ubuntu repository). | Here are the steps I used to install version 5 (from Puppet's repository) on a master and a node that previously had version 3 installed (from Ubuntu repository). | ||
It is important to not have any files or lines in configuration files left from previous versions. Puppet will happily take an invalid config and fail without any useful explanation. Start fresh and add each line as needed. | |||
Differences is file locations for... | |||
Puppet repo: | Puppet repo: | ||
* /etc/puppetlabs/{code,mcollective,puppet,puppetdb,puppetserver,pxp-agent} | * /etc/puppetlabs/{code,mcollective,puppet,puppetdb,puppetserver,pxp-agent} | ||
Line 24: | Line 28: | ||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> puppet resource service puppetdb ensure=running | <span style="font-weight:bold; user-select:none">root@server ~ $</span> puppet resource service puppetdb ensure=running | ||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> tree /etc/puppetlabs/puppet/ssl/ | <span style="font-weight:bold; user-select:none">root@server ~ $</span> tree /etc/puppetlabs/puppet/ssl/ | ||
< | <span style="color:#909090">/etc/puppetlabs/puppet/ssl/ | ||
├── ca | ├── ca | ||
│ ├── ca_crl.pem | │ ├── ca_crl.pem | ||
Line 47: | Line 51: | ||
└── puppetmaster.jeremybryansmith.com.pem | └── puppetmaster.jeremybryansmith.com.pem | ||
5 directories, 16 files</font> | 5 directories, 16 files</span> | ||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> cat /etc/puppetlabs/puppet/puppet.conf | |||
<span style="color:#909090"># Puppet Server Config: /etc/puppetlabs/puppet/puppet.conf | |||
[main] | |||
certname = <font color=purple>puppetmaster.jeremybryansmith.com</font> | |||
server = <font color=purple>puppetmaster.jeremybryansmith.com</font> | |||
runinterval = 1h | |||
strict_variables = true | |||
[master] | |||
dns_alt_names = <span style="color:purple">puppetmaster.jeremybryansmith.com</span></span> | |||
On the '''nodes''': | On the '''nodes''': | ||
Line 59: | Line 75: | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet resource service puppet ensure=stopped | <span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet resource service puppet ensure=stopped | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet config print ssldir --section agent | <span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet config print ssldir --section agent | ||
< | <span style="color:#909090">/etc/puppetlabs/puppet/ssl</span> | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> rm -rf /opt/puppetlabs/puppet/ssl/ | <span style="font-weight:bold; user-select:none">root@node ~ $</span> rm -rf /opt/puppetlabs/puppet/ssl/ | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> rm -rf /etc/puppetlabs/puppet/ssl/ | <span style="font-weight:bold; user-select:none">root@node ~ $</span> rm -rf /etc/puppetlabs/puppet/ssl/ | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> | <span style="font-weight:bold; user-select:none">root@node ~ $</span> nmap <font color=purple>puppetmaster.jeremybryansmith.com</font># -p 8140 | ||
< | <span style="color:#909090">Starting Nmap 7.60 ( https://nmap.org ) at 2020-03-13 09:58 EDT | ||
Nmap scan report for puppetmaster.jeremybryansmith.com (104.131.32.175) | Nmap scan report for puppetmaster.jeremybryansmith.com (104.131.32.175) | ||
Host is up (0.070s latency). | Host is up (0.070s latency). | ||
PORT STATE SERVICE | PORT STATE SERVICE | ||
8140/tcp open puppet</ | 8140/tcp open puppet</span> | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> echo "" | openssl s_client -servername puppetmaster.jeremybryansmith.com -connect puppetmaster.jeremybryansmith.com:8140 | grep 'CN =' | |||
< | <span style="font-weight:bold; user-select:none">root@node ~ $</span> echo "" | openssl s_client -servername <font color=purple>puppetmaster.jeremybryansmith.com</font> -connect puppetmaster.jeremybryansmith.com:8140 | grep 'CN =' | ||
<span style="color:#909090">depth=0 CN = puppetmaster.jeremybryansmith.com | |||
verify error:num=20:unable to get local issuer certificate | verify error:num=20:unable to get local issuer certificate | ||
verify return:1 | verify return:1 | ||
Line 81: | Line 98: | ||
subject=CN = puppetmaster.jeremybryansmith.com | subject=CN = puppetmaster.jeremybryansmith.com | ||
issuer=CN = Puppet CA: puppetmaster.jeremybryansmith.com | issuer=CN = Puppet CA: puppetmaster.jeremybryansmith.com | ||
CN = Puppet CA: puppetmaster.jeremybryansmith.com</font> | CN = Puppet CA: puppetmaster.jeremybryansmith.com</span> | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet agent --test --noop --waitforcert 60 | |||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> cat /etc/puppetlabs/puppet/puppet.conf | |||
<span style="color:#909090"># Puppet Node Config: /etc/puppetlabs/puppet/puppet.conf | |||
[main] | |||
certname=<font color=purple>latitude.jbsnet.xyz</font> | |||
server=<font color=purple>puppetmaster.jeremybryansmith.com</font> | |||
runinterval = 1h</span> | |||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet agent --test --noop --waitforcert 60 | |||
<font color=green>Info: Creating a new SSL key for latitude.jbsnet.xyz</font> | <font color=green>Info: Creating a new SSL key for latitude.jbsnet.xyz</font> | ||
<font color=red>Error: request https://puppetmaster.jeremybryansmith.com:8140//puppet-ca/v1/certificate/ca failed: Failed to open TCP connection to puppetmaster.jeremybryansmith.com:8140 (Connection refused - connect(2) for "puppetmaster.jeremybryansmith.com" port 8140) | <font color=red>Error: request https://puppetmaster.jeremybryansmith.com:8140//puppet-ca/v1/certificate/ca failed: Failed to open TCP connection to puppetmaster.jeremybryansmith.com:8140 (Connection refused - connect(2) for "puppetmaster.jeremybryansmith.com" port 8140) | ||
Error: request https://puppetmaster.jeremybryansmith.com:8140//puppet-ca/v1/certificate/ca failed: Failed to open TCP connection to puppetmaster.jeremybryansmith.com:8140 (Connection refused - connect(2) for "puppetmaster.jeremybryansmith.com" port 8140)</font> | Error: request https://puppetmaster.jeremybryansmith.com:8140//puppet-ca/v1/certificate/ca failed: Failed to open TCP connection to puppetmaster.jeremybryansmith.com:8140 (Connection refused - connect(2) for "puppetmaster.jeremybryansmith.com" port 8140)</font> | ||
... | ... | ||
On the '''master''': | On the '''master''': | ||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> puppetserver ca list | <span style="font-weight:bold; user-select:none">root@server ~ $</span> puppetserver ca list | ||
<font color="#909090">Requested Certificates: | <font color="#909090">Requested Certificates:</font> | ||
latitude.jbsnet.xyz (SHA256) E2:4B:0C:3D:D7:DE:14:2A:A0:EC:93:E3:2E:8C:78:51:D4:07:FF:A0:BE:A6:FC:66:FF:7B:54:F4:D5:4A:B0:37</font> | <font color=purple>latitude.jbsnet.xyz</font><font color="#909090"> (SHA256) E2:4B:0C:3D:D7:DE:14:2A:A0:EC:93:E3:2E:8C:78:51:D4:07:FF:A0:BE:A6:FC:66:FF:7B:54:F4:D5:4A:B0:37</font> | ||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> puppetserver ca sign --certname latitude.jbsnet.xyz | <span style="font-weight:bold; user-select:none">root@server ~ $</span> puppetserver ca sign --certname <font color=purple>latitude.jbsnet.xyz</font> | ||
<font color="#909090">Successfully signed certificate request for latitude.jbsnet.xyz</font> | <font color="#909090">Successfully signed certificate request for latitude.jbsnet.xyz</font> | ||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> cat /etc/puppetlabs/code/environments/production/manifests/site.pp | |||
<font color="#909090"># /etc/puppetlabs/code/environments/production/manifests/site.pp | |||
... | |||
node '<font color=purple>latitude.jbsnet.xyz</font>' | |||
{ | |||
class {'jeremy': } | |||
} | |||
...</font> | |||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> cat /etc/puppetlabs/code/environments/production/modules/jeremy/manifests/init.pp | |||
<font color="#909090"># /etc/puppetlabs/code/environments/production/modules/jeremy/manifests/init.pp | |||
class jeremy () | |||
{ | |||
# User 'jeremy' files | |||
file | |||
{ | |||
'/home/jeremy/.tmux.conf': | |||
ensure => present, | |||
mode => '0644', | |||
owner => 'jeremy', | |||
group => 'jeremy', | |||
source => 'puppet:///modules/jeremy/home/jeremy/.tmux.conf', | |||
} | |||
file | |||
{ | |||
'/home/jeremy/.bash_profile': | |||
ensure => present, | |||
mode => '0644', | |||
owner => 'jeremy', | |||
group => 'jeremy', | |||
source => 'puppet:///modules/jeremy/home/jeremy/.bash_profile', | |||
} | |||
file | |||
{ | |||
'/home/jeremy/.bash_aliases': | |||
ensure => present, | |||
mode => '0644', | |||
owner => 'jeremy', | |||
group => 'jeremy', | |||
source => 'puppet:///modules/jeremy/home/jeremy/.bash_aliases', | |||
} | |||
file | |||
{ | |||
'/home/jeremy/.vimrc': | |||
ensure => present, | |||
mode => '0644', | |||
owner => 'jeremy', | |||
group => 'jeremy', | |||
source => 'puppet:///modules/jeremy/home/jeremy/.vimrc', | |||
} | |||
# Local vim config: should probably go into a class for the specific node... | |||
file | |||
{ | |||
'/home/jeremy/.vimrc.local': | |||
ensure => present, | |||
mode => '0644', | |||
owner => 'jeremy', | |||
group => 'jeremy', | |||
} | |||
}</font> | |||
On the '''nodes''': | On the '''nodes''': | ||
<span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet agent --test --noop | <span style="font-weight:bold; user-select:none">root@node ~ $</span> puppet agent --test --noop | ||
< | <span style="color:green">Info: Using configured environment 'production' | ||
Info: Retrieving pluginfacts | |||
Info: Retrieving plugin | Info: Retrieving plugin | ||
Info: Retrieving locales</ | Info: Retrieving locales | ||
< | Info: Applying configuration version '1584109458' | ||
<font | Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml</span> | ||
<font | <span style="color:#909090">Notice: Applied catalog in 0.35 seconds</span> | ||
Update: I should not have removed all files in <tt>/var/lib/puppet/ssl/certs/</tt>, only the relevant ones. Fix: | |||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> mkdir -p /opt/puppetlabs/puppet/ssl/certs | |||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> cd /opt/puppetlabs/puppet/ssl/certs | |||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> cp -d /etc/ssl/certs/* . | |||
Install additional modules: | |||
<span style="font-weight:bold; user-select:none">root@server ~ $</span> puppet module install cygnus-disk_facter |
Latest revision as of 20:27, 26 March 2020
Puppet
Puppet version 5 tends to get into defunct states where it will not work and will not provide any useful error messages.
Here are the steps I used to install version 5 (from Puppet's repository) on a master and a node that previously had version 3 installed (from Ubuntu repository).
It is important to not have any files or lines in configuration files left from previous versions. Puppet will happily take an invalid config and fail without any useful explanation. Start fresh and add each line as needed.
Differences is file locations for... Puppet repo:
- /etc/puppetlabs/{code,mcollective,puppet,puppetdb,puppetserver,pxp-agent}
Ubuntu repo:
- /etc/puppet/puppet/
- /var/lib/puppet/...
On the master:
root@server ~ $ puppet resource service puppetserver ensure=stopped root@server ~ $ mv /etc/puppet /etc/puppet_old root@server ~ $ mv /var/lib/puppet /var/lib/puppet_old root@server ~ $ wget 'https://apt.puppet.com/puppet5-release-xenial.deb' root@server ~ $ dpkg -i puppet5-release-xenial.deb root@server ~ $ apt-get update root@server ~ $ apt-get install puppet-agent puppetserver puppetdb root@server ~ $ puppet resource service puppetserver ensure=stopped root@server ~ $ rm -rf /opt/puppetlabs/puppet/ssl/ root@server ~ $ rm -rf /etc/puppetlabs/puppet/ssl/ root@server ~ $ puppet resource service puppetserver ensure=running root@server ~ $ puppet resource service puppetdb ensure=running root@server ~ $ tree /etc/puppetlabs/puppet/ssl/ /etc/puppetlabs/puppet/ssl/ ├── ca │ ├── ca_crl.pem │ ├── ca_crt.pem │ ├── ca_key.pem │ ├── ca_pub.pem │ ├── infra_crl.pem │ ├── infra_inventory.txt │ ├── infra_serials │ ├── inventory.txt │ ├── root_key.pem │ ├── serial │ └── signed │ └── puppetmaster.jeremybryansmith.com.pem ├── certs │ ├── ca.pem │ └── puppetmaster.jeremybryansmith.com.pem ├── crl.pem ├── private_keys │ └── puppetmaster.jeremybryansmith.com.pem └── public_keys └── puppetmaster.jeremybryansmith.com.pem 5 directories, 16 files root@server ~ $ cat /etc/puppetlabs/puppet/puppet.conf # Puppet Server Config: /etc/puppetlabs/puppet/puppet.conf [main] certname = puppetmaster.jeremybryansmith.com server = puppetmaster.jeremybryansmith.com runinterval = 1h strict_variables = true [master] dns_alt_names = puppetmaster.jeremybryansmith.com
On the nodes:
root@node ~ $ puppet resource service puppet ensure=stopped # If previously installed root@node ~ $ mv /etc/puppet /etc/puppet_old root@node ~ $ mv /var/lib/puppet /var/lib/puppet_old root@node ~ $ wget 'https://apt.puppet.com/puppet5-release-xenial.deb' root@node ~ $ dpkg -i puppet5-release-xenial.deb root@node ~ $ apt-get update root@node ~ $ apt-get install puppet-agent root@node ~ $ puppet resource service puppet ensure=stopped root@node ~ $ puppet config print ssldir --section agent /etc/puppetlabs/puppet/ssl root@node ~ $ rm -rf /opt/puppetlabs/puppet/ssl/ root@node ~ $ rm -rf /etc/puppetlabs/puppet/ssl/ root@node ~ $ nmap puppetmaster.jeremybryansmith.com# -p 8140 Starting Nmap 7.60 ( https://nmap.org ) at 2020-03-13 09:58 EDT Nmap scan report for puppetmaster.jeremybryansmith.com (104.131.32.175) Host is up (0.070s latency). PORT STATE SERVICE 8140/tcp open puppet root@node ~ $ echo "" | openssl s_client -servername puppetmaster.jeremybryansmith.com -connect puppetmaster.jeremybryansmith.com:8140 | grep 'CN =' depth=0 CN = puppetmaster.jeremybryansmith.com verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 CN = puppetmaster.jeremybryansmith.com verify error:num=21:unable to verify the first certificate verify return:1 DONE 0 s:CN = puppetmaster.jeremybryansmith.com i:CN = Puppet CA: puppetmaster.jeremybryansmith.com subject=CN = puppetmaster.jeremybryansmith.com issuer=CN = Puppet CA: puppetmaster.jeremybryansmith.com CN = Puppet CA: puppetmaster.jeremybryansmith.com root@node ~ $ cat /etc/puppetlabs/puppet/puppet.conf # Puppet Node Config: /etc/puppetlabs/puppet/puppet.conf [main] certname=latitude.jbsnet.xyz server=puppetmaster.jeremybryansmith.com runinterval = 1h root@node ~ $ puppet agent --test --noop --waitforcert 60 Info: Creating a new SSL key for latitude.jbsnet.xyz Error: request https://puppetmaster.jeremybryansmith.com:8140//puppet-ca/v1/certificate/ca failed: Failed to open TCP connection to puppetmaster.jeremybryansmith.com:8140 (Connection refused - connect(2) for "puppetmaster.jeremybryansmith.com" port 8140) Error: request https://puppetmaster.jeremybryansmith.com:8140//puppet-ca/v1/certificate/ca failed: Failed to open TCP connection to puppetmaster.jeremybryansmith.com:8140 (Connection refused - connect(2) for "puppetmaster.jeremybryansmith.com" port 8140) ...
On the master:
root@server ~ $ puppetserver ca list Requested Certificates: latitude.jbsnet.xyz (SHA256) E2:4B:0C:3D:D7:DE:14:2A:A0:EC:93:E3:2E:8C:78:51:D4:07:FF:A0:BE:A6:FC:66:FF:7B:54:F4:D5:4A:B0:37 root@server ~ $ puppetserver ca sign --certname latitude.jbsnet.xyz Successfully signed certificate request for latitude.jbsnet.xyz root@server ~ $ cat /etc/puppetlabs/code/environments/production/manifests/site.pp # /etc/puppetlabs/code/environments/production/manifests/site.pp ... node 'latitude.jbsnet.xyz' { class {'jeremy': } } ... root@server ~ $ cat /etc/puppetlabs/code/environments/production/modules/jeremy/manifests/init.pp # /etc/puppetlabs/code/environments/production/modules/jeremy/manifests/init.pp class jeremy () { # User 'jeremy' files file { '/home/jeremy/.tmux.conf': ensure => present, mode => '0644', owner => 'jeremy', group => 'jeremy', source => 'puppet:///modules/jeremy/home/jeremy/.tmux.conf', } file { '/home/jeremy/.bash_profile': ensure => present, mode => '0644', owner => 'jeremy', group => 'jeremy', source => 'puppet:///modules/jeremy/home/jeremy/.bash_profile', } file { '/home/jeremy/.bash_aliases': ensure => present, mode => '0644', owner => 'jeremy', group => 'jeremy', source => 'puppet:///modules/jeremy/home/jeremy/.bash_aliases', } file { '/home/jeremy/.vimrc': ensure => present, mode => '0644', owner => 'jeremy', group => 'jeremy', source => 'puppet:///modules/jeremy/home/jeremy/.vimrc', } # Local vim config: should probably go into a class for the specific node... file { '/home/jeremy/.vimrc.local': ensure => present, mode => '0644', owner => 'jeremy', group => 'jeremy', } }
On the nodes:
root@node ~ $ puppet agent --test --noop Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Applying configuration version '1584109458' Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml Notice: Applied catalog in 0.35 seconds
Update: I should not have removed all files in /var/lib/puppet/ssl/certs/, only the relevant ones. Fix:
root@server ~ $ mkdir -p /opt/puppetlabs/puppet/ssl/certs root@server ~ $ cd /opt/puppetlabs/puppet/ssl/certs root@server ~ $ cp -d /etc/ssl/certs/* .
Install additional modules:
root@server ~ $ puppet module install cygnus-disk_facter