Skip to content

Commit

Permalink
Merge pull request #8415 from ciprianbadescu/maint/master/mergeback
Browse files Browse the repository at this point in the history
  • Loading branch information
gimmyxd committed Oct 22, 2020
2 parents 39bf1bb + bebf099 commit e0f0cd0
Show file tree
Hide file tree
Showing 2 changed files with 161 additions and 0 deletions.
23 changes: 23 additions & 0 deletions lib/puppet/settings.rb
Expand Up @@ -385,6 +385,19 @@ def initialize_app_defaults(app_defaults)
call_hooks_deferred_to_application_initialization
issue_deprecations

run_mode = Puppet::Util::RunMode[self.preferred_run_mode]
if run_mode.agent? || run_mode.server?
if self.set_in_section?(:masterport, run_mode.name) && !self.set_in_section?(:serverport, run_mode.name)
self[:serverport] = self[:masterport]
elsif self.set_by_config?(:masterport) && !self.set_by_config?(:serverport)
self[:serverport] = self[:masterport]
elsif self.set_in_section?(:serverport, run_mode.name) && !self.set_in_section?(:masterport, run_mode.name)
self[:masterport] = self[:serverport]
elsif self.set_by_config?(:serverport) && !self.set_by_config?(:masterport)
self[:masterport] = self[:serverport]
end
end

REQUIRED_APP_SETTINGS.each do |key|
create_ancestors(Puppet[key])
end
Expand Down Expand Up @@ -916,6 +929,16 @@ def set_by_config?(param, environment = nil, run_mode = preferred_run_mode)
end
end

# Allow later inspection to determine if the setting was set by user
# config, rather than a default setting.
def set_in_section?(param, section)
param = param.to_sym
vals = searchpath_values(SearchPathElement.new(section, :section))
if vals
vals.lookup(param)
end
end

# Patches the value for a param in a section.
# This method is required to support the use case of unifying --dns-alt-names and
# --dns_alt_names in the certificate face. Ideally this should be cleaned up.
Expand Down
138 changes: 138 additions & 0 deletions spec/unit/settings_spec.rb
Expand Up @@ -897,6 +897,144 @@ def metadata(setting)
expect(metadata(@settings.setting(:myfile))).to eq({:mode => "664"})
end

context "when setting serverport and masterport" do
before(:each) do
default_values = {}
PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS.keys.each do |key|
default_values[key] = 'default value'
end
@settings.define_settings :main, PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS
@settings.define_settings :server, :masterport => { :desc => "a", :default => 1000 }
@settings.define_settings :server, :serverport => { :desc => "a", :default => 1000 }
@settings.define_settings :server, :ca_port => { :desc => "a", :default => "$serverport" }
@settings.define_settings :server, :report_port => { :desc => "a", :default => "$serverport" }
expect(@settings).to receive(:read_file).and_return(text)
@settings.send(:parse_config_files)
@settings.initialize_app_defaults(default_values.merge(:run_mode => :agent))
expect(@settings.preferred_run_mode).to eq(:agent)
end

context 'with serverport in main and masterport in agent' do
let(:text) do
"[main]
serverport = 444
[agent]
masterport = 445
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with serverport and masterport in main' do
let(:text) do
"[main]
serverport = 445
masterport = 444
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with serverport and masterport in agent' do
let(:text) do
"[agent]
serverport = 445
masterport = 444
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with both serverport and masterport in main and agent' do
let(:text) do
"[main]
serverport = 447
masterport = 442
[agent]
serverport = 445
masterport = 444
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with serverport in agent and masterport in main' do
let(:text) do
"[agent]
serverport = 444
[main]
masterport = 445
"
end

it { expect(@settings[:serverport]).to eq(444) }
it { expect(@settings[:ca_port]).to eq("444") }
it { expect(@settings[:report_port]).to eq("444") }
end

context 'with masterport in main' do
let(:text) do
"[main]
masterport = 445
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with masterport in agent' do
let(:text) do
"[agent]
masterport = 445
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with serverport in agent' do
let(:text) do
"[agent]
serverport = 445
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:masterport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end

context 'with serverport in main' do
let(:text) do
"[main]
serverport = 445
"
end

it { expect(@settings[:serverport]).to eq(445) }
it { expect(@settings[:masterport]).to eq(445) }
it { expect(@settings[:ca_port]).to eq("445") }
it { expect(@settings[:report_port]).to eq("445") }
end
end

it "does not use the metadata from the same setting in a different section" do
default_values = {}
PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS.keys.each do |key|
Expand Down

0 comments on commit e0f0cd0

Please sign in to comment.