1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
module LeapCli
module Commands
desc "Manipulate and query environment information."
long_desc "The 'environment' node property can be used to isolate sets of nodes into entirely separate environments. "+
"A node in one environment will never interact with a node from another environment. "+
"Environment pinning works by modifying your ~/.leaprc file and is dependent on the "+
"absolute file path of your provider directory (pins don't apply if you move the directory)"
command [:env, :e] do |c|
c.desc "List the available environments. The pinned environment, if any, will be marked with '*'. Will also set the pin if run with an environment argument."
c.arg_name 'ENVIRONMENT', :optional => true
c.command :ls do |ls|
ls.action do |global_options, options, args|
environment = get_env_from_args(args)
if environment
pin(environment)
LeapCli.leapfile.load
end
print_envs
end
end
c.desc 'Pin the environment to ENVIRONMENT. All subsequent commands will only apply to nodes in this environment.'
c.arg_name 'ENVIRONMENT'
c.command :pin do |pin|
pin.action do |global_options,options,args|
environment = get_env_from_args(args)
if environment
pin(environment)
else
bail! "There is no environment `#{environment}`"
end
end
end
c.desc "Unpin the environment. All subsequent commands will apply to all nodes."
c.command :unpin do |unpin|
unpin.action do |global_options, options, args|
LeapCli.leapfile.unset('environment')
log 0, :saved, "~/.leaprc, removing environment property."
end
end
c.default_command :ls
end
protected
def get_env_from_args(args)
environment = args.first
if environment == 'default' || (environment && manager.environment_names.include?(environment))
return environment
else
return nil
end
end
def pin(environment)
LeapCli.leapfile.set('environment', environment)
log 0, :saved, "~/.leaprc with environment set to #{environment}."
end
def print_envs
envs = ["default"] + manager.environment_names.compact.sort
envs.each do |env|
if env
if LeapCli.leapfile.environment == env
puts "* #{env}"
else
puts " #{env}"
end
end
end
end
end
end
|