Skip to content

Commit a8e6406

Browse files
author
Kevin Paulisse
committed
Add build-dir handling of preserve_environment and related
1 parent d94dd9b commit a8e6406

1 file changed

Lines changed: 27 additions & 7 deletions

File tree

lib/octocatalog-diff/catalog-util/builddir.rb

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,21 @@ def initialize(options = {}, logger = nil)
4848
@facts_terminus = options.fetch(:facts_terminus, 'yaml')
4949

5050
create_structure
51-
install_directory_symlink(logger, options[:basedir])
51+
52+
if options[:preserve_environment]
53+
install_directory_symlink(logger, File.join(options[:basedir], 'environments'), 'environments')
54+
options.fetch(:create_symlinks, %w(modules manifests)).each do |x|
55+
install_directory_symlink(logger, File.join(options[:basedir], x), x)
56+
end
57+
else
58+
if options[:environment]
59+
logger.warn '--environment is ignored unless --preserve-environment is used' unless logger.nil?
60+
end
61+
if options[:create_symlinks]
62+
logger.warn '--create-symlinks is ignored unless --preserve-environment is used' unless logger.nil?
63+
end
64+
install_directory_symlink(logger, options[:basedir])
65+
end
5266

5367
# These configurations are optional. Don't call the methods if parameters are nil.
5468
unless options[:puppetdb_url].nil?
@@ -64,7 +78,7 @@ def initialize(options = {}, logger = nil)
6478

6579
# Create common structure
6680
def create_structure
67-
%w(environments facts var var/ssl var/yaml var/yaml/facts).each do |dir|
81+
%w(facts var var/ssl var/yaml var/yaml/facts).each do |dir|
6882
Dir.mkdir(File.join(@tempdir, dir))
6983
FileUtils.chmod 0o755, File.join(@tempdir, dir)
7084
end
@@ -150,14 +164,20 @@ def install_fact_file(logger, options)
150164

151165
# Install symbolic link to puppet environment
152166
# @param dir [String] Directory to link to
153-
def install_directory_symlink(logger, dir)
167+
# @param target [String] Where the symlink is created, relative to tempdir
168+
def install_directory_symlink(logger, dir, target = 'environments/production')
154169
raise ArgumentError, "Called install_directory_symlink with #{dir.class} argument" unless dir.is_a?(String)
155170
raise Errno::ENOENT, "Specified directory #{dir} doesn't exist" unless File.directory?(dir)
171+
symlink_target = File.join(@tempdir, target)
172+
173+
if target =~ %r{/}
174+
parent_dir = File.dirname(symlink_target)
175+
FileUtils.mkdir_p parent_dir
176+
end
156177

157-
environment_symlink = File.join(@tempdir, 'environments', 'production')
158-
FileUtils.rm_f environment_symlink if File.exist?(environment_symlink)
159-
FileUtils.symlink dir, environment_symlink
160-
logger.debug("Symlinked #{environment_symlink} -> #{dir}")
178+
FileUtils.rm_f symlink_target if File.exist?(symlink_target)
179+
FileUtils.symlink dir, symlink_target
180+
logger.debug("Symlinked #{symlink_target} -> #{dir}")
161181
end
162182

163183
# Install ENC

0 commit comments

Comments
 (0)