summaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/env.rb
blob: d81e82f5b66e9af6f6c07f6f2ef68cf41990fa6e (plain)
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
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 do |c|
      c.desc "List the available environments. The pinned environment, if any, will be marked with '*'."
      c.command :ls do |ls|
        ls.action do |global_options, options, args|
          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

      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 = args.first
          if environment == 'default' ||
              (environment && manager.environment_names.include?(environment))
            LeapCli.leapfile.set('environment', environment)
            log 0, :saved, "Leapfile with environment set to #{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, "Leapfile, removing environment property."
        end
      end

      c.default_command :ls
    end

    protected

  end
end