class Bixby::Provision::Config
Constants
- EXPORTS
Public Instance Methods
file(dest, opts={})
click to toggle source
# File lib/bixby/provision/dsl/config.rb, line 11 def file(dest, opts={}) # By default, attempt to preserve ownership and mode if none are given in opts opts[:preserve] = true if !opts.include? :preserve dest_file = File.expand_path(dest) if File.exists? dest_file then stat = File.stat(dest_file) old_owner = "#{stat.uid}:#{stat.gid}" old_mode = stat.mode else old_owner = old_mode = nil dir.create(File.dirname(dest_file)) end source = resolve_file(opts.delete(:source), dest_file) if source.nil? then # TODO raise end template = get_template(source) if template.nil? then if sha256sum(dest_file) == sha256sum(source) then logger.info "[config] skipping #{dest_file}: sha256sum matches" return end # just copy the file over if File.writable?(dest_file) then logger.info "[config] copying #{source} to #{dest}" FileUtils.cp(source, dest_file) else logger.info "[config] copying #{source} to #{dest} (as root)" logged_sudo("cp #{source} #{dest_file}") end else # use template logger.info "[config] rendering template #{source}" str = template.render(self.proxy) if (File.exists? dest_file and File.writable? dest_file) or File.writable? File.dirname(dest_file) then # write directly File.open(dest_file, 'w') { |f| f.write str } else # write to temp and mv into place t = Tempfile.new("bixby-provision-") t.write str t.close logged_sudo("mv #{t.path} #{dest_file}") end end # set correct ownership/mode owner = opts[:chown] mode = opts[:chmod] if opts[:preserve] then owner ||= old_owner mode ||= old_mode end chown(dest_file, owner) chmod(dest_file, mode) end
Private Instance Methods
get_template(file)
click to toggle source
# File lib/bixby/provision/dsl/config.rb, line 84 def get_template(file) return nil if File.basename(file) !~ /\..*$/ begin return Tilt.new(file) rescue RuntimeError => ex if ex.message =~ /No template engine registered/ then return nil end raise ex end nil end
resolve_file(file, dest)
click to toggle source
# File lib/bixby/provision/dsl/config.rb, line 97 def resolve_file(file, dest) if file.nil? then return nil if dest.nil? # look for a file with the same name as in dest file = File.basename(dest) end f = File.expand_path(file) return f if File.exists? f # search for it in file/ f = File.expand_path("../files/#{file}", self.manifest.filename) return f if File.exists? f # look for the given file with any extension files = Dir.glob("#{f}.*") return files.shift if files.size == 1 return nil end