puppetserver-ca 1.10.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7200d67071717855a415f5b10ea96e2d008eb9e758b6c1bfcf367d41be1355c4
4
- data.tar.gz: 9b94632f35b636420a5bb80fe6e1878daefb77b4d113aed5122a116113e7ff20
3
+ metadata.gz: 92fe6ca44899e2b5aeec75304212ff99b5e4530cbed2e0b451ad2dd77e2bf09a
4
+ data.tar.gz: c46bc437a85f0a52fde2d3b2b51bda909ad179c1997056810b397d4b27ae4867
5
5
  SHA512:
6
- metadata.gz: 82cca168aa2217dd81a68acb3acaabdaddcc06d494a783a04a27a03965110d0ca66fe5a3eee01e4d949073e4e8594d61a3203f83066e8e64b2e857344a723566
7
- data.tar.gz: 95708d9c5f670001c8c3018cf9804fd189d44cb52bcee4e0e86665c4b8d5fd114ebb7480a6576fcffe81fd2289ba28b1fe2c61a8d610d0733b6d6f947df0f04a
6
+ metadata.gz: 5c7ff17130d558382fa05f5f5bcb537ce9f2bc63a13078d1014783f636fcf0b0c02e604a0d4bf5694a486f67a56dec653430cea0c31eb911b7c15c9ea4e7f59d
7
+ data.tar.gz: 3ad80f74f02aac6a0dab1601cf54aad14756e0b1c0e2e0a30075d1eeafedff03b4546bc7c0cb7bc6dc6197b71abdb9f74816cd4596050b39e6c0f47ca47baf45
data/README.md CHANGED
@@ -84,8 +84,8 @@ To test your changes on a VM:
84
84
  1. Copy the gem to your VM: `scp puppetserver-ca-<version>.gem <your-vm>:.`
85
85
  1. Install puppetserver (FOSS) by installing the relevant release package and then installing the puppetserver package. For example:
86
86
  ```
87
- $ wget http://nightlies.puppet.com/yum/puppet6-nightly-release-el-7.noarch.rpm
88
- $ rpm -i puppet6-nightly-release-el-7.noarch.rpm
87
+ $ wget http://nightlies.puppet.com/yum/puppet-nightly-release-el-7.noarch.rpm
88
+ $ rpm -i puppet-nightly-release-el-7.noarch.rpm
89
89
  $ yum update
90
90
  $ yum install -y puppetserver
91
91
  ```
@@ -97,8 +97,7 @@ To test your changes on a VM:
97
97
  1. To confirm that installation was successful, run `puppetserver ca --help`
98
98
 
99
99
  ### Releasing
100
- To release a new version, run the [release pipeline](https://jenkins-platform.delivery.puppetlabs.net/job/platform_puppetserver-ca_init-multijob_1.x/), which will bump the version, tag, build, and release the gem.
101
-
100
+ To release a new version, run the [release pipeline](https://jenkins-platform.delivery.puppetlabs.net/job/platform_puppetserver-ca_init-multijob_main/), which will bump the version, tag, build, and release the gem.
102
101
 
103
102
  ## Contributing & Support
104
103
 
@@ -85,7 +85,7 @@ BANNER
85
85
  return 1 if Errors.handle_with_usage(@logger, errors)
86
86
  end
87
87
 
88
- puppet = Config::Puppet.parse(config)
88
+ puppet = Config::Puppet.parse(config, @logger)
89
89
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
90
90
 
91
91
  result = clean_certs(certnames, puppet.settings)
@@ -45,7 +45,7 @@ BANNER
45
45
  end
46
46
 
47
47
  puppet = Config::Puppet.new(config_path)
48
- puppet.load
48
+ puppet.load(logger: @logger)
49
49
  settings = puppet.settings
50
50
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
51
51
 
@@ -126,7 +126,7 @@ BANNER
126
126
  # Load, resolve, and validate puppet config settings
127
127
  settings_overrides = {}
128
128
  puppet = Config::Puppet.new(config_path)
129
- puppet.load(settings_overrides)
129
+ puppet.load(cli_overrides: settings_overrides, logger: @logger)
130
130
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
131
131
 
132
132
  # We don't want generate to respect the alt names setting, since it is usually
@@ -4,6 +4,7 @@ require 'puppetserver/ca/config/puppet'
4
4
  require 'puppetserver/ca/errors'
5
5
  require 'puppetserver/ca/local_certificate_authority'
6
6
  require 'puppetserver/ca/utils/cli_parsing'
7
+ require 'puppetserver/ca/utils/config'
7
8
  require 'puppetserver/ca/utils/file_system'
8
9
  require 'puppetserver/ca/utils/signing_digest'
9
10
  require 'puppetserver/ca/x509_loader'
@@ -55,7 +56,7 @@ BANNER
55
56
  settings_overrides[:dns_alt_names] = input['subject-alt-names'] unless input['subject-alt-names'].empty?
56
57
 
57
58
  puppet = Config::Puppet.new(config_path)
58
- puppet.load(settings_overrides)
59
+ puppet.load(cli_overrides: settings_overrides, logger: @logger)
59
60
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
60
61
 
61
62
  # Load most secure signing digest we can for cers/crl/csr signing.
@@ -130,6 +131,8 @@ ERR
130
131
  FileSystem.write_file(location, content, 0640)
131
132
  end
132
133
 
134
+ Puppetserver::Ca::Utils::Config.symlink_to_old_cadir(settings[:cadir], settings[:confdir])
135
+
133
136
  return []
134
137
  end
135
138
 
@@ -78,7 +78,7 @@ Options:
78
78
  return 1 if Errors.handle_with_usage(@logger, errors)
79
79
  end
80
80
 
81
- puppet = Config::Puppet.parse(config)
81
+ puppet = Config::Puppet.parse(config, @logger)
82
82
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
83
83
 
84
84
  if certnames.any?
@@ -1,24 +1,26 @@
1
1
  require 'puppetserver/ca/utils/cli_parsing'
2
2
  require 'puppetserver/ca/utils/file_system'
3
3
  require 'puppetserver/ca/utils/http_client'
4
+ require 'puppetserver/ca/utils/config'
4
5
 
5
6
  module Puppetserver
6
7
  module Ca
7
8
  module Action
8
9
  class Migrate
9
10
  include Puppetserver::Ca::Utils
10
- PUPPETSERVER_CA_DIR = '/etc/puppetlabs/puppetserver/ca'
11
+ PUPPETSERVER_CA_DIR = Puppetserver::Ca::Utils::Config.new_default_cadir
11
12
 
12
- SUMMARY = "Migrate the existing CA directory to /etc/puppetlabs/puppetserver/ca"
13
+ SUMMARY = "Migrate the existing CA directory to #{PUPPETSERVER_CA_DIR}"
13
14
  BANNER = <<-BANNER
14
15
  Usage:
15
16
  puppetserver ca migrate [--help]
16
17
  puppetserver ca migrate [--config PATH]
17
18
 
18
19
  Description:
19
- Migrate an existing CA directory to /etc/puppetlabs/puppetserver/ca. This is for
20
- upgrading from Puppet Platform 6.x to Puppet 7. Use the currently configured
21
- puppet.conf file in your installation, or supply one using the `--config` flag.
20
+ Migrate an existing CA directory to #{PUPPETSERVER_CA_DIR}. This is for
21
+ upgrading from Puppet Platform 6.x to Puppet 7. Uses the default puppet.conf
22
+ in your installation, or use a different config by supplying the `--config` flag.
23
+
22
24
  Options:
23
25
  BANNER
24
26
 
@@ -29,7 +31,7 @@ BANNER
29
31
  def run(input)
30
32
  config_path = input['config']
31
33
  puppet = Config::Puppet.new(config_path)
32
- puppet.load
34
+ puppet.load(logger: @logger, ca_dir_warn: false)
33
35
  return 1 if HttpClient.check_server_online(puppet.settings, @logger)
34
36
 
35
37
  errors = FileSystem.check_for_existing_files(PUPPETSERVER_CA_DIR)
@@ -65,15 +67,7 @@ SUCCESS_MESSAGE
65
67
 
66
68
  def migrate(old_cadir, new_cadir=PUPPETSERVER_CA_DIR)
67
69
  FileUtils.mv(old_cadir, new_cadir)
68
- FileUtils.symlink(new_cadir, old_cadir)
69
- # Ensure the symlink has the same ownership as the actual cadir.
70
- # This requires using `FileUtils.chown` rather than `File.chown`, as
71
- # the latter will update the ownership of the target rather than the
72
- # link itself.
73
- # Symlink permissions are ignored in favor of the target's permissions,
74
- # so we don't have to change those.
75
- cadir = File.stat(new_cadir)
76
- FileUtils.chown(cadir.uid, cadir.gid, old_cadir)
70
+ FileSystem.forcibly_symlink(new_cadir, old_cadir)
77
71
  end
78
72
 
79
73
  def parse(args)
@@ -83,7 +83,7 @@ BANNER
83
83
  return 1 if Errors.handle_with_usage(@logger, errors)
84
84
  end
85
85
 
86
- puppet = Config::Puppet.parse(config)
86
+ puppet = Config::Puppet.parse(config, @logger)
87
87
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
88
88
 
89
89
  result = revoke_certs(certnames, puppet.settings)
@@ -3,6 +3,7 @@ require 'optparse'
3
3
  require 'puppetserver/ca/config/puppet'
4
4
  require 'puppetserver/ca/errors'
5
5
  require 'puppetserver/ca/local_certificate_authority'
6
+ require 'puppetserver/ca/utils/config'
6
7
  require 'puppetserver/ca/utils/cli_parsing'
7
8
  require 'puppetserver/ca/utils/file_system'
8
9
  require 'puppetserver/ca/utils/signing_digest'
@@ -55,7 +56,7 @@ BANNER
55
56
  settings_overrides[:dns_alt_names] = input['subject-alt-names'] unless input['subject-alt-names'].empty?
56
57
 
57
58
  puppet = Config::Puppet.new(config_path)
58
- puppet.load(settings_overrides)
59
+ puppet.load(cli_overrides: settings_overrides, logger: @logger)
59
60
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
60
61
 
61
62
  # Load most secure signing digest we can for cers/crl/csr signing.
@@ -135,6 +136,8 @@ ERR
135
136
  FileSystem.write_file(location, content, 0640)
136
137
  end
137
138
 
139
+ Puppetserver::Ca::Utils::Config.symlink_to_old_cadir(settings[:cadir], settings[:confdir])
140
+
138
141
  return []
139
142
  end
140
143
 
@@ -62,7 +62,7 @@ Options:
62
62
  return 1 if Errors.handle_with_usage(@logger, errors)
63
63
  end
64
64
 
65
- puppet = Config::Puppet.parse(config)
65
+ puppet = Config::Puppet.parse(config, @logger)
66
66
  return 1 if Errors.handle_with_usage(@logger, puppet.errors)
67
67
 
68
68
  ca = Puppetserver::Ca::CertificateAuthority.new(@logger, puppet.settings)
@@ -23,9 +23,9 @@ module Puppetserver
23
23
  # A regex describing valid formats with groups for capturing the value and units
24
24
  TTL_FORMAT = /^(\d+)(y|d|h|m|s)?$/
25
25
 
26
- def self.parse(config_path)
26
+ def self.parse(config_path, logger)
27
27
  instance = new(config_path)
28
- instance.load
28
+ instance.load(logger: logger)
29
29
 
30
30
  return instance
31
31
  end
@@ -34,7 +34,7 @@ module Puppetserver
34
34
 
35
35
  def initialize(supplied_config_path = nil)
36
36
  @using_default_location = !supplied_config_path
37
- @config_path = supplied_config_path || user_specific_conf_file
37
+ @config_path = supplied_config_path || user_specific_puppet_config
38
38
 
39
39
  @settings = nil
40
40
  @errors = []
@@ -46,20 +46,15 @@ module Puppetserver
46
46
  # on Windows are unsupported.
47
47
  # Note that Puppet Server runs as the [pe-]puppet user but to
48
48
  # start/stop it you must be root.
49
- def user_specific_conf_dir
50
- @user_specific_conf_dir ||=
51
- if Puppetserver::Ca::Utils::Config.running_as_root?
52
- '/etc/puppetlabs/puppet'
53
- else
54
- "#{ENV['HOME']}/.puppetlabs/etc/puppet"
55
- end
49
+ def user_specific_puppet_confdir
50
+ @user_specific_puppet_confdir ||= Puppetserver::Ca::Utils::Config.puppet_confdir
56
51
  end
57
52
 
58
- def user_specific_conf_file
59
- user_specific_conf_dir + '/puppet.conf'
53
+ def user_specific_puppet_config
54
+ user_specific_puppet_confdir + '/puppet.conf'
60
55
  end
61
56
 
62
- def load(cli_overrides = {})
57
+ def load(cli_overrides: {}, logger:, ca_dir_warn: true)
63
58
  if explicitly_given_config_file_or_default_config_exists?
64
59
  results = parse_text(File.read(@config_path))
65
60
  end
@@ -78,7 +73,7 @@ module Puppetserver
78
73
  overrides[:serverport] ||= overrides.delete(:masterport)
79
74
  end
80
75
 
81
- @settings = resolve_settings(overrides).freeze
76
+ @settings = resolve_settings(overrides, logger, ca_dir_warn: ca_dir_warn).freeze
82
77
  end
83
78
 
84
79
  def default_certname
@@ -94,7 +89,7 @@ module Puppetserver
94
89
 
95
90
  # Resolve settings from default values, with any overrides for the
96
91
  # specific settings or their dependent settings (ssldir, cadir) taken into account.
97
- def resolve_settings(overrides = {})
92
+ def resolve_settings(overrides = {}, logger, ca_dir_warn: true)
98
93
  unresolved_setting = /\$[a-z_]+/
99
94
 
100
95
  # Returning the key for unknown keys (rather than nil) is required to
@@ -106,7 +101,7 @@ module Puppetserver
106
101
  # These need to be evaluated before we can construct their dependent
107
102
  # defaults below
108
103
  base_defaults = [
109
- [:confdir, user_specific_conf_dir],
104
+ [:confdir, user_specific_puppet_confdir],
110
105
  [:ssldir,'$confdir/ssl'],
111
106
  [:certdir, '$ssldir/certs'],
112
107
  [:certname, default_certname],
@@ -153,9 +148,13 @@ module Puppetserver
153
148
  end
154
149
 
155
150
  cadir = find_cadir(overrides.fetch(:cadir, false),
156
- settings[:confdir])
151
+ settings[:confdir],
152
+ settings[:ssldir],
153
+ logger,
154
+ ca_dir_warn)
157
155
  settings[:cadir] = substitutions['$cadir'] = cadir
158
156
 
157
+
159
158
  dependent_defaults.each do |setting_name, default_value|
160
159
  setting_value = overrides.fetch(setting_name, default_value)
161
160
  settings[setting_name] = setting_value
@@ -218,17 +217,29 @@ module Puppetserver
218
217
 
219
218
  private
220
219
 
221
- def find_cadir(configured_cadir, confdir)
220
+
221
+ def find_cadir(configured_cadir, confdir, ssldir, logger, ca_dir_warn)
222
+ warning = 'The cadir is currently configured to be inside the ' +
223
+ '%{ssldir} directory. This config setting and the directory ' +
224
+ 'location will not be used in a future version of puppet. ' +
225
+ 'Please run the puppetserver ca tool to migrate out from the ' +
226
+ 'puppet confdir to the /etc/puppetlabs/puppetserver/ca directory. ' +
227
+ 'Use `puppetserver ca migrate --help` for more info.'
228
+
222
229
  if configured_cadir
230
+ if ca_dir_warn && configured_cadir.start_with?(ssldir)
231
+ logger.warn(warning % {ssldir: ssldir})
232
+ end
223
233
  configured_cadir
234
+
224
235
  else
225
236
  old_cadir = Puppetserver::Ca::Utils::Config.old_default_cadir(confdir)
226
237
  new_cadir = Puppetserver::Ca::Utils::Config.new_default_cadir(confdir)
227
-
228
- if File.exist?("#{new_cadir}/ca_crt.pem")
229
- new_cadir
230
- else
238
+ if File.exist?(old_cadir) && !File.symlink?(old_cadir)
239
+ logger.warn(warning % {ssldir: ssldir}) if ca_dir_warn
231
240
  old_cadir
241
+ else
242
+ new_cadir
232
243
  end
233
244
  end
234
245
  end
@@ -1,3 +1,5 @@
1
+ require 'puppetserver/ca/utils/file_system'
2
+
1
3
  module Puppetserver
2
4
  module Ca
3
5
  module Utils
@@ -31,6 +33,10 @@ module Puppetserver
31
33
  File.join(File.dirname(puppet_confdir), 'puppetserver')
32
34
  end
33
35
 
36
+ def self.default_ssldir(confdir = puppet_confdir)
37
+ File.join(confdir, 'ssl')
38
+ end
39
+
34
40
  def self.old_default_cadir(confdir = puppet_confdir)
35
41
  File.join(confdir, 'ssl', 'ca')
36
42
  end
@@ -38,6 +44,17 @@ module Puppetserver
38
44
  def self.new_default_cadir(confdir = puppet_confdir)
39
45
  File.join(puppetserver_confdir(confdir), 'ca')
40
46
  end
47
+
48
+ def self.symlink_to_old_cadir(current_cadir, puppet_confdir)
49
+ old_cadir = old_default_cadir(puppet_confdir)
50
+ new_cadir = new_default_cadir(puppet_confdir)
51
+ return if current_cadir != new_cadir
52
+ # This is only run on setup/import, so there should be no files in the
53
+ # old cadir, so it should be safe to forcibly remove it (which we need
54
+ # to do in order to create a symlink).
55
+ Puppetserver::Ca::Utils::FileSystem.forcibly_symlink(new_cadir, old_cadir)
56
+ end
57
+
41
58
  end
42
59
  end
43
60
  end
@@ -50,6 +50,19 @@ module Puppetserver
50
50
  errors
51
51
  end
52
52
 
53
+ def self.forcibly_symlink(source, link_target)
54
+ FileUtils.remove_dir(link_target, true)
55
+ FileUtils.symlink(source, link_target)
56
+ # Ensure the symlink has the same ownership as the source.
57
+ # This requires using `FileUtils.chown` rather than `File.chown`, as
58
+ # the latter will update the ownership of the source rather than the
59
+ # link itself.
60
+ # Symlink permissions are ignored in favor of the source's permissions,
61
+ # so we don't have to change those.
62
+ source_info = File.stat(source)
63
+ FileUtils.chown(source_info.uid, source_info.gid, link_target)
64
+ end
65
+
53
66
  def initialize
54
67
  @user, @group = find_user_and_group
55
68
  end
@@ -1,5 +1,5 @@
1
1
  module Puppetserver
2
2
  module Ca
3
- VERSION = "1.10.0"
3
+ VERSION = "2.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppetserver-ca
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet, Inc.