Module: Heirloom::CLI::Shared

Included in:
Authorize, Catalog, Destroy, Download, List, Rotate, Setup, Show, Tag, Teardown, Upload
Defined in:
lib/heirloom/cli/shared.rb

Instance Method Summary collapse

Instance Method Details

#ensure_archive_domain_empty(args) ⇒ Object



151
152
153
154
155
156
157
158
159
160
# File 'lib/heirloom/cli/shared.rb', line 151

def ensure_archive_domain_empty(args)
  config  = args[:config]
  archive = args[:archive]
  logger  = config.logger

  unless archive.count.zero?
    logger.error "Not empty."
    exit 1
  end
end

#ensure_archive_exists(args) ⇒ Object



140
141
142
143
144
145
146
147
148
149
# File 'lib/heirloom/cli/shared.rb', line 140

def ensure_archive_exists(args)
  archive = args[:archive]
  config  = args[:config]
  logger  = config.logger

  unless archive.exists?
    logger.error "Archive does not exist."
    exit 1
  end
end

#ensure_buckets_available(args) ⇒ Object



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/heirloom/cli/shared.rb', line 187

def ensure_buckets_available(args)
  config        = args[:config]
  regions       = args[:regions]
  bucket_prefix = args[:bucket_prefix]
  logger  = config.logger

  checker = Heirloom::Checker.new :config => config

  available = checker.bucket_name_available? :bucket_prefix => bucket_prefix,
                                             :regions       => regions,
                                             :config        => config
  if available
    true
  else
    logger.error "Bucket prefix #{bucket_prefix} not available across regions #{regions.join}."
    exit 1
  end
end

#ensure_buckets_exist(args) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/heirloom/cli/shared.rb', line 109

def ensure_buckets_exist(args)
  config        = args[:config]
  bucket_prefix = args[:bucket_prefix]
  name          = args[:name]
  regions       = args[:regions]
  logger        = config.logger

  archive = Archive.new :name   => name,
                        :config => config

  unless archive.buckets_exist? :regions       => regions,
                                :bucket_prefix => bucket_prefix
    logger.error "Required buckets for '#{bucket_prefix}' do not exist."
    exit 1
  end
end

#ensure_catalog_domain_exists(args) ⇒ Object



162
163
164
165
166
167
168
169
170
171
172
# File 'lib/heirloom/cli/shared.rb', line 162

def ensure_catalog_domain_exists(args)
  config  = args[:config]
  catalog = args[:catalog]
  logger  = config.logger
  region  = config.

  unless catalog.catalog_domain_exists?
    logger.error "Catalog does not exist in #{region}."
    exit 1
  end
end

#ensure_directory_is_writable(args) ⇒ Object



98
99
100
101
102
103
104
105
106
107
# File 'lib/heirloom/cli/shared.rb', line 98

def ensure_directory_is_writable(args)
  config = args[:config]
  path = args[:path]
  logger = config.logger

  unless File.writable? path
    logger.error "You don't have permissions to write to #{path}."
    exit 1
  end
end

#ensure_domain_exists(args) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/heirloom/cli/shared.rb', line 126

def ensure_domain_exists(args)
  config = args[:config]
  name   = args[:name]
  logger = config.logger

  archive = Archive.new :name   => name,
                        :config => config

  unless archive.domain_exists?
    logger.error "'#{name}' metadata domain does not exist in '#{config.}'."
    exit 1
  end
end

#ensure_entry_does_not_exist_in_catalog(args) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/heirloom/cli/shared.rb', line 206

def ensure_entry_does_not_exist_in_catalog(args)
  config  = args[:config]
  catalog = args[:catalog]
  entry   = args[:entry]
  force   = args[:force]
  logger  = config.logger
  region  = config.

  if catalog.entry_exists_in_catalog?(entry) && !force
    logger.error "Entry #{entry} exists in catalog. Use --force to overwrite."
    exit 1
  end
end

#ensure_entry_exists_in_catalog(args) ⇒ Object



174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/heirloom/cli/shared.rb', line 174

def ensure_entry_exists_in_catalog(args)
  config  = args[:config]
  catalog = args[:catalog]
  entry   = args[:entry]
  logger  = config.logger
  region  = config.

  unless catalog.entry_exists_in_catalog? entry
    logger.error "Entry for #{entry} does not exist in #{region} catalog."
    exit 1
  end
end

#ensure_metadata_in_upload_region(args) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/heirloom/cli/shared.rb', line 74

def (args)
  config  = args[:config]
  regions = args[:regions]
  logger  = config.logger

  unless regions.include? config.
    logger.error "Upload Regions: '#{regions.join(', ')}'."
    logger.error "Metadata Region: '#{config.}'."
    logger.error "Upload regions must include metadata region."
    exit 1
  end
end

#ensure_path_is_directory(args) ⇒ Object



87
88
89
90
91
92
93
94
95
96
# File 'lib/heirloom/cli/shared.rb', line 87

def ensure_path_is_directory(args)
  config = args[:config]
  path = args[:path]
  logger = config.logger

  unless File.directory? path
    logger.error "#{path} is not a directory."
    exit 1
  end
end

#ensure_valid_bucket_prefix(args) ⇒ Object



230
231
232
233
234
235
236
237
238
239
# File 'lib/heirloom/cli/shared.rb', line 230

def ensure_valid_bucket_prefix(args)
  config        = args[:config]
  bucket_prefix = args[:bucket_prefix]
  logger        = config.logger

  unless bucket_prefix =~ /^[0-9a-z\-]+$/
    logger.error "Invalid bucket prefix '#{bucket_prefix}'. Can only contain lower case letters, numbers and dashes."
    exit 1
  end
end

#ensure_valid_name(args) ⇒ Object



220
221
222
223
224
225
226
227
228
# File 'lib/heirloom/cli/shared.rb', line 220

def ensure_valid_name(args)
  config = args[:config]
  name   = args[:name]
  logger = config.logger
  unless name =~ /^[0-9a-z\-\_]+$/
    logger.error "Invalid name '#{name}'. Can only contain lower case letters, numbers, dashes and underscores."
    exit 1
  end
end

#ensure_valid_options(args) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/heirloom/cli/shared.rb', line 26

def ensure_valid_options(args)
  provided = args[:provided]
  required = args[:required]
  config   = args[:config]
  logger   = config.logger

  unless config.use_iam_profile
    required << :aws_access_key unless config.access_key
    required << :aws_secret_key unless config.secret_key
  end

  missing_opts = required.sort.map do |opt|
    case provided[opt]
    when nil, []
      pretty_opt = opt.to_s.gsub('_', '-')
      "Option '#{pretty_opt}' required but not specified."
    end
  end

  missing_opts.compact!

  missing_opts.each {|missing_opt| logger.error missing_opt}

  exit 1 unless missing_opts.empty?
end

#ensure_valid_region(args) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/heirloom/cli/shared.rb', line 61

def ensure_valid_region(args)
  config = args[:config]
  region = args[:region]
  logger = config.logger
  valid_regions = ['us-east-1', 'us-west-1', 'us-west-2']

  unless valid_regions.include? region
    logger.error "'#{region}' is not a valid region."
    logger.error "Valid regions: #{valid_regions.join(', ')}"
    exit 1
  end
end

#ensure_valid_regions(args) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/heirloom/cli/shared.rb', line 52

def ensure_valid_regions(args)
  regions = args[:regions]
  config = args[:config]
  regions.each do |region|
    ensure_valid_region :region => region, 
                        :config => config
  end
end

#ensure_valid_secret(args) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/heirloom/cli/shared.rb', line 16

def ensure_valid_secret(args)
  config = args[:config]
  secret = args[:secret]
  logger = config.logger
  if secret && secret.length < 8
    logger.error "Secret must be at least 8 characters long."
    exit 1
  end
end

#latest_id(args) ⇒ Object



241
242
243
244
245
# File 'lib/heirloom/cli/shared.rb', line 241

def latest_id(args)
  archive = Archive.new :name   => args[:name],
                        :config => args[:config]
  archive.list(1).first
end

#load_config(args) ⇒ Object



5
6
7
8
9
10
11
12
13
14
# File 'lib/heirloom/cli/shared.rb', line 5

def load_config(args)
  opts = args[:opts]
  logger = args[:logger]
  config = Config.new :logger => logger, :environment => opts[:environment]
  config.access_key = opts[:aws_access_key] if opts[:aws_access_key]
  config.secret_key = opts[:aws_secret_key] if opts[:aws_secret_key]
  config. = opts[:metadata_region] if opts[:metadata_region]
  config.use_iam_profile = opts[:use_iam_profile] if opts[:use_iam_profile]
  config
end

#read_secret(args) ⇒ Object



247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/heirloom/cli/shared.rb', line 247

def read_secret(args)
  opts   = args[:opts]
  config = args[:config]
  logger = config.logger

  return nil unless opts[:secret] || opts[:secret_file]

  return opts[:secret] if opts[:secret]

  unless File.exists? opts[:secret_file]
    logger.error "Unable to read #{opts[:secret_file]}."
    exit 1
  end

  (File.read opts[:secret_file]).chomp
end