Class: VMC::Cli::Config

Inherits:
Object show all
Defined in:
lib/cli/config.rb

Constant Summary collapse

DEFAULT_TARGET =
'api.vcap.me'
TARGET_FILE =
'~/.vmc_target'
UHURU_TARGET_FILE =
'~/.vmc_uhuru_target'
TOKEN_FILE =
'~/.vmc_token'
INSTANCES_FILE =
'~/.vmc_instances'
ALIASES_FILE =
'~/.vmc_aliases'
CLIENTS_FILE =
'~/.vmc_clients'
MICRO_FILE =
'~/.vmc_micro'
STOCK_CLIENTS =
File.expand_path("../../../config/clients.yml", __FILE__)

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(work_dir = Dir.pwd) ⇒ Config

Returns a new instance of Config.



187
188
189
# File 'lib/cli/config.rb', line 187

def initialize(work_dir = Dir.pwd)
  @work_dir = work_dir
end

Class Attribute Details

.colorizeObject

Returns the value of attribute colorize.



23
24
25
# File 'lib/cli/config.rb', line 23

def colorize
  @colorize
end

.nozipObject

Returns the value of attribute nozip.



26
27
28
# File 'lib/cli/config.rb', line 26

def nozip
  @nozip
end

.outputObject

Returns the value of attribute output.



24
25
26
# File 'lib/cli/config.rb', line 24

def output
  @output
end

.traceObject

Returns the value of attribute trace.



25
26
27
# File 'lib/cli/config.rb', line 25

def trace
  @trace
end

Class Method Details

.aliasesObject



110
111
112
113
114
115
116
117
118
# File 'lib/cli/config.rb', line 110

def aliases
  aliases_file = File.expand_path(ALIASES_FILE)
  # bacward compatible
  unless File.exists? aliases_file
    old_aliases_file = File.expand_path('~/.vmc-aliases')
    FileUtils.mv(old_aliases_file, aliases_file) if File.exists? old_aliases_file
  end
  aliases = YAML.load_file(aliases_file) rescue {}
end

.all_tokens(token_file_path = nil) ⇒ Object Also known as: targets



72
73
74
75
76
77
# File 'lib/cli/config.rb', line 72

def all_tokens(token_file_path=nil)
  token_file = File.expand_path(token_file_path || TOKEN_FILE)
  return nil unless File.exists? token_file
  contents = lock_and_read(token_file).strip
  JSON.parse(contents)
end

.all_uhuru_targetsObject



45
46
47
48
49
50
# File 'lib/cli/config.rb', line 45

def all_uhuru_targets
  uhuru_target_file = File.expand_path(UHURU_TARGET_FILE)
  return nil unless File.exists? uhuru_target_file
  contents = lock_and_read(uhuru_target_file).strip
  JSON.parse(contents, :symbolize_names => true)
end

.auth_token(token_file_path = nil) ⇒ Object



81
82
83
84
85
# File 'lib/cli/config.rb', line 81

def auth_token(token_file_path=nil)
  return @token if @token
  tokens = all_tokens(token_file_path)
  @token = tokens[target_url] if tokens
end

.base_of(url) ⇒ Object



52
53
54
# File 'lib/cli/config.rb', line 52

def base_of(url)
  url.sub(/^[^\.]+\./, "")
end

.clientsObject



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

def clients
  return @clients if @clients

  stock = YAML.load_file(STOCK_CLIENTS)
  clients = File.expand_path CLIENTS_FILE
  if File.exists? clients
    user = YAML.load_file(clients)
    @clients = deep_merge(stock, user)
  else
    @clients = stock
  end
end

.deep_merge(a, b) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
# File 'lib/cli/config.rb', line 137

def deep_merge(a, b)
  merge = proc do |_, old, new|
    if new.is_a?(Hash) and old.is_a?(Hash)
      old.merge(new, &merge)
    else
      new
    end
  end

  a.merge(b, &merge)
end

.instancesObject



98
99
100
101
102
103
# File 'lib/cli/config.rb', line 98

def instances
  instances_file = File.expand_path(INSTANCES_FILE)
  return nil unless File.exists? instances_file
  contents = lock_and_read(instances_file).strip
  JSON.parse(contents)
end

.lock_and_read(file) ⇒ Object



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

def lock_and_read(file)
  File.open(file, File::RDONLY) {|f|
    if defined? JRUBY_VERSION
      f.flock(File::LOCK_SH)
    else
      f.flock(File::LOCK_EX)
    end
    contents = f.read
    f.flock(File::LOCK_UN)
    contents
  }
end

.lock_and_write(file, contents) ⇒ Object



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

def lock_and_write(file, contents)
  File.open(file, File::RDWR | File::CREAT, 0600) {|f|
    f.flock(File::LOCK_EX)
    f.rewind
    f.puts contents
    f.flush
    f.truncate(f.pos)
    f.flock(File::LOCK_UN)
  }
end

.microObject



125
126
127
128
129
130
# File 'lib/cli/config.rb', line 125

def micro
  micro_file = File.expand_path(MICRO_FILE)
  return {} unless File.exists? micro_file
  contents = lock_and_read(micro_file).strip
  JSON.parse(contents)
end

.remove_token_fileObject



87
88
89
# File 'lib/cli/config.rb', line 87

def remove_token_file
  FileUtils.rm_f(File.expand_path(TOKEN_FILE))
end

.store_aliases(aliases) ⇒ Object



120
121
122
123
# File 'lib/cli/config.rb', line 120

def store_aliases(aliases)
  aliases_file = File.expand_path(ALIASES_FILE)
  File.open(aliases_file, 'wb') {|f| f.write(aliases.to_yaml)}
end

.store_instances(instances) ⇒ Object



105
106
107
108
# File 'lib/cli/config.rb', line 105

def store_instances(instances)
  instances_file = File.expand_path(INSTANCES_FILE)
  lock_and_write(instances_file, instances.to_json)
end

.store_micro(micro) ⇒ Object



132
133
134
135
# File 'lib/cli/config.rb', line 132

def store_micro(micro)
  micro_file = File.expand_path(MICRO_FILE)
  lock_and_write(micro_file, micro.to_json)
end

.store_target(target_host) ⇒ Object



60
61
62
63
# File 'lib/cli/config.rb', line 60

def store_target(target_host)
  target_file = File.expand_path(TARGET_FILE)
  lock_and_write(target_file, target_host)
end

.store_token(token, token_file_path = nil) ⇒ Object



91
92
93
94
95
96
# File 'lib/cli/config.rb', line 91

def store_token(token, token_file_path=nil)
  tokens = all_tokens(token_file_path) || {}
  tokens[target_url] = token
  token_file = File.expand_path(token_file_path || TOKEN_FILE)
  lock_and_write(token_file, tokens.to_json)
end

.store_uhuru_target(host, uhuru_target) ⇒ Object



65
66
67
68
69
70
# File 'lib/cli/config.rb', line 65

def store_uhuru_target(host, uhuru_target)
  uhuru_target_urls = all_uhuru_targets || {}
  uhuru_target_urls[host.to_sym] = uhuru_target
  uhuru_target_file = File.expand_path(UHURU_TARGET_FILE)
  lock_and_write(uhuru_target_file, JSON.pretty_generate(uhuru_target_urls))
end

.suggest_urlObject



56
57
58
# File 'lib/cli/config.rb', line 56

def suggest_url
  @suggest_url ||= base_of(target_url)
end

.target_urlObject



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/cli/config.rb', line 28

def target_url
  return @target_url if @target_url
  target_file = File.expand_path(TARGET_FILE)
  if File.exists? target_file
    @target_url = lock_and_read(target_file).strip
  else
    @target_url  = DEFAULT_TARGET
  end
  @target_url = "http://#{@target_url}" unless /^https?/ =~ @target_url
  @target_url = @target_url.gsub(/\/+$/, '')
  @target_url
end

.uhuru_targetObject



41
42
43
# File 'lib/cli/config.rb', line 41

def uhuru_target
  (all_uhuru_targets || {})[target_url.to_sym]
end