class Opsup::CookbookUploader

Public Class Methods

create(s3:, config:) click to toggle source
# File lib/opsup/cookbook_uploader.rb, line 19
def self.create(s3:, config:)
  new(s3: s3, config: config, logger: Opsup::Logger.instance)
end
new(s3:, config:, logger:) click to toggle source
# File lib/opsup/cookbook_uploader.rb, line 30
def initialize(s3:, config:, logger:)
  @s3 = T.let(s3, Aws::S3::Client)
  @config = T.let(config, Opsup::Config)
  @logger = T.let(logger, ::Logger)
end

Public Instance Methods

build_and_upload(cookbook_url:, s3_object_config:) click to toggle source
# File lib/opsup/cookbook_uploader.rb, line 37
def build_and_upload(cookbook_url:, s3_object_config:)
  Dir.mktmpdir do |work_dir|
    clone(work_dir, cookbook_url)
    package_path = build(work_dir)
    upload(package_path, s3_object_config)
  end
end

Private Instance Methods

build(dir) click to toggle source
# File lib/opsup/cookbook_uploader.rb, line 60
        def build(dir)
  Dir.chdir(dir) do
    system('bundle')
    system('bundle exec berks package built.tar.gz')
  end
  "#{dir}/built.tar.gz"
end
clone(dir, url) click to toggle source
# File lib/opsup/cookbook_uploader.rb, line 55
        def clone(dir, url)
  system("git clone --depth=1 #{url} #{dir}")
end
system(cmd) click to toggle source
Calls superclass method
# File lib/opsup/cookbook_uploader.rb, line 46
        def system(cmd)
  if @config.dryrun
    @logger.info("(dryrun) #{cmd}")
  else
    super(cmd)
  end
end
upload(package_path, object_config) click to toggle source
# File lib/opsup/cookbook_uploader.rb, line 69
        def upload(package_path, object_config)
  unless @config.dryrun
    @s3.put_object(
      bucket: object_config.bucket_name,
      body: File.open(package_path),
      key: object_config.key,
    )
  end
  @logger.info("cookbook #{object_config.key} uploaded")
end