@@ -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