kongfigure 0.0.2

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 (37) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +54 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +40 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +3 -0
  7. data/exe/kongfigure +6 -0
  8. data/exe/kongfigure_local +6 -0
  9. data/kongfigure.gemspec +31 -0
  10. data/lib/kongfigure/cli.rb +21 -0
  11. data/lib/kongfigure/configuration.rb +51 -0
  12. data/lib/kongfigure/errors/bad_request.rb +4 -0
  13. data/lib/kongfigure/errors/internal_server_error.rb +4 -0
  14. data/lib/kongfigure/errors/invalid_configuration.rb +4 -0
  15. data/lib/kongfigure/errors/resource_conflict.rb +4 -0
  16. data/lib/kongfigure/errors/resource_not_found.rb +4 -0
  17. data/lib/kongfigure/http_client.rb +94 -0
  18. data/lib/kongfigure/kong.rb +40 -0
  19. data/lib/kongfigure/parser.rb +32 -0
  20. data/lib/kongfigure/resources/base.rb +48 -0
  21. data/lib/kongfigure/resources/consumer.rb +40 -0
  22. data/lib/kongfigure/resources/consumers/acl.rb +18 -0
  23. data/lib/kongfigure/resources/consumers/key_auth.rb +18 -0
  24. data/lib/kongfigure/resources/plugin.rb +51 -0
  25. data/lib/kongfigure/resources/route.rb +41 -0
  26. data/lib/kongfigure/resources/service.rb +56 -0
  27. data/lib/kongfigure/resources/target.rb +19 -0
  28. data/lib/kongfigure/resources/upstream.rb +51 -0
  29. data/lib/kongfigure/services/base.rb +164 -0
  30. data/lib/kongfigure/services/consumer.rb +60 -0
  31. data/lib/kongfigure/services/plugin.rb +18 -0
  32. data/lib/kongfigure/services/route.rb +4 -0
  33. data/lib/kongfigure/services/service.rb +53 -0
  34. data/lib/kongfigure/services/upstream.rb +41 -0
  35. data/lib/kongfigure/version.rb +3 -0
  36. data/lib/kongfigure.rb +46 -0
  37. metadata +155 -0
@@ -0,0 +1,56 @@
1
+ require "uri"
2
+ module Kongfigure::Resources
3
+ class Service < Base
4
+ attr_accessor :name, :retries, :protocol, :host, :port, :path, :connect_timeout,
5
+ :write_timeout, :read_timeout, :url, :routes
6
+
7
+ def self.build(hash)
8
+ service = new(hash["id"], hash["kongfigure_ignore_fields"])
9
+ service.name = hash["name"]
10
+ service.retries = hash["retries"]
11
+ service.protocol = hash["protocol"]
12
+ service.host = hash["host"]
13
+ service.port = hash["port"]
14
+ service.path = hash["path"]
15
+ service.connect_timeout = hash["connect_timeout"]
16
+ service.write_timeout = hash["write_timeout"]
17
+ service.read_timeout = hash["read_timeout"]
18
+ service.plugins = Kongfigure::Resources::Plugin.build_all(hash["plugins"] || [])
19
+ service.routes = Kongfigure::Resources::Route.build_all(hash["routes"] || [])
20
+ service.url = hash["url"] || URI::Generic.build({
21
+ scheme: hash["protocol"],
22
+ host: hash["host"],
23
+ port: hash["port"],
24
+ path: hash["path"]
25
+ }).to_s
26
+ service
27
+ end
28
+
29
+ def identifier
30
+ name
31
+ end
32
+
33
+ def has_route?(route)
34
+ routes && routes.include?(route)
35
+ end
36
+
37
+ def api_attributes
38
+ {
39
+ "name" => name,
40
+ "retries" => retries,
41
+ "protocol" => protocol,
42
+ "host" => host,
43
+ "port" => port,
44
+ "path" => path,
45
+ "connect_timeout" => connect_timeout,
46
+ "write_timeout" => write_timeout,
47
+ "read_timeout" => read_timeout,
48
+ "url" => url
49
+ }.compact
50
+ end
51
+
52
+ def to_s
53
+ name
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,19 @@
1
+ module Kongfigure::Resources
2
+ class Target < Base
3
+ attr_accessor :target, :weight
4
+
5
+ def self.build(hash)
6
+ target = new(hash["id"], hash["kongfigure_ignore_fields"])
7
+ target.target = hash["target"]
8
+ target.weight = hash["weight"]
9
+ target
10
+ end
11
+
12
+ def api_attributes
13
+ {
14
+ "target" => target,
15
+ "weight" => weight
16
+ }.compact
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,51 @@
1
+ module Kongfigure::Resources
2
+ class Upstream < Base
3
+ attr_accessor :name, :hash_on, :hash_fallback, :hash_on_cookie_path, :slots, :healthchecks, :targets,
4
+ :hash_fallback, :hash_on_header, :hash_fallback_header, :hash_on_cookie
5
+
6
+ def self.build(hash)
7
+ upstream = new(hash["id"], hash["kongfigure_ignore_fields"])
8
+ upstream.name = hash["name"]
9
+ upstream.hash_on = hash["hash_on"]
10
+ upstream.hash_fallback = hash["hash_fallback"]
11
+ upstream.hash_on_cookie_path = hash["hash_on_cookie_path"]
12
+ upstream.slots = hash["slots"]
13
+ upstream.healthchecks = hash["healthchecks"]
14
+ upstream.hash_on_header = hash["hash_on_header"]
15
+ upstream.hash_fallback = hash["hash_fallback"]
16
+ upstream.hash_fallback_header = hash["hash_fallback_header"]
17
+ upstream.hash_on_cookie = hash["hash_on_cookie"]
18
+ upstream.targets = Kongfigure::Resources::Target.build_all(hash["targets"] || [])
19
+ upstream
20
+ end
21
+
22
+ def identifier
23
+ name
24
+ end
25
+
26
+ def to_s
27
+ if targets.size > 0
28
+ "#{name} with targets #{targets.map(&:target).join(', ')}"
29
+ else
30
+ "#{name} without target"
31
+ end
32
+ end
33
+
34
+ def api_attributes
35
+ {
36
+ "name" => name,
37
+ "hash_on" => hash_on,
38
+ "hash_fallback" => hash_fallback,
39
+ "hash_on_cookie_path" => hash_on_cookie_path,
40
+ "slots" => healthchecks,
41
+ "hash_on_header" => hash_on_header,
42
+ "hash_fallback_header" => hash_fallback_header,
43
+ "hash_on_cookie" => hash_on_cookie
44
+ }.compact
45
+ end
46
+
47
+ def has_target?(target)
48
+ targets && targets.include?(target)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,164 @@
1
+ require "colorize"
2
+
3
+ module Kongfigure::Services
4
+ class Base
5
+
6
+ def initialize(http_client)
7
+ @http_client = http_client
8
+ end
9
+
10
+ def resource_name
11
+ Dry::Inflector.new.pluralize(self.class.to_s.split("::").last.downcase.gsub("_", "-"))
12
+ end
13
+
14
+ def self.resource_name
15
+ Dry::Inflector.new.pluralize(self.to_s.split("::").last.downcase.gsub("_", "-"))
16
+ end
17
+
18
+ def all
19
+ module_name = Kongfigure::Resources.const_get(self.class.to_s.split("::").last)
20
+ @http_client.get("#{resource_name}")["data"].map do |hash_resource|
21
+ case resource_name
22
+ when "consumers"
23
+ hash_resource["acls"] = @http_client.get("#{resource_name}/#{hash_resource['id']}/acls")["data"]
24
+ hash_resource["key_auths"] = @http_client.get("#{resource_name}/#{hash_resource['id']}/key-auth")["data"]
25
+ hash_resource["plugins"] = @http_client.get("#{resource_name}/#{hash_resource['id']}/plugins")["data"]
26
+ when "upstreams"
27
+ hash_resource["targets"] = @http_client.get("#{resource_name}/#{hash_resource['id']}/targets")["data"]
28
+ when "services"
29
+ hash_resource["plugins"] = @http_client.get("#{resource_name}/#{hash_resource['id']}/plugins")["data"]
30
+ hash_resource["routes"] = @http_client.get("#{resource_name}/#{hash_resource['id']}/routes")["data"]
31
+ end
32
+ module_name.build(hash_resource)
33
+ end
34
+ end
35
+
36
+ def create_or_update(http_client, resource, remote_resources)
37
+ handle_api_errors do
38
+ related_resource = find_related_resource(resource, remote_resources)
39
+ if related_resource && need_update?(resource, related_resource)
40
+ puts "-> Update #{resource.class.name} (#{resource.identifier}).".colorize(:light_blue)
41
+ update(http_client, resource, related_resource)
42
+ elsif related_resource && need_update_dependencies?(resource, related_resource)
43
+ puts "-> Update dependencies #{resource.class.name} (#{resource.identifier}).".colorize(:light_blue)
44
+ update_dependencies(http_client, resource, related_resource)
45
+ elsif related_resource
46
+ #noop
47
+ else
48
+ puts "-> Create #{resource.class.name} (#{resource.identifier}).".colorize(:green)
49
+ create(http_client, resource, related_resource)
50
+ end
51
+ end
52
+ end
53
+
54
+ def create(http_client, resource, related_resource)
55
+ module_name = Kongfigure::Resources.const_get(self.class.to_s.split("::").last)
56
+ data = http_client.post("#{resource_name}", resource.api_attributes.to_json)
57
+ create_dependencies(http_client, resource, module_name.build(data))
58
+ end
59
+
60
+ def update(http_client, resource, related_resource)
61
+ http_client.put("#{resource_name}/#{related_resource.id}", resource.api_attributes.to_json) if need_update?(resource, related_resource)
62
+ update_dependencies(http_client, resource, related_resource)
63
+ end
64
+
65
+ def cleanup(http_client, resource, related_resource)
66
+ puts "-> Cleanup #{related_resource.class.name} (#{related_resource.identifier}).".colorize(:magenta)
67
+ http_client.delete("#{resource_name}/#{related_resource.id}")
68
+ end
69
+
70
+ def cleanup_useless_resources(http_client, local_resources, remote_resources)
71
+ useless_remote_resources = remote_resources.each do |remote_resource|
72
+ related_local_resource = find_related_resource(remote_resource, local_resources)
73
+ handle_api_errors do
74
+ if need_cleanup_dependencies?(related_local_resource, remote_resource)
75
+
76
+ cleanup_dependencies(http_client, related_local_resource, remote_resource)
77
+ end
78
+ unless related_local_resource
79
+ cleanup(http_client, related_local_resource, remote_resource)
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ def find_related_resource(target_resource, resources)
86
+ resources.find do|resource|
87
+ case target_resource.class
88
+ when Kongfigure::Resources::Plugin
89
+ resource.name == target_resource.name &&
90
+ resource.service == target_resource.service &&
91
+ resource.consumer == target_resource.consumer &&
92
+ resource.route == target_resource.route
93
+ else
94
+ resource.identifier == target_resource.identifier
95
+ end
96
+ end
97
+ end
98
+
99
+ def need_update?(resource, related_resource)
100
+ resource != related_resource
101
+ end
102
+
103
+ def need_update_dependencies?(resource, related_resource)
104
+ need_update_plugins?(resource, related_resource)
105
+ end
106
+
107
+ def need_cleanup_dependencies?(resource, related_resource)
108
+ resource.nil? || need_cleanup_plugins?(resource, related_resource)
109
+ end
110
+
111
+ def has_plugins?(resource)
112
+ resource.plugins && resource.plugins.size > 0
113
+ end
114
+
115
+ def update_dependencies(http_client, local_resource, remote_resource)
116
+ create_plugins(http_client, local_resource, remote_resource)
117
+ end
118
+
119
+ def create_dependencies(http_client, local_resource, remote_resource)
120
+ create_plugins(http_client, local_resource, remote_resource)
121
+ end
122
+
123
+ def cleanup_dependencies(http_client, local_resource, remote_resource)
124
+ puts "-> Cleanup dependencies #{remote_resource.class.name} (#{remote_resource.identifier}).".colorize(:magenta)
125
+ cleanup_plugins(http_client, local_resource, remote_resource)
126
+ end
127
+
128
+ def handle_api_errors(&block)
129
+ begin
130
+ yield
131
+ rescue Kongfigure::Errors::BadRequest => e
132
+ puts "<- Bad request: #{e.message}".colorize(:red)
133
+ end
134
+ end
135
+
136
+ def need_update_plugins?(resource, related_resource)
137
+ resource.plugins.reject do |plugin|
138
+ find_related_resource(plugin, related_resource.plugins)
139
+ end.size != 0
140
+ end
141
+
142
+ def need_cleanup_plugins?(resource, related_resource)
143
+ resource.plugins.reject do |plugin|
144
+ find_related_resource(plugin, related_resource.plugins)
145
+ end.size == 0 && resource.plugins.size < related_resource.plugins.size
146
+ end
147
+
148
+ def create_plugins(http_client, local_resource, remote_resource)
149
+ local_resource.plugins.each do |plugin|
150
+ unless find_related_resource(plugin, remote_resource.plugins)
151
+ http_client.post("#{resource_name}/#{local_resource.identifier}/plugins", plugin.api_attributes.to_json)
152
+ end
153
+ end
154
+ end
155
+
156
+ def cleanup_plugins(http_client, local_resource, remote_resource)
157
+ remote_resource.plugins.each do |plugin|
158
+ unless find_related_resource(plugin, local_resource.plugins)
159
+ http_client.delete("#{resource_name}/#{remote_resource.identifier}/plugins/#{plugin.id}")
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,60 @@
1
+ module Kongfigure::Services
2
+ class Consumer < Base
3
+ def create_dependencies(http_client, resource, related_resource)
4
+ super(http_client, resource, related_resource)
5
+ create_key_auths(http_client, resource, related_resource)
6
+ create_acls(http_client, resource, related_resource)
7
+ end
8
+
9
+ def update_dependencies(http_client, resource, related_resource)
10
+ super(http_client, resource, related_resource)
11
+ create_key_auths(http_client, resource, related_resource)
12
+ create_acls(http_client, resource, related_resource)
13
+ end
14
+
15
+ def cleanup_dependencies(http_client, resource, related_resource)
16
+ super(http_client, resource, related_resource)
17
+ cleanup_key_auths(http_client, resource, related_resource)
18
+ cleanup_acls(http_client, resource, related_resource)
19
+ end
20
+
21
+ def need_update_dependencies?(resource, related_resource)
22
+ super(resource, related_resource) ||
23
+ (resource && (resource.acls != related_resource.acls || resource.key_auths != related_resource.key_auths))
24
+ end
25
+
26
+ private
27
+
28
+ def create_acls(http_client, resource, related_resource)
29
+ resource.acls.each do |acl|
30
+ unless related_resource.has_acl?(acl)
31
+ http_client.post("#{resource_name}/#{related_resource.identifier}/acls", acl.api_attributes.to_json)
32
+ end
33
+ end
34
+ end
35
+
36
+ def create_key_auths(http_client, resource, related_resource)
37
+ resource.key_auths.each do |key_auth|
38
+ unless related_resource.has_key_auth?(key_auth)
39
+ http_client.post("#{resource_name}/#{related_resource.identifier}/key-auth", key_auth.api_attributes.to_json)
40
+ end
41
+ end
42
+ end
43
+
44
+ def cleanup_key_auths(http_client, local_resource, remote_resource)
45
+ remote_resource.key_auths.each do |remote_resource_key_auth|
46
+ unless local_resource.has_key_auth?(remote_resource_key_auth)
47
+ http_client.delete("#{resource_name}/#{remote_resource.identifier}/key-auth/#{remote_resource_key_auth.id}")
48
+ end
49
+ end
50
+ end
51
+
52
+ def cleanup_acls(http_client, local_resource, remote_resource)
53
+ remote_resource.acls.each do |remote_resource_acl|
54
+ unless local_resource.has_acl?(remote_resource_acl)
55
+ http_client.delete("#{resource_name}/#{remote_resource.identifier}/acls/#{remote_resource_acl.id}")
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,18 @@
1
+ module Kongfigure::Services
2
+ class Plugin < Base
3
+
4
+ def need_update_dependencies?(resource, related_resource)
5
+ false
6
+ end
7
+
8
+ def need_cleanup_dependencies?(resource, related_resource)
9
+ false
10
+ end
11
+
12
+ def cleanup(http_client, resource, related_resource)
13
+ return unless related_resource.is_global?
14
+ puts "-> Cleanup #{remote_resource.class.name} (#{remote_resource.identifier}).".colorize(:magenta)
15
+ http_client.delete("#{resource_name}/#{related_resource.id}")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,4 @@
1
+ module Kongfigure::Services
2
+ class Route < Base
3
+ end
4
+ end
@@ -0,0 +1,53 @@
1
+ module Kongfigure::Services
2
+ class Service < Base
3
+ def create_dependencies(http_client, resource, related_resource)
4
+ super(http_client, resource, related_resource)
5
+ create_routes(http_client, resource, related_resource)
6
+ end
7
+
8
+ def update_dependencies(http_client, resource, related_resource)
9
+ super(http_client, resource, related_resource)
10
+ create_routes(http_client, resource, related_resource)
11
+ end
12
+
13
+ def cleanup_dependencies(http_client, resource, related_resource)
14
+ super(http_client, resource, related_resource)
15
+ cleanup_routes(http_client, resource, related_resource)
16
+ end
17
+
18
+ def need_cleanup_dependencies?(resource, related_resource)
19
+ super(resource, related_resource) || resource.nil? || resource.routes != related_resource.routes
20
+ end
21
+
22
+ def need_update_dependencies?(resource, related_resource)
23
+ super(resource, related_resource) || (resource && (resource.routes != related_resource.routes))
24
+ end
25
+
26
+ private
27
+
28
+ def create_routes(http_client, resource, related_resource)
29
+ resource.routes.each do |route|
30
+ unless related_resource.has_route?(route)
31
+ http_client.post("#{resource_name}/#{related_resource.identifier}/routes", route.api_attributes.to_json)
32
+ end
33
+ end
34
+ end
35
+
36
+ def cleanup_routes(http_client, local_resource, remote_resource)
37
+ # cleanup duplicated routes
38
+ duplicated_routes = remote_resource.routes.select do |route|
39
+ remote_resource.routes.count(route) > 1
40
+ end.uniq
41
+ duplicated_routes.each do |duplicated_route|
42
+ http_client.delete("routes/#{duplicated_route.id}")
43
+ remote_resource.routes.delete(duplicated_route)
44
+ end
45
+ # cleanup useless routes
46
+ remote_resource.routes.each do |remote_resource_route|
47
+ unless local_resource.has_route?(remote_resource_route)
48
+ http_client.delete("routes/#{remote_resource_route.id}")
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,41 @@
1
+ module Kongfigure::Services
2
+ class Upstream < Base
3
+ def create_dependencies(http_client, resource, related_resource)
4
+ super(http_client, resource, related_resource)
5
+ create_targets(http_client, resource, related_resource)
6
+ end
7
+
8
+ def update_dependencies(http_client, resource, related_resource)
9
+ super(http_client, resource, related_resource)
10
+ create_targets(http_client, resource, related_resource)
11
+ end
12
+
13
+ def cleanup_dependencies(http_client, resource, related_resource)
14
+ super(http_client, resource, related_resource)
15
+ cleanup_targets(http_client, resource, related_resource)
16
+ end
17
+
18
+ def need_update_dependencies?(resource, related_resource)
19
+ super(resource, related_resource) &&
20
+ resource && (resource.targets != related_resource.targets)
21
+ end
22
+
23
+ private
24
+
25
+ def create_targets(http_client, resource, related_resource)
26
+ resource.targets.each do |target|
27
+ unless related_resource.has_target?(target)
28
+ http_client.post("#{resource_name}/#{related_resource.identifier}/targets", target.api_attributes.to_json)
29
+ end
30
+ end
31
+ end
32
+
33
+ def cleanup_targets(http_client, local_resource, remote_resource)
34
+ remote_resource.targets.each do |remote_resource_target|
35
+ if (local_resource.nil? || !local_resource.has_target?(remote_resource_target)) && remote_resource_target.weight > 0
36
+ http_client.delete("#{resource_name}/#{remote_resource.identifier}/targets/#{remote_resource_target.id}")
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ module Kongfigure
2
+ VERSION = "0.0.2"
3
+ end
data/lib/kongfigure.rb ADDED
@@ -0,0 +1,46 @@
1
+ require_relative "kongfigure/version.rb"
2
+ require_relative "kongfigure/cli.rb"
3
+ require_relative "kongfigure/resources/base.rb"
4
+ require_relative "kongfigure/resources/consumers/acl.rb"
5
+ require_relative "kongfigure/resources/consumers/key_auth.rb"
6
+ require_relative "kongfigure/resources/consumer.rb"
7
+ require_relative "kongfigure/resources/plugin.rb"
8
+ require_relative "kongfigure/resources/route.rb"
9
+ require_relative "kongfigure/resources/service.rb"
10
+ require_relative "kongfigure/resources/target.rb"
11
+ require_relative "kongfigure/resources/upstream.rb"
12
+ require_relative "kongfigure/services/base.rb"
13
+ require_relative "kongfigure/services/consumer.rb"
14
+ require_relative "kongfigure/services/plugin.rb"
15
+ require_relative "kongfigure/services/route.rb"
16
+ require_relative "kongfigure/services/service.rb"
17
+ require_relative "kongfigure/services/upstream.rb"
18
+ require_relative "kongfigure/configuration.rb"
19
+ require_relative "kongfigure/parser.rb"
20
+ require_relative "kongfigure/http_client.rb"
21
+ require_relative "kongfigure/kong.rb"
22
+ require_relative "kongfigure/errors/resource_not_found.rb"
23
+ require_relative "kongfigure/errors/resource_conflict.rb"
24
+ require_relative "kongfigure/errors/bad_request.rb"
25
+ require_relative "kongfigure/errors/internal_server_error.rb"
26
+ require_relative "kongfigure/errors/invalid_configuration.rb"
27
+
28
+ require "rest-client"
29
+ require "logger"
30
+
31
+ module Kongfigure
32
+ def self.logger
33
+ @logger ||= Logger.new(STDOUT)
34
+ end
35
+
36
+ def self.start(args)
37
+ # CLI
38
+ cli = Kongfigure::CLI.new
39
+ options = cli.parse!(args)
40
+ # Parser
41
+ parser = Kongfigure::Parser.new(options[:file])
42
+ http_client = Kongfigure::HTTPClient.new
43
+ kong = Kongfigure::Kong.new(parser, http_client)
44
+ kong.apply!
45
+ end
46
+ end
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kongfigure
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ibanity
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-01-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.0.2
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_print
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 1.8.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 1.8.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: dry-inflector
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.1.2
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.1.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: colorize
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.8.1
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.8.1
89
+ description: A tool to manage Kong resources with a declarative configuration.
90
+ email:
91
+ - it@ibanity.com
92
+ executables:
93
+ - kongfigure
94
+ extensions: []
95
+ extra_rdoc_files: []
96
+ files:
97
+ - ".gitignore"
98
+ - Gemfile
99
+ - Gemfile.lock
100
+ - LICENSE.txt
101
+ - README.md
102
+ - exe/kongfigure
103
+ - exe/kongfigure_local
104
+ - kongfigure.gemspec
105
+ - lib/kongfigure.rb
106
+ - lib/kongfigure/cli.rb
107
+ - lib/kongfigure/configuration.rb
108
+ - lib/kongfigure/errors/bad_request.rb
109
+ - lib/kongfigure/errors/internal_server_error.rb
110
+ - lib/kongfigure/errors/invalid_configuration.rb
111
+ - lib/kongfigure/errors/resource_conflict.rb
112
+ - lib/kongfigure/errors/resource_not_found.rb
113
+ - lib/kongfigure/http_client.rb
114
+ - lib/kongfigure/kong.rb
115
+ - lib/kongfigure/parser.rb
116
+ - lib/kongfigure/resources/base.rb
117
+ - lib/kongfigure/resources/consumer.rb
118
+ - lib/kongfigure/resources/consumers/acl.rb
119
+ - lib/kongfigure/resources/consumers/key_auth.rb
120
+ - lib/kongfigure/resources/plugin.rb
121
+ - lib/kongfigure/resources/route.rb
122
+ - lib/kongfigure/resources/service.rb
123
+ - lib/kongfigure/resources/target.rb
124
+ - lib/kongfigure/resources/upstream.rb
125
+ - lib/kongfigure/services/base.rb
126
+ - lib/kongfigure/services/consumer.rb
127
+ - lib/kongfigure/services/plugin.rb
128
+ - lib/kongfigure/services/route.rb
129
+ - lib/kongfigure/services/service.rb
130
+ - lib/kongfigure/services/upstream.rb
131
+ - lib/kongfigure/version.rb
132
+ homepage: https://github.com/ibanity/kongfigure
133
+ licenses:
134
+ - MIT
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 2.4.0
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubygems_version: 3.0.1
152
+ signing_key:
153
+ specification_version: 4
154
+ summary: Kongfigure.
155
+ test_files: []