kong_schema 1.1.1 → 1.2.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +2 -2
- data/README.md +24 -9
- data/lib/kong_schema/cli.rb +59 -5
- data/lib/kong_schema/client.rb +12 -0
- data/lib/kong_schema/version.rb +1 -1
- data/spec/support/kong_schema_test_utils.rb +1 -8
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 413c7b7271ed7feca20d06caeaf0bd671bf5d253
|
4
|
+
data.tar.gz: b79a0818ae360b7df3e7e9dc6a3ffc84398d3e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fab914455b8b170f43ff70537e9604ac8e4489b6264356277257ddaff95f6df25c8cc36cae2107b5fd60987cb9a9bb4455e06319c97e67ea8824a35ce567b194
|
7
|
+
data.tar.gz: e1861af086a278bd9257469dccc314cc26211814bac1db35d8800171ad480a234b539c4424e25c40ac86ca13b081171577882c47f42dedee5c236ec091992726
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kong_schema (1.
|
4
|
+
kong_schema (1.2.0)
|
5
5
|
diffy (~> 3.1)
|
6
6
|
gli (~> 2.16)
|
7
7
|
kong (~> 0.3)
|
@@ -12,7 +12,7 @@ GEM
|
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
14
|
diff-lcs (1.3)
|
15
|
-
diffy (3.
|
15
|
+
diffy (3.2.0)
|
16
16
|
docile (1.1.5)
|
17
17
|
equatable (0.5.0)
|
18
18
|
excon (0.49.0)
|
data/README.md
CHANGED
@@ -29,9 +29,22 @@ end
|
|
29
29
|
## Usage
|
30
30
|
|
31
31
|
Write your desired configuration for Kong in a file using either YAML or JSON.
|
32
|
-
The supported "directives" are described later in this document.
|
32
|
+
The supported "directives" are described later in this document. Then you can
|
33
|
+
use the `kong_schema` binary to perform various actions.
|
33
34
|
|
34
|
-
|
35
|
+
Run `kong_schema --help` to see the available commands.
|
36
|
+
|
37
|
+
```shell
|
38
|
+
# apply configuration
|
39
|
+
kong_schema up [path/to/config.yml]
|
40
|
+
|
41
|
+
# reset configuration
|
42
|
+
kong_schema reset [path/to/config.yml]
|
43
|
+
```
|
44
|
+
|
45
|
+
## Example
|
46
|
+
|
47
|
+
Let's assume we have such a config file:
|
35
48
|
|
36
49
|
```yaml
|
37
50
|
# file: config/kong.yml
|
@@ -41,12 +54,12 @@ kong:
|
|
41
54
|
- name: application-api
|
42
55
|
hosts:
|
43
56
|
- api.application.dev
|
57
|
+
preserve_host: true
|
58
|
+
strip_uri: false
|
44
59
|
upstream_url: http://application-api-lb
|
45
60
|
uris:
|
46
61
|
- /api/.+
|
47
62
|
- /auth/.+
|
48
|
-
preserve_host: true
|
49
|
-
strip_uri: false
|
50
63
|
upstreams:
|
51
64
|
- name: application-api-lb
|
52
65
|
targets:
|
@@ -57,7 +70,7 @@ kong:
|
|
57
70
|
Then if we run the following command:
|
58
71
|
|
59
72
|
```shell
|
60
|
-
|
73
|
+
kong_schema up config/kong.yml
|
61
74
|
```
|
62
75
|
|
63
76
|
kong_schema will read the directives found under the `kong` dictionary and
|
@@ -155,9 +168,11 @@ Nice and easy!
|
|
155
168
|
|
156
169
|
- name: String
|
157
170
|
- host: String
|
171
|
+
- methods: Array<String>
|
172
|
+
- preserve_host: Boolean
|
173
|
+
- strip_uri: Boolean
|
158
174
|
- upstream_url: String
|
159
175
|
- uris: Array<String>
|
160
|
-
- preserve_host: Boolean
|
161
176
|
|
162
177
|
### `upstreams: Array<Kong::Upstream>`
|
163
178
|
|
@@ -165,8 +180,8 @@ Nice and easy!
|
|
165
180
|
configuration:
|
166
181
|
|
167
182
|
- name: String
|
168
|
-
-
|
169
|
-
-
|
183
|
+
- slots: Number
|
184
|
+
- orderlist: Array<Number>
|
170
185
|
|
171
186
|
### `targets: Array<Kong::Target>`
|
172
187
|
|
@@ -175,7 +190,7 @@ configuration:
|
|
175
190
|
|
176
191
|
- upstream_id: String
|
177
192
|
- target: String
|
178
|
-
-
|
193
|
+
- weight: Number
|
179
194
|
|
180
195
|
## TODO
|
181
196
|
|
data/lib/kong_schema/cli.rb
CHANGED
@@ -14,9 +14,10 @@ module KongSchema
|
|
14
14
|
|
15
15
|
version KongSchema::VERSION
|
16
16
|
|
17
|
+
sort_help :manually
|
18
|
+
|
17
19
|
desc 'Apply configuration from a .yml or .json file.'
|
18
20
|
arg(:config_file)
|
19
|
-
|
20
21
|
command :up do |c|
|
21
22
|
c.flag([ 'k', 'key' ], {
|
22
23
|
default_value: 'kong',
|
@@ -38,12 +39,33 @@ module KongSchema
|
|
38
39
|
})
|
39
40
|
|
40
41
|
c.action do |global_options, options, args|
|
41
|
-
|
42
|
+
bail! "Missing path to .yml or .json config file" if args.first.nil?
|
42
43
|
|
43
44
|
up(filepath: args.first, options: options)
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
desc 'Reset Kong configuration completely.'
|
49
|
+
arg(:config_file)
|
50
|
+
command :reset do |c|
|
51
|
+
c.flag([ 'k', 'key' ], {
|
52
|
+
default_value: 'kong',
|
53
|
+
desc: 'The root configuration property key.',
|
54
|
+
arg_name: 'NAME'
|
55
|
+
})
|
56
|
+
|
57
|
+
c.switch([ 'confirm' ], {
|
58
|
+
default_value: true,
|
59
|
+
desc: 'Prompt for confirmation before applying changes.'
|
60
|
+
})
|
61
|
+
|
62
|
+
c.action do |global_options, options, args|
|
63
|
+
bail! "Missing path to .yml or .json config file" if args.first.nil?
|
64
|
+
|
65
|
+
reset(filepath: args.first, options: options)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
47
69
|
super(argv)
|
48
70
|
end
|
49
71
|
|
@@ -56,19 +78,31 @@ module KongSchema
|
|
56
78
|
|
57
79
|
schema.scan(config).tap do |changes|
|
58
80
|
if changes.empty?
|
59
|
-
puts "#{
|
81
|
+
puts "#{green('✓')} Nothing to update."
|
60
82
|
else
|
61
83
|
puts KongSchema::Reporter.report(changes, object_format: options[:format].to_sym)
|
62
84
|
|
63
|
-
if
|
85
|
+
if !options[:confirm] || yes?('Commit the changes to Kong?')
|
64
86
|
schema.commit(config, changes)
|
65
87
|
|
66
|
-
puts "#{
|
88
|
+
puts "#{green('✓')} Kong has been reconfigured!"
|
67
89
|
end
|
68
90
|
end
|
69
91
|
end
|
70
92
|
end
|
71
93
|
|
94
|
+
def reset(filepath:, options:)
|
95
|
+
pastel = Pastel.new
|
96
|
+
schema = KongSchema::Schema
|
97
|
+
config = read_property(load_file(filepath), options[:key])
|
98
|
+
|
99
|
+
if !options[:confirm] || yes?("You are about to completely reset Kong's database. Proceed?")
|
100
|
+
KongSchema::Client.purge(config)
|
101
|
+
|
102
|
+
puts "#{green('✓')} Kong reset."
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
72
106
|
def load_file(filepath)
|
73
107
|
if filepath.end_with?('.json')
|
74
108
|
JSON.parse(File.read(filepath))
|
@@ -84,5 +118,25 @@ module KongSchema
|
|
84
118
|
config.fetch(key.to_s)
|
85
119
|
end
|
86
120
|
end
|
121
|
+
|
122
|
+
def yes?(message, default: false)
|
123
|
+
TTY::Prompt.new.yes?(message, default: default)
|
124
|
+
end
|
125
|
+
|
126
|
+
def red(text)
|
127
|
+
pastel.red(text)
|
128
|
+
end
|
129
|
+
|
130
|
+
def green(text)
|
131
|
+
pastel.green(text)
|
132
|
+
end
|
133
|
+
|
134
|
+
def pastel
|
135
|
+
@pastel ||= Pastel.new
|
136
|
+
end
|
137
|
+
|
138
|
+
def bail!(reason)
|
139
|
+
help_now! red("✘ #{reason}")
|
140
|
+
end
|
87
141
|
end
|
88
142
|
end
|
data/lib/kong_schema/client.rb
CHANGED
@@ -26,5 +26,17 @@ module KongSchema
|
|
26
26
|
ensure
|
27
27
|
Kong::Client.api_url = api_url
|
28
28
|
end
|
29
|
+
|
30
|
+
# Reset Kong's database by removing all objects through the API.
|
31
|
+
def self.purge(config)
|
32
|
+
connect(config) do
|
33
|
+
KongSchema::Resource::Upstream.all.each do |upstream|
|
34
|
+
upstream.targets.each(&:delete)
|
35
|
+
upstream.delete
|
36
|
+
end
|
37
|
+
|
38
|
+
KongSchema::Resource::Api.all.each(&:delete)
|
39
|
+
end
|
40
|
+
end
|
29
41
|
end
|
30
42
|
end
|
data/lib/kong_schema/version.rb
CHANGED
@@ -12,13 +12,6 @@ class KongSchemaTestUtils
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def reset_kong
|
15
|
-
KongSchema::Client.
|
16
|
-
KongSchema::Resource::Upstream.all.each do |upstream|
|
17
|
-
upstream.targets.each(&:delete)
|
18
|
-
upstream.delete
|
19
|
-
end
|
20
|
-
|
21
|
-
KongSchema::Resource::Api.all.each(&:delete)
|
22
|
-
end
|
15
|
+
KongSchema::Client.purge(generate_config)
|
23
16
|
end
|
24
17
|
end
|