leap_cli 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []