jdc 0.2.1.pre → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/LICENSE +24 -1277
  2. data/README.md +102 -0
  3. data/bin/jdc +2 -12
  4. data/{lib/tunnel/helper-app → caldecott_helper}/server.rb +5 -5
  5. data/{lib/tunnel/config → config}/clients.yml +2 -2
  6. data/config/micro/paths.yml +22 -0
  7. data/config/micro/refresh_ip.rb +20 -0
  8. data/lib/cli/commands/admin.rb +58 -0
  9. data/lib/cli/commands/apps.rb +1129 -0
  10. data/lib/cli/commands/base.rb +228 -0
  11. data/lib/cli/commands/manifest.rb +56 -0
  12. data/lib/cli/commands/micro.rb +115 -0
  13. data/lib/cli/commands/misc.rb +126 -0
  14. data/lib/cli/commands/services.rb +178 -0
  15. data/lib/cli/commands/user.rb +14 -0
  16. data/lib/cli/config.rb +173 -0
  17. data/lib/cli/console_helper.rb +170 -0
  18. data/lib/cli/core_ext.rb +122 -0
  19. data/lib/cli/errors.rb +19 -0
  20. data/lib/cli/frameworks.rb +265 -0
  21. data/lib/cli/manifest_helper.rb +300 -0
  22. data/lib/cli/runner.rb +505 -0
  23. data/lib/cli/services_helper.rb +84 -0
  24. data/lib/cli/tunnel_helper.rb +332 -0
  25. data/lib/cli/usage.rb +86 -0
  26. data/lib/cli/version.rb +7 -0
  27. data/lib/cli/zip_util.rb +77 -0
  28. data/lib/cli.rb +53 -0
  29. data/lib/jdc/client.rb +457 -0
  30. data/lib/jdc/const.rb +25 -0
  31. data/lib/jdc/micro/switcher/base.rb +97 -0
  32. data/lib/{micro → jdc/micro}/switcher/darwin.rb +3 -5
  33. data/lib/{micro → jdc/micro}/switcher/dummy.rb +1 -1
  34. data/lib/jdc/micro/switcher/linux.rb +16 -0
  35. data/lib/{micro → jdc/micro}/switcher/windows.rb +5 -5
  36. data/lib/{micro → jdc/micro}/vmrun.rb +19 -26
  37. data/lib/{micro → jdc}/micro.rb +15 -15
  38. data/lib/jdc/signature/version.rb +27 -0
  39. data/lib/jdc/signer.rb +13 -0
  40. data/lib/jdc/timer.rb +12 -0
  41. data/lib/jdc.rb +2 -15
  42. metadata +210 -360
  43. data/Rakefile +0 -13
  44. data/lib/admin/README.md +0 -15
  45. data/lib/admin/curl.rb +0 -60
  46. data/lib/admin/guid.rb +0 -89
  47. data/lib/admin/plugin.rb +0 -6
  48. data/lib/admin/service_auth_token.rb +0 -94
  49. data/lib/admin/service_broker/add.rb +0 -47
  50. data/lib/admin/service_broker/service_brokers.rb +0 -24
  51. data/lib/admin/set_quota.rb +0 -44
  52. data/lib/console/README.md +0 -8
  53. data/lib/console/console.rb +0 -187
  54. data/lib/console/plugin.rb +0 -33
  55. data/lib/jdc/cli/app/app.rb +0 -43
  56. data/lib/jdc/cli/app/apps.rb +0 -87
  57. data/lib/jdc/cli/app/base.rb +0 -72
  58. data/lib/jdc/cli/app/delete.rb +0 -95
  59. data/lib/jdc/cli/app/deprecated.rb +0 -11
  60. data/lib/jdc/cli/app/env.rb +0 -78
  61. data/lib/jdc/cli/app/events.rb +0 -45
  62. data/lib/jdc/cli/app/files.rb +0 -137
  63. data/lib/jdc/cli/app/health.rb +0 -26
  64. data/lib/jdc/cli/app/instances.rb +0 -53
  65. data/lib/jdc/cli/app/logs.rb +0 -76
  66. data/lib/jdc/cli/app/push/create.rb +0 -108
  67. data/lib/jdc/cli/app/push/interactions.rb +0 -86
  68. data/lib/jdc/cli/app/push/sync.rb +0 -57
  69. data/lib/jdc/cli/app/push.rb +0 -103
  70. data/lib/jdc/cli/app/rename.rb +0 -35
  71. data/lib/jdc/cli/app/restart.rb +0 -31
  72. data/lib/jdc/cli/app/scale.rb +0 -63
  73. data/lib/jdc/cli/app/start.rb +0 -161
  74. data/lib/jdc/cli/app/stats.rb +0 -67
  75. data/lib/jdc/cli/app/stop.rb +0 -27
  76. data/lib/jdc/cli/domain/base.rb +0 -9
  77. data/lib/jdc/cli/domain/domains.rb +0 -40
  78. data/lib/jdc/cli/domain/map.rb +0 -55
  79. data/lib/jdc/cli/domain/unmap.rb +0 -56
  80. data/lib/jdc/cli/help.rb +0 -15
  81. data/lib/jdc/cli/interactive.rb +0 -105
  82. data/lib/jdc/cli/login_requirements.rb +0 -15
  83. data/lib/jdc/cli/organization/base.rb +0 -14
  84. data/lib/jdc/cli/organization/create.rb +0 -37
  85. data/lib/jdc/cli/organization/delete.rb +0 -63
  86. data/lib/jdc/cli/organization/org.rb +0 -45
  87. data/lib/jdc/cli/organization/orgs.rb +0 -30
  88. data/lib/jdc/cli/organization/rename.rb +0 -37
  89. data/lib/jdc/cli/populators/base.rb +0 -16
  90. data/lib/jdc/cli/populators/organization.rb +0 -32
  91. data/lib/jdc/cli/populators/populator_methods.rb +0 -64
  92. data/lib/jdc/cli/populators/space.rb +0 -33
  93. data/lib/jdc/cli/populators/target.rb +0 -13
  94. data/lib/jdc/cli/route/base.rb +0 -9
  95. data/lib/jdc/cli/route/delete.rb +0 -28
  96. data/lib/jdc/cli/route/map.rb +0 -68
  97. data/lib/jdc/cli/route/routes.rb +0 -26
  98. data/lib/jdc/cli/route/unmap.rb +0 -56
  99. data/lib/jdc/cli/service/base.rb +0 -9
  100. data/lib/jdc/cli/service/bind.rb +0 -44
  101. data/lib/jdc/cli/service/create.rb +0 -159
  102. data/lib/jdc/cli/service/delete.rb +0 -83
  103. data/lib/jdc/cli/service/rename.rb +0 -36
  104. data/lib/jdc/cli/service/service.rb +0 -42
  105. data/lib/jdc/cli/service/service_instance_helper.rb +0 -99
  106. data/lib/jdc/cli/service/services.rb +0 -111
  107. data/lib/jdc/cli/service/unbind.rb +0 -37
  108. data/lib/jdc/cli/space/base.rb +0 -29
  109. data/lib/jdc/cli/space/create.rb +0 -67
  110. data/lib/jdc/cli/space/delete.rb +0 -56
  111. data/lib/jdc/cli/space/rename.rb +0 -38
  112. data/lib/jdc/cli/space/space.rb +0 -66
  113. data/lib/jdc/cli/space/spaces.rb +0 -57
  114. data/lib/jdc/cli/space/switch.rb +0 -19
  115. data/lib/jdc/cli/start/base.rb +0 -41
  116. data/lib/jdc/cli/start/colors.rb +0 -13
  117. data/lib/jdc/cli/start/target.rb +0 -50
  118. data/lib/jdc/cli/start/target_prettifier.rb +0 -17
  119. data/lib/jdc/cli/start/targets.rb +0 -16
  120. data/lib/jdc/cli/user/base.rb +0 -30
  121. data/lib/jdc/cli/user/create.rb +0 -52
  122. data/lib/jdc/cli/user/passwd.rb +0 -37
  123. data/lib/jdc/cli/user/register.rb +0 -43
  124. data/lib/jdc/cli/user/users.rb +0 -32
  125. data/lib/jdc/cli.rb +0 -556
  126. data/lib/jdc/constants.rb +0 -11
  127. data/lib/jdc/errors.rb +0 -19
  128. data/lib/jdc/object_extensions.rb +0 -15
  129. data/lib/jdc/plugin.rb +0 -56
  130. data/lib/jdc/spacing.rb +0 -89
  131. data/lib/jdc/spec_helper.rb +0 -1
  132. data/lib/jdc/test_support.rb +0 -6
  133. data/lib/jdc/version.rb +0 -3
  134. data/lib/manifests/errors.rb +0 -35
  135. data/lib/manifests/loader/builder.rb +0 -39
  136. data/lib/manifests/loader/normalizer.rb +0 -145
  137. data/lib/manifests/loader/resolver.rb +0 -79
  138. data/lib/manifests/loader.rb +0 -31
  139. data/lib/manifests/manifests.rb +0 -344
  140. data/lib/manifests/plugin.rb +0 -140
  141. data/lib/micro/README.md +0 -9
  142. data/lib/micro/errors.rb +0 -4
  143. data/lib/micro/plugin.rb +0 -197
  144. data/lib/micro/switcher/base.rb +0 -79
  145. data/lib/micro/switcher/linux.rb +0 -16
  146. data/lib/tasks/gem_release.rake +0 -42
  147. data/lib/tunnel/README.md +0 -29
  148. data/lib/tunnel/helper-app/Gemfile +0 -10
  149. data/lib/tunnel/helper-app/Gemfile.lock +0 -48
  150. data/lib/tunnel/plugin.rb +0 -183
  151. data/lib/tunnel/tunnel.rb +0 -295
data/lib/jdc/spacing.rb DELETED
@@ -1,89 +0,0 @@
1
- module JDC
2
- module Spacing
3
- @@indentation = 0
4
-
5
- def indented
6
- @@indentation += 1
7
- yield
8
- ensure
9
- @@indentation -= 1
10
- end
11
-
12
- def line(msg = "")
13
- return puts "" if msg.empty?
14
-
15
- start_line(msg)
16
- puts ""
17
- end
18
-
19
- def start_line(msg)
20
- print " " * @@indentation unless quiet?
21
- print msg
22
- end
23
-
24
- def lines(blob)
25
- blob.each_line do |line|
26
- start_line(line)
27
- end
28
-
29
- line
30
- end
31
-
32
- def quiet?
33
- false
34
- end
35
-
36
- def spaced(vals)
37
- num = 0
38
- vals.each do |val|
39
- line unless quiet? || num == 0
40
- yield val
41
- num += 1
42
- end
43
- end
44
-
45
- def tabular(*rows)
46
- spacings = []
47
- rows.each do |row|
48
- next unless row
49
-
50
- row.each.with_index do |col, i|
51
- next unless col
52
-
53
- width = text_width(col)
54
-
55
- if !spacings[i] || width > spacings[i]
56
- spacings[i] = width
57
- end
58
- end
59
- end
60
-
61
- columns = spacings.size
62
- rows.each do |row|
63
- next unless row
64
-
65
- row.each.with_index do |col, i|
66
- next unless col
67
-
68
- start_line justify(col, spacings[i])
69
- print " " unless i + 1 == columns
70
- end
71
-
72
- line
73
- end
74
- end
75
-
76
- def trim_escapes(str)
77
- str.gsub(/\e\[\d+m/, "")
78
- end
79
-
80
- def text_width(str)
81
- trim_escapes(str).size
82
- end
83
-
84
- def justify(str, width)
85
- trimmed = trim_escapes(str)
86
- str.ljust(width + (str.size - trimmed.size))
87
- end
88
- end
89
- end
@@ -1 +0,0 @@
1
- require File.expand_path("../../../spec/spec_helper", __FILE__)
@@ -1,6 +0,0 @@
1
- module JDC::TestSupport
2
- end
3
-
4
- Dir[File.expand_path('../../../spec/support/**/*.rb', __FILE__)].each do |file|
5
- require file
6
- end
data/lib/jdc/version.rb DELETED
@@ -1,3 +0,0 @@
1
- module JDC
2
- VERSION = "0.2.1".freeze
3
- end
@@ -1,35 +0,0 @@
1
- require "jdc/errors"
2
-
3
- module JDCManifests
4
- class InvalidManifest < JDC::UserFriendlyError
5
- attr_reader :file
6
-
7
- def initialize(file)
8
- @file = file
9
- end
10
-
11
- def to_s
12
- "Manifest file '#{@file}' is malformed."
13
- end
14
- end
15
-
16
- class CircularDependency < JDC::UserFriendlyError
17
- def initialize(app)
18
- @app = app
19
- end
20
-
21
- def to_s
22
- "Circular dependency in application '#@app'"
23
- end
24
- end
25
-
26
- class UnknownSymbol < JDC::UserFriendlyError
27
- def initialize(sym)
28
- @sym = sym
29
- end
30
-
31
- def to_s
32
- "Undefined symbol in manifest: '#@sym'"
33
- end
34
- end
35
- end
@@ -1,39 +0,0 @@
1
- require "manifests/errors"
2
-
3
- module JDCManifests
4
- module Builder
5
- # parse a manifest and merge with its inherited manifests
6
- def build(file)
7
- manifest = YAML.load_file file
8
- raise JDCManifests::InvalidManifest.new(file) unless manifest
9
-
10
- Array(manifest["inherit"]).each do |path|
11
- manifest = merge_parent(path, manifest)
12
- end
13
-
14
- manifest.delete("inherit")
15
-
16
- manifest
17
- end
18
-
19
- private
20
-
21
- # merge the manifest at `parent_path' into the `child'
22
- def merge_parent(parent_path, child)
23
- merge_manifest(build(from_manifest(parent_path)), child)
24
- end
25
-
26
- # deep hash merge
27
- def merge_manifest(parent, child)
28
- merge = proc do |_, old, new|
29
- if new.is_a?(Hash) && old.is_a?(Hash)
30
- old.merge(new, &merge)
31
- else
32
- new
33
- end
34
- end
35
-
36
- parent.merge(child, &merge)
37
- end
38
- end
39
- end
@@ -1,145 +0,0 @@
1
- module JDCManifests
2
- module Normalizer
3
- MANIFEST_META = ["applications", "properties"]
4
-
5
- def normalize!(manifest)
6
- toplevel = toplevel_attributes(manifest)
7
-
8
- apps = manifest["applications"]
9
- apps ||= [{}]
10
-
11
- default_paths_to_keys!(apps)
12
-
13
- apps = convert_to_array(apps)
14
-
15
- merge_toplevel!(toplevel, manifest, apps)
16
- normalize_apps!(apps)
17
-
18
- manifest["applications"] = apps
19
-
20
- normalize_paths!(apps)
21
-
22
- keyval = normalize_key_val(manifest)
23
- manifest.clear.merge!(keyval)
24
-
25
- nil
26
- end
27
-
28
- private
29
-
30
- def normalize_paths!(apps)
31
- apps.each do |app|
32
- app["path"] = from_manifest(app["path"])
33
- end
34
- end
35
-
36
- def convert_to_array(apps)
37
- return apps if apps.is_a?(Array)
38
-
39
- ordered_by_deps(apps)
40
- end
41
-
42
- # sort applications in dependency order
43
- # e.g. if A depends on B, B will be listed before A
44
- def ordered_by_deps(apps, processed = Set[])
45
- ordered = []
46
- apps.each do |tag, info|
47
- next if processed.include?(tag)
48
-
49
- if deps = Array(info["depends-on"])
50
- dep_apps = {}
51
- deps.each do |dep|
52
- dep_apps[dep] = apps[dep]
53
- end
54
-
55
- processed.add(tag)
56
-
57
- ordered += ordered_by_deps(dep_apps, processed)
58
- ordered << info
59
- else
60
- ordered << info
61
- processed.add(tag)
62
- end
63
- end
64
-
65
- ordered.each { |app| app.delete("depends-on") }
66
-
67
- ordered
68
- end
69
-
70
- def default_paths_to_keys!(apps)
71
- return if apps.is_a?(Array)
72
-
73
- apps.each do |tag, app|
74
- app["path"] ||= tag
75
- end
76
- end
77
-
78
- def normalize_apps!(apps)
79
- apps.each do |app|
80
- normalize_app!(app)
81
- end
82
- end
83
-
84
- def merge_toplevel!(toplevel, manifest, apps)
85
- return if toplevel.empty?
86
-
87
- apps.collect! do |a|
88
- toplevel.merge(a)
89
- end
90
-
91
- toplevel.each do |k, _|
92
- manifest.delete k
93
- end
94
- end
95
-
96
- def normalize_app!(app)
97
- if app.key?("mem")
98
- app["memory"] = app.delete("mem")
99
- end
100
-
101
- if app.key?("url") && app["url"].nil?
102
- app["url"] = "none"
103
- end
104
-
105
- if app.key?("subdomain")
106
- if app.key?("host")
107
- app.delete("subdomain")
108
- else
109
- app["host"] = app.delete("subdomain")
110
- end
111
- end
112
- end
113
-
114
- def toplevel_attributes(manifest)
115
- top =
116
- manifest.reject { |k, _|
117
- MANIFEST_META.include? k
118
- }
119
-
120
- # implicit toplevel path of .
121
- top["path"] ||= "."
122
-
123
- top
124
- end
125
-
126
- def normalize_key_val(val)
127
- case val
128
- when Hash
129
- stringified = {}
130
-
131
- val.each do |k, v|
132
- stringified[k.to_sym] = normalize_key_val(v)
133
- end
134
-
135
- stringified
136
- when Array
137
- val.collect { |x| normalize_key_val(x) }
138
- when nil
139
- nil
140
- else
141
- val.to_s
142
- end
143
- end
144
- end
145
- end
@@ -1,79 +0,0 @@
1
- module JDCManifests
2
- module Resolver
3
- def resolve(manifest, resolver)
4
- new = {}
5
-
6
- new[:applications] = manifest[:applications].collect do |app|
7
- resolve_lexically(resolver, app, [manifest])
8
- end
9
-
10
- resolve_lexically(resolver, new, [new])
11
- end
12
-
13
- private
14
-
15
- # resolve symbols, with hashes introducing new lexical symbols
16
- def resolve_lexically(resolver, val, ctx)
17
- case val
18
- when Hash
19
- new = {}
20
-
21
- val.each do |k, v|
22
- new[k] = resolve_lexically(resolver, v, [val] + ctx)
23
- end
24
-
25
- new
26
- when Array
27
- val.collect do |v|
28
- resolve_lexically(resolver, v, ctx)
29
- end
30
- when String
31
- val.gsub(/\$\{([^\}]+)\}/) do
32
- resolve_symbol(resolver, $1, ctx)
33
- end
34
- else
35
- val
36
- end
37
- end
38
-
39
- # resolve a symbol to its value, and then resolve that value
40
- def resolve_symbol(resolver, sym, ctx)
41
- if found = find_symbol(sym.to_sym, ctx)
42
- resolve_lexically(resolver, found, ctx)
43
- found
44
- elsif dynamic = resolver.resolve_symbol(sym)
45
- dynamic
46
- else
47
- fail("Unknown symbol in manifest: #{sym}")
48
- end
49
- end
50
-
51
- # search for a symbol introduced in the lexical context
52
- def find_symbol(sym, ctx)
53
- ctx.each do |h|
54
- if val = resolve_in(h, sym)
55
- return val
56
- end
57
- end
58
-
59
- nil
60
- end
61
-
62
- # find a value, searching in explicit properties first
63
- def resolve_in(hash, *where)
64
- find_in_hash(hash, [:properties] + where) ||
65
- find_in_hash(hash, where)
66
- end
67
-
68
- # helper for following a path of values in a hash
69
- def find_in_hash(hash, where)
70
- what = hash
71
- where.each do |x|
72
- return nil unless what.is_a?(Hash)
73
- what = what[x]
74
- end
75
-
76
- what
77
- end
78
- end
79
- end
@@ -1,31 +0,0 @@
1
- require "manifests/loader/builder"
2
- require "manifests/loader/normalizer"
3
- require "manifests/loader/resolver"
4
-
5
- module JDCManifests
6
- class Loader
7
- include Builder
8
- include Normalizer
9
- include Resolver
10
-
11
- def initialize(file, resolver)
12
- @file = file
13
- @resolver = resolver
14
- end
15
-
16
- def manifest
17
- info = build(@file)
18
- normalize! info
19
- resolve info, @resolver
20
- end
21
-
22
- private
23
-
24
- # expand a path relative to the manifest file's directory
25
- def from_manifest(path)
26
- return path unless @file
27
-
28
- File.expand_path(path, File.dirname(@file))
29
- end
30
- end
31
- end