leap_cli 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/bin/leap +81 -0
  2. data/lib/core_ext/boolean.rb +14 -0
  3. data/lib/core_ext/hash.rb +35 -0
  4. data/lib/core_ext/json.rb +42 -0
  5. data/lib/core_ext/nil.rb +5 -0
  6. data/lib/core_ext/string.rb +14 -0
  7. data/lib/leap/platform.rb +52 -0
  8. data/lib/leap_cli/commands/ca.rb +430 -0
  9. data/lib/leap_cli/commands/clean.rb +16 -0
  10. data/lib/leap_cli/commands/compile.rb +134 -0
  11. data/lib/leap_cli/commands/deploy.rb +172 -0
  12. data/lib/leap_cli/commands/facts.rb +93 -0
  13. data/lib/leap_cli/commands/inspect.rb +140 -0
  14. data/lib/leap_cli/commands/list.rb +122 -0
  15. data/lib/leap_cli/commands/new.rb +126 -0
  16. data/lib/leap_cli/commands/node.rb +272 -0
  17. data/lib/leap_cli/commands/pre.rb +99 -0
  18. data/lib/leap_cli/commands/shell.rb +67 -0
  19. data/lib/leap_cli/commands/test.rb +55 -0
  20. data/lib/leap_cli/commands/user.rb +140 -0
  21. data/lib/leap_cli/commands/util.rb +50 -0
  22. data/lib/leap_cli/commands/vagrant.rb +201 -0
  23. data/lib/leap_cli/config/macros.rb +369 -0
  24. data/lib/leap_cli/config/manager.rb +369 -0
  25. data/lib/leap_cli/config/node.rb +37 -0
  26. data/lib/leap_cli/config/object.rb +336 -0
  27. data/lib/leap_cli/config/object_list.rb +174 -0
  28. data/lib/leap_cli/config/secrets.rb +43 -0
  29. data/lib/leap_cli/config/tag.rb +18 -0
  30. data/lib/leap_cli/constants.rb +7 -0
  31. data/lib/leap_cli/leapfile.rb +97 -0
  32. data/lib/leap_cli/load_paths.rb +15 -0
  33. data/lib/leap_cli/log.rb +166 -0
  34. data/lib/leap_cli/logger.rb +216 -0
  35. data/lib/leap_cli/markdown_document_listener.rb +134 -0
  36. data/lib/leap_cli/path.rb +84 -0
  37. data/lib/leap_cli/remote/leap_plugin.rb +204 -0
  38. data/lib/leap_cli/remote/puppet_plugin.rb +66 -0
  39. data/lib/leap_cli/remote/rsync_plugin.rb +35 -0
  40. data/lib/leap_cli/remote/tasks.rb +36 -0
  41. data/lib/leap_cli/requirements.rb +19 -0
  42. data/lib/leap_cli/ssh_key.rb +130 -0
  43. data/lib/leap_cli/util/remote_command.rb +110 -0
  44. data/lib/leap_cli/util/secret.rb +54 -0
  45. data/lib/leap_cli/util/x509.rb +32 -0
  46. data/lib/leap_cli/util.rb +431 -0
  47. data/lib/leap_cli/version.rb +9 -0
  48. data/lib/leap_cli.rb +46 -0
  49. data/lib/lib_ext/capistrano_connections.rb +16 -0
  50. data/lib/lib_ext/gli.rb +52 -0
  51. data/lib/lib_ext/markdown_document_listener.rb +122 -0
  52. data/vendor/certificate_authority/lib/certificate_authority/certificate.rb +200 -0
  53. data/vendor/certificate_authority/lib/certificate_authority/certificate_revocation_list.rb +77 -0
  54. data/vendor/certificate_authority/lib/certificate_authority/distinguished_name.rb +97 -0
  55. data/vendor/certificate_authority/lib/certificate_authority/extensions.rb +266 -0
  56. data/vendor/certificate_authority/lib/certificate_authority/key_material.rb +148 -0
  57. data/vendor/certificate_authority/lib/certificate_authority/ocsp_handler.rb +144 -0
  58. data/vendor/certificate_authority/lib/certificate_authority/pkcs11_key_material.rb +65 -0
  59. data/vendor/certificate_authority/lib/certificate_authority/revocable.rb +14 -0
  60. data/vendor/certificate_authority/lib/certificate_authority/serial_number.rb +10 -0
  61. data/vendor/certificate_authority/lib/certificate_authority/signing_entity.rb +16 -0
  62. data/vendor/certificate_authority/lib/certificate_authority/signing_request.rb +56 -0
  63. data/vendor/certificate_authority/lib/certificate_authority.rb +21 -0
  64. data/vendor/rsync_command/lib/rsync_command/ssh_options.rb +159 -0
  65. data/vendor/rsync_command/lib/rsync_command/thread_pool.rb +36 -0
  66. data/vendor/rsync_command/lib/rsync_command/version.rb +3 -0
  67. data/vendor/rsync_command/lib/rsync_command.rb +96 -0
  68. data/vendor/rsync_command/test/rsync_test.rb +74 -0
  69. data/vendor/rsync_command/test/ssh_options_test.rb +61 -0
  70. data/vendor/vagrant_ssh_keys/vagrant.key +27 -0
  71. data/vendor/vagrant_ssh_keys/vagrant.pub +1 -0
  72. metadata +345 -0
@@ -0,0 +1,96 @@
1
+ require "rsync_command/version"
2
+ require "rsync_command/ssh_options"
3
+ require "rsync_command/thread_pool"
4
+
5
+ require 'monitor'
6
+
7
+ class RsyncCommand
8
+ attr_accessor :failures, :logger
9
+
10
+ def initialize(options={})
11
+ @options = options.dup
12
+ @logger = @options.delete(:logger)
13
+ @flags = @options.delete(:flags)
14
+ @failures = []
15
+ @failures.extend(MonitorMixin)
16
+ end
17
+
18
+ #
19
+ # takes an Enumerable and iterates each item in the list in parallel.
20
+ #
21
+ def asynchronously(array, &block)
22
+ pool = ThreadPool.new
23
+ array.each do |item|
24
+ pool.schedule(item, &block)
25
+ end
26
+ pool.shutdown
27
+ end
28
+
29
+ #
30
+ # runs rsync, recording failures
31
+ #
32
+ def exec(src, dest, options={})
33
+ @failures.synchronize do
34
+ @failures.clear
35
+ end
36
+ rsync_cmd = command(src, dest, options)
37
+ if options[:chdir]
38
+ rsync_cmd = "cd '#{options[:chdir]}'; #{rsync_cmd}"
39
+ end
40
+ @logger.debug rsync_cmd if @logger
41
+ ok = system(rsync_cmd)
42
+ unless ok
43
+ @failures.synchronize do
44
+ @failures << {:source => src, :dest => dest, :options => options.dup}
45
+ end
46
+ end
47
+ end
48
+
49
+ #
50
+ # returns true if last exec returned a failure
51
+ #
52
+ def failed?
53
+ @failures && @failures.any?
54
+ end
55
+
56
+ #
57
+ # build rsync command
58
+ #
59
+ def command(src, dest, options={})
60
+ src = remote_address(src)
61
+ dest = remote_address(dest)
62
+ options = @options.merge(options)
63
+ flags = []
64
+ flags << @flags if @flags
65
+ flags << options[:flags] if options.has_key?(:flags)
66
+ flags << '--delete' if options[:delete]
67
+ flags << includes(options[:includes]) if options.has_key?(:includes)
68
+ flags << excludes(options[:excludes]) if options.has_key?(:excludes)
69
+ flags << SshOptions.new(options[:ssh]).to_flags if options.has_key?(:ssh)
70
+ "rsync #{flags.compact.join(' ')} #{src} #{dest}"
71
+ end
72
+
73
+ private
74
+
75
+ #
76
+ # Creates an rsync location if the +address+ is a hash with keys :user, :host, and :path
77
+ # (each component is optional). If +address+ is a string, we just pass it through.
78
+ #
79
+ def remote_address(address)
80
+ if address.is_a? String
81
+ address # assume it is already formatted.
82
+ elsif address.is_a? Hash
83
+ [[address[:user], address[:host]].compact.join('@'), address[:path]].compact.join(':')
84
+ end
85
+ end
86
+
87
+ def excludes(patterns)
88
+ [patterns].flatten.compact.map { |p| "--exclude='#{p}'" }
89
+ end
90
+
91
+ def includes(patterns)
92
+ [patterns].flatten.compact.map { |p| "--include='#{p}'" }
93
+ end
94
+
95
+ end
96
+
@@ -0,0 +1,74 @@
1
+ require 'test/unit'
2
+ require File.expand_path('../../lib/rsync_command', __FILE__)
3
+
4
+ if RUBY_VERSION >= '1.9'
5
+ SimpleOrderedHash = ::Hash
6
+ else
7
+ class SimpleOrderedHash < Hash
8
+ def each; self.keys.map(&:to_s).sort.each {|key| yield [key.to_sym, self[key.to_sym]]}; end
9
+ end
10
+ end
11
+
12
+ class RsyncTest < Test::Unit::TestCase
13
+
14
+ def test_build_simple_command
15
+ command = rsync_command('bar', 'foo')
16
+ assert_equal 'rsync -az bar foo', command
17
+ end
18
+
19
+ def test_allows_passing_delete
20
+ command = rsync_command('bar', 'foo', :delete => true)
21
+ assert_equal 'rsync -az --delete bar foo', command
22
+ end
23
+
24
+ def test_allows_specifying_an_exclude
25
+ command = rsync_command('bar', 'foo', :excludes => '.git')
26
+ assert_equal "rsync -az --exclude='.git' bar foo", command
27
+ end
28
+
29
+ def test_ssh_options_keys_only_lists_existing_files
30
+ command = rsync_command('.', 'foo', :ssh => { :keys => [__FILE__, "#{__FILE__}dadijofs"] })
31
+ assert_match /-i '#{__FILE__}'/, command
32
+ end
33
+
34
+ def test_ssh_options_ignores_keys_if_nil
35
+ command = rsync_command('.', 'foo', :ssh => { :keys => nil })
36
+ assert_equal 'rsync -az . foo', command
37
+ command = rsync_command('bar', 'foo')
38
+ assert_equal 'rsync -az bar foo', command
39
+ end
40
+
41
+ def test_ssh_options_config_adds_flag
42
+ command = rsync_command('.', 'foo', :ssh => { :config => __FILE__ })
43
+ assert_equal %Q[rsync -az -e "ssh -F '#{__FILE__}'" . foo], command
44
+ end
45
+
46
+ def test_ssh_options_port_adds_port
47
+ command = rsync_command('.', 'foo', :ssh => { :port => '30022' })
48
+ assert_equal %Q[rsync -az -e "ssh -p 30022" . foo], command
49
+ end
50
+
51
+ def test_ssh_options_ignores_config_if_nil_or_false
52
+ command = rsync_command('.', 'foo', :ssh => { :config => nil })
53
+ assert_equal 'rsync -az . foo', command
54
+ command = rsync_command('.', 'foo', :ssh => { :config => false })
55
+ assert_equal 'rsync -az . foo', command
56
+ end
57
+
58
+ def test_remote_address
59
+ cmd = rsync_command('.', {:user => 'user', :host => 'box.local', :path => '/tmp'})
60
+ assert_equal "rsync -az . user@box.local:/tmp", cmd
61
+ end
62
+
63
+ #def test_remote_address_drops_at_when_user_is_nil
64
+ # assert_equal 'box.local:/tmp', SupplyDrop::Rsync.remote_address(nil, 'box.local', '/tmp')
65
+ #end
66
+
67
+ protected
68
+
69
+ def rsync_command(src, dest, options={})
70
+ rsync = RsyncCommand.new(:flags => '-az')
71
+ rsync.command(src, dest, options)
72
+ end
73
+
74
+ end
@@ -0,0 +1,61 @@
1
+ require 'test/unit'
2
+ require File.expand_path('../../lib/rsync_command', __FILE__)
3
+
4
+ class SshOptionsTest < Test::Unit::TestCase
5
+
6
+ def test_simple_ssh_options
7
+ options = ssh_options(Hash[
8
+ :bind_address, '0.0.0.0',
9
+ :compression, true,
10
+ :compression_level, 1,
11
+ :config, '/etc/ssh/ssh_config',
12
+ :global_known_hosts_file, '/etc/ssh/known_hosts',
13
+ :host_name, 'myhost',
14
+ :keys_only, false,
15
+ :paranoid, true,
16
+ :port, 2222,
17
+ :timeout, 10000,
18
+ :user, 'root',
19
+ :user_known_hosts_file, '~/.ssh/known_hosts'
20
+ ])
21
+ assert_match /-o BindAddress='0.0.0.0'/, options
22
+ assert_match /-o Compression='yes'/, options
23
+ assert_match %r{-o CompressionLevel='1' -F '/etc/ssh/ssh_config'}, options
24
+ assert_match %r{-o GlobalKnownHostsFile='/etc/ssh/known_hosts'}, options
25
+ assert_match /-o HostName='myhost'/, options
26
+ assert_match /-o StrictHostKeyChecking='yes' -p 2222/, options
27
+ assert_match /-o ConnectTimeout='10000' -l root/, options
28
+ assert_match %r{-o UserKnownHostsFile='~/.ssh/known_hosts'}, options
29
+ end
30
+
31
+ def test_complex_ssh_options
32
+ options = ssh_options(Hash[
33
+ :auth_methods, 'publickey',
34
+ :encryption, ['aes256-cbc', 'aes192-cbc'],
35
+ :hmac, 'hmac-sha2-256',
36
+ :host_key, 'ecdsa-sha2-nistp256-cert-v01@openssh.com',
37
+ :rekey_limit, 2*1024*1024,
38
+ :verbose, :debug,
39
+ :user_known_hosts_file, ['~/.ssh/known_hosts', '~/.ssh/production_known_hosts']
40
+ ])
41
+ assert_match /PasswordAuthentication='no'/, options
42
+ assert_match /PubkeyAuthentication='yes'/, options
43
+ assert_match /HostbasedAuthentication='no'/, options
44
+ assert_match /-o PasswordAuthentication='no'/, options
45
+ assert_match /-o PubkeyAuthentication='yes'/, options
46
+ assert_match /-o HostbasedAuthentication='no'/, options
47
+ assert_match /-o Ciphers='aes256-cbc,aes192-cbc'/, options
48
+ assert_match /-o MACs='hmac-sha2-256'/, options
49
+ assert_match /-o HostKeyAlgorithms='ecdsa-sha2-nistp256-cert-v01@openssh.com'/, options
50
+ assert_match /-o RekeyLimit='2M'/, options
51
+ assert_match %r{-o UserKnownHostsFile='~/.ssh/known_hosts'}, options
52
+ assert_match %r{-o UserKnownHostsFile='~/.ssh/production_known_hosts'}, options
53
+ assert_match /-o LogLevel='DEBUG'/, options
54
+ end
55
+
56
+ protected
57
+
58
+ def ssh_options(options)
59
+ RsyncCommand::SshOptions.new(options).to_flags
60
+ end
61
+ end
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
3
+ w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP
4
+ kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2
5
+ hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO
6
+ Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW
7
+ yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd
8
+ ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1
9
+ Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf
10
+ TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK
11
+ iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A
12
+ sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf
13
+ 4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP
14
+ cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk
15
+ EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN
16
+ CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX
17
+ 3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG
18
+ YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj
19
+ 3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+
20
+ dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz
21
+ 6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC
22
+ P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF
23
+ llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ
24
+ kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH
25
+ +vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ
26
+ NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
metadata ADDED
@@ -0,0 +1,345 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leap_cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - LEAP Encryption Access Project
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-12-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 10.0.3
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 10.0.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: gli
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.5.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.5.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: command_line_reporter
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: highline
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: paint
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: tee
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: capistrano
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 2.13.5
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 2.13.5
142
+ - !ruby/object:Gem::Dependency
143
+ name: net-ssh
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: gpgme
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: ya2yaml
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: json_pure
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: versionomy
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: activemodel
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: 3.0.6
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: 3.0.6
238
+ description: The command "leap" can be used to manage a bevy of servers running the
239
+ LEAP platform from the comfort of your own home.
240
+ email: root@leap.se
241
+ executables:
242
+ - leap
243
+ extensions: []
244
+ extra_rdoc_files: []
245
+ files:
246
+ - lib/lib_ext/markdown_document_listener.rb
247
+ - lib/lib_ext/gli.rb
248
+ - lib/lib_ext/capistrano_connections.rb
249
+ - lib/core_ext/hash.rb
250
+ - lib/core_ext/json.rb
251
+ - lib/core_ext/nil.rb
252
+ - lib/core_ext/boolean.rb
253
+ - lib/core_ext/string.rb
254
+ - lib/leap_cli.rb
255
+ - lib/leap/platform.rb
256
+ - lib/leap_cli/constants.rb
257
+ - lib/leap_cli/markdown_document_listener.rb
258
+ - lib/leap_cli/ssh_key.rb
259
+ - lib/leap_cli/commands/facts.rb
260
+ - lib/leap_cli/commands/ca.rb
261
+ - lib/leap_cli/commands/pre.rb
262
+ - lib/leap_cli/commands/compile.rb
263
+ - lib/leap_cli/commands/user.rb
264
+ - lib/leap_cli/commands/node.rb
265
+ - lib/leap_cli/commands/clean.rb
266
+ - lib/leap_cli/commands/test.rb
267
+ - lib/leap_cli/commands/util.rb
268
+ - lib/leap_cli/commands/list.rb
269
+ - lib/leap_cli/commands/new.rb
270
+ - lib/leap_cli/commands/deploy.rb
271
+ - lib/leap_cli/commands/inspect.rb
272
+ - lib/leap_cli/commands/shell.rb
273
+ - lib/leap_cli/commands/vagrant.rb
274
+ - lib/leap_cli/util/remote_command.rb
275
+ - lib/leap_cli/util/secret.rb
276
+ - lib/leap_cli/util/x509.rb
277
+ - lib/leap_cli/remote/tasks.rb
278
+ - lib/leap_cli/remote/rsync_plugin.rb
279
+ - lib/leap_cli/remote/puppet_plugin.rb
280
+ - lib/leap_cli/remote/leap_plugin.rb
281
+ - lib/leap_cli/requirements.rb
282
+ - lib/leap_cli/path.rb
283
+ - lib/leap_cli/leapfile.rb
284
+ - lib/leap_cli/log.rb
285
+ - lib/leap_cli/util.rb
286
+ - lib/leap_cli/config/manager.rb
287
+ - lib/leap_cli/config/object.rb
288
+ - lib/leap_cli/config/tag.rb
289
+ - lib/leap_cli/config/object_list.rb
290
+ - lib/leap_cli/config/secrets.rb
291
+ - lib/leap_cli/config/node.rb
292
+ - lib/leap_cli/config/macros.rb
293
+ - lib/leap_cli/logger.rb
294
+ - lib/leap_cli/load_paths.rb
295
+ - lib/leap_cli/version.rb
296
+ - bin/leap
297
+ - vendor/rsync_command/test/rsync_test.rb
298
+ - vendor/rsync_command/test/ssh_options_test.rb
299
+ - vendor/rsync_command/lib/rsync_command/ssh_options.rb
300
+ - vendor/rsync_command/lib/rsync_command/thread_pool.rb
301
+ - vendor/rsync_command/lib/rsync_command/version.rb
302
+ - vendor/rsync_command/lib/rsync_command.rb
303
+ - vendor/certificate_authority/lib/certificate_authority.rb
304
+ - vendor/certificate_authority/lib/certificate_authority/serial_number.rb
305
+ - vendor/certificate_authority/lib/certificate_authority/pkcs11_key_material.rb
306
+ - vendor/certificate_authority/lib/certificate_authority/key_material.rb
307
+ - vendor/certificate_authority/lib/certificate_authority/extensions.rb
308
+ - vendor/certificate_authority/lib/certificate_authority/revocable.rb
309
+ - vendor/certificate_authority/lib/certificate_authority/certificate.rb
310
+ - vendor/certificate_authority/lib/certificate_authority/signing_entity.rb
311
+ - vendor/certificate_authority/lib/certificate_authority/certificate_revocation_list.rb
312
+ - vendor/certificate_authority/lib/certificate_authority/signing_request.rb
313
+ - vendor/certificate_authority/lib/certificate_authority/ocsp_handler.rb
314
+ - vendor/certificate_authority/lib/certificate_authority/distinguished_name.rb
315
+ - vendor/vagrant_ssh_keys/vagrant.pub
316
+ - vendor/vagrant_ssh_keys/vagrant.key
317
+ homepage: https://leap.se
318
+ licenses:
319
+ - MIT
320
+ post_install_message:
321
+ rdoc_options: []
322
+ require_paths:
323
+ - lib
324
+ - lib
325
+ - vendor/certificate_authority/lib
326
+ - vendor/rsync_command/lib
327
+ required_ruby_version: !ruby/object:Gem::Requirement
328
+ none: false
329
+ requirements:
330
+ - - ! '>='
331
+ - !ruby/object:Gem::Version
332
+ version: '0'
333
+ required_rubygems_version: !ruby/object:Gem::Requirement
334
+ none: false
335
+ requirements:
336
+ - - ! '>='
337
+ - !ruby/object:Gem::Version
338
+ version: '0'
339
+ requirements: []
340
+ rubyforge_project:
341
+ rubygems_version: 1.8.23
342
+ signing_key:
343
+ specification_version: 3
344
+ summary: Command line interface to the LEAP platform
345
+ test_files: []