class S3MasterCli

Public Instance Methods

apply(cli_bucket=nil, cli_policy_type=nil, cli_policy_id=nil) click to toggle source
# File lib/s3_master/cli.rb, line 51
def apply(cli_bucket=nil, cli_policy_type=nil, cli_policy_id=nil)
  config = S3Master::Config.new(options[:"config-file"])
  config.each do |bucket, policy_type, policy_id|
    next if !cli_bucket.nil? && cli_bucket != bucket ||
            !cli_policy_type.nil? && cli_policy_type != policy_type ||
            !cli_policy_id.nil? && cli_policy_id != policy_id

    policy_diff = diff(bucket, policy_type, policy_id)

    next if policy_diff.identical? || ! (options[:force] || yes?("Proceed? (y/N)"))

    local_policy = S3Master::LocalPolicy.new(config, bucket, policy_type, options.merge(id: policy_id).symbolize_keys)
    remote_policy = S3Master::RemotePolicy.new(bucket, policy_type, {id: policy_id, region: config.region(bucket)})
    remote_policy.write(local_policy)
  end
end
diff(bucket, policy_type, policy_id=nil) click to toggle source
# File lib/s3_master/cli.rb, line 25
def diff(bucket, policy_type, policy_id=nil)
  config = S3Master::Config.new(options[:"config-file"])

  remote_policy = S3Master::RemotePolicy.new(bucket, policy_type, {id: policy_id, region: config.region(bucket)})
  local_policy = S3Master::LocalPolicy.new(config, bucket, policy_type, options.merge(id: policy_id).symbolize_keys)

  if options[:debug]
    bkt = Aws::S3::Bucket.new(bucket)
    puts "%s: %s" % [bkt.name, bkt.url]
    puts "=== Remote Policy:\n%s" % [JSON.neat_generate(remote_policy.body, sort: true)]
    puts "=== Local Policy:\n%s" % [JSON.neat_generate(local_policy.body, sort: true)]
  end

  policy_diff = S3Master::PolicyDiffer.new(remote_policy.body, local_policy.body)
  prefix = "#{bucket}/#{policy_type}"
  prefix += "/#{policy_id}" if policy_id

  if policy_diff.identical?
    puts "#{prefix}: Local and remote policies match."
  else
    puts "#{prefix} diff:\n%s" % [policy_diff.to_s]
  end
  policy_diff
end
fetch(buckets=nil, policy_types=S3Master::RemotePolicy::POLICY_TYPES, policy_id=nil) click to toggle source
# File lib/s3_master/cli.rb, line 69
def fetch(buckets=nil, policy_types=S3Master::RemotePolicy::POLICY_TYPES, policy_id=nil)
  config = S3Master::Config.new(options[:"config-file"])
  buckets ||= config[:buckets].keys

  Array(buckets).each do |bucket|
    Array(policy_types).each do |policy_type|
      next if ! S3Master::RemotePolicy.known_policy_type?(policy_type)
      local_policy = S3Master::LocalPolicy.new(config, bucket, policy_type, options.merge(skip_load: true, id: policy_id).symbolize_keys)
      remote_policy = S3Master::RemotePolicy.new(bucket, policy_type, {id: policy_id, region: config.region(bucket)})

      if !local_policy.basename.nil?
        local_policy.write(remote_policy)
      else
        puts "%s policy:\n%s" % [policy_type, remote_policy.pretty_body]
      end
    end
  end
end
status(user_bucket=nil) click to toggle source
# File lib/s3_master/cli.rb, line 89
def status(user_bucket=nil)
  config = S3Master::Config.new(options[:"config-file"])

  any_differences = false
  config.each do |bucket, policy_type, policy_id|
    next if !user_bucket.nil? && user_bucket != bucket
    local_policy = S3Master::LocalPolicy.new(config, bucket, policy_type, options.merge(id: policy_id).symbolize_keys)
    remote_policy = S3Master::RemotePolicy.new(bucket, policy_type, {id: policy_id, region: config.region(bucket)})

    policy_diff = S3Master::PolicyDiffer.new(remote_policy.body, local_policy.body)
    if !policy_diff.identical?
      any_differences = true

      if policy_id.nil?
        puts "* %s: %s" % [bucket, policy_type]
      else
        puts "* %s: %s %s" % [bucket, policy_type, policy_id]
      end
    end
  end

  puts "No differences detected." if !any_differences
end