kustomizer 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/README.md +129 -9
- data/kustomizer.gemspec +1 -0
- data/lib/kustomize/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 961ff655cafb23672a01fae7147f08a28d4198a59f72a07c092cfd8907acb98f
|
4
|
+
data.tar.gz: fdafe50e353de94b2105fa754a31ff6a40b347585f1d0359924410581ffa7b58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60136761417e2ddcdeef7af0e1fb8898ba1cdb95b62e638e0355fba04af252c9b14fce85801f924109ebbae4be01f19e83a3b9795dbb29a9ea49303e71f62bfa
|
7
|
+
data.tar.gz: 1bce76a9ccb5549dc71e3bf1acb0a8c26f0ded8c0a785332f6d72c77d81fffc71ec9629fa593462312fe67bee80ffb19c5b78d792b5e6e3b3f02b0e39d805e93
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kustomizer (0.1.
|
4
|
+
kustomizer (0.1.1)
|
5
5
|
accessory (~> 0.1.9)
|
6
|
+
base32-multi
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
9
10
|
specs:
|
10
11
|
accessory (0.1.9)
|
12
|
+
base32-multi (0.1.1)
|
11
13
|
diff-lcs (1.4.4)
|
12
14
|
rake (13.0.3)
|
13
15
|
rspec (3.10.0)
|
data/README.md
CHANGED
@@ -9,9 +9,14 @@ the user to have the native Go version of Kustomize installed.
|
|
9
9
|
## Roadmap
|
10
10
|
|
11
11
|
KustomizeR is **not yet feature-complete**, i.e. it does not yet do everything
|
12
|
-
that Kustomize does.
|
12
|
+
that Kustomize does. KustomizeR probably won't work for arbitrary
|
13
|
+
`kustomization.yaml` files.
|
13
14
|
|
14
|
-
|
15
|
+
(KustomizeR *is*, however, in production use; it is being used with
|
16
|
+
`kustomization.yaml` files matching its current feature set. We wrote Just
|
17
|
+
Enough Library to solve our own problems :wink:)
|
18
|
+
|
19
|
+
Status of `kustomization.yaml` feature support:
|
15
20
|
|
16
21
|
* [x] `bases`
|
17
22
|
* [ ] `commonAnnotations`
|
@@ -31,7 +36,7 @@ Status of `kustomization.yaml` support:
|
|
31
36
|
* [ ] `transformers` (see [Extending Kustomize](https://kubectl.docs.kubernetes.io/guides/extending_kustomize/))
|
32
37
|
* [ ] `vars`
|
33
38
|
|
34
|
-
Status of support for other features:
|
39
|
+
Status of support for other Kustomize features:
|
35
40
|
|
36
41
|
* [ ] Resource loading
|
37
42
|
* [x] resource-config files on disk
|
@@ -44,6 +49,15 @@ Status of support for other features:
|
|
44
49
|
* [x] Secrets
|
45
50
|
* [ ] ConfigMaps
|
46
51
|
|
52
|
+
Status of support for "extra" features not supported by Kustomize:
|
53
|
+
|
54
|
+
* [ ] `filters` (a plugin-type for dropping resource-configs from output)
|
55
|
+
* [ ] `rewriters` (a plugin-type for entirely replacing output; takes all
|
56
|
+
intermediate resource-config docs as a single input)
|
57
|
+
* [ ] Built-in plugins:
|
58
|
+
* [ ] `SealedSecretGenerator`
|
59
|
+
* [ ] `DerivedSecretGenerator`
|
60
|
+
|
47
61
|
#### Differences from Kustomize
|
48
62
|
|
49
63
|
* KustomizeR is **not yet feature-complete**. (KustomizeR will be bumped to
|
@@ -55,12 +69,16 @@ Status of support for other features:
|
|
55
69
|
* KustomizeR is modular, and is intended to be loaded and used as a library,
|
56
70
|
rather than being spawned as a subprocess. Crucially, the load path for
|
57
71
|
plugins is under the caller's control, and so higher-level frameworks can
|
58
|
-
|
72
|
+
inject plugins into a KustomizeR session to suit their needs.
|
59
73
|
|
60
74
|
* Some `kustomization.yaml` features have been temporarily extended in
|
61
|
-
non-compatible ways
|
62
|
-
* `patchesJson6902`
|
63
|
-
|
75
|
+
non-compatible ways:
|
76
|
+
* `patchesJson6902`
|
77
|
+
* accepts an inline `ops` array
|
78
|
+
* accepts lens accessor names in `path` (e.g. `/spec/rules/:all/host`)
|
79
|
+
* accepts a `paths` array rather than a single `path`
|
80
|
+
* accepts a `gsub` op (works like `replace` but with a regular expression;
|
81
|
+
has `pattern` and `replacement` fields)
|
64
82
|
|
65
83
|
(Before v1.0, these extensions will be moved to become built-in plugins, to
|
66
84
|
allow for inter-compatibility with Kustomize, which could support them as
|
@@ -86,12 +104,114 @@ Or install it yourself as:
|
|
86
104
|
|
87
105
|
```ruby
|
88
106
|
require 'kustomize'
|
107
|
+
```
|
108
|
+
|
109
|
+
### Loading Kustomization documents
|
110
|
+
|
111
|
+
You can either load a `kustomization.yaml` file by specifying its path:
|
112
|
+
|
113
|
+
```ruby
|
89
114
|
k = Kustomize.load("./path/to/kustomization.yaml")
|
90
115
|
|
91
|
-
|
92
|
-
k
|
116
|
+
# equivalent; discovers the kustomization.yaml within the directory
|
117
|
+
k = Kustomize.load("./path/to")
|
93
118
|
```
|
94
119
|
|
120
|
+
Or you can load a `Kustomization` document spec directly:
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
k_doc = {
|
124
|
+
'apiVersion' => 'kustomize.config.k8s.io/v1beta1',
|
125
|
+
'kind' => 'Kustomization',
|
126
|
+
# ...
|
127
|
+
}
|
128
|
+
|
129
|
+
k = Kustomization.load(k_doc, source_path: "./path/to/kustomization.yaml")
|
130
|
+
```
|
131
|
+
|
132
|
+
Note the `source_path` keyword parameter. Specifying a `source_path` for an
|
133
|
+
in-memory Kustomization document is optional, but will usually be necessary, as
|
134
|
+
the Kustomization document will need an effective path for itself, to use as a
|
135
|
+
relative navigation prefix for any referenced on-disk resource files/directories.
|
136
|
+
|
137
|
+
The `source_path` can be left out if all the resources a Kustomization document
|
138
|
+
references are either remote or generated.
|
139
|
+
|
140
|
+
### Rendering resource-configuration documents
|
141
|
+
|
142
|
+
To get the final resource-configurations directly, as an Array of Hashes, call
|
143
|
+
`KustomizationDocument#emit`:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
k.emit # => [{'kind' => 'Deployment', ...}, ...]
|
147
|
+
```
|
148
|
+
|
149
|
+
Or, to get a merged YAML multi-document stream suitable for feeding to
|
150
|
+
`kubectl apply -f`, call `KustomizationDocument#to_yaml_stream`:
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
k.to_yaml_stream # => "---\nkind: Deployment\n..."
|
154
|
+
```
|
155
|
+
|
156
|
+
### Accessing intermediate resources
|
157
|
+
|
158
|
+
KustomizeR represents your Kustomization document as a digraph of `Emitter`
|
159
|
+
instances, a combination of `FileEmitter`s, `DirectoryEmitter`s,
|
160
|
+
`DocumentEmitter`s, and `PluginEmitter`s. You can think of these as being
|
161
|
+
arranged akin to an audio VST digraph, where emitters are "plugged into" other
|
162
|
+
downstream emitters, with the outputs (resource configs) of one emitter becoming
|
163
|
+
inputs to another.
|
164
|
+
|
165
|
+
All `Emitter` types support the following methods:
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
e.input_emitters # gets the emitters that feed their output into this emitter
|
169
|
+
|
170
|
+
e.input_resources # runs the input emitters, gathering their outputs and
|
171
|
+
# caching it as this emitter's input
|
172
|
+
|
173
|
+
e.emit # runs this emitter, producing the output that would be fed
|
174
|
+
# into any downstream emitters
|
175
|
+
```
|
176
|
+
|
177
|
+
A `KustomizationDocument` constructed by `Kustomize.load` is just a regular
|
178
|
+
`Emitter`; you can use it as the starting point to explore or manipulate the
|
179
|
+
rest of the `Emitter` graph.
|
180
|
+
|
181
|
+
### Sessions
|
182
|
+
|
183
|
+
All emitters belong to a `Kustomize::Session`. When you call `Kustomize.load`,
|
184
|
+
you pass in (or implicitly create) a new `Kustomize::Session`:
|
185
|
+
|
186
|
+
```ruby
|
187
|
+
Kustomize.load("./foo", session: Kustomize::Session.new)
|
188
|
+
Kustomize.load("./foo") # equivalent to above
|
189
|
+
```
|
190
|
+
|
191
|
+
#### Plugin Load-Paths
|
192
|
+
|
193
|
+
The `Kustomize::Session` manages plugin load-paths. By default, it defines a
|
194
|
+
load-path referencing only the built-in plugins embedded within this gem.
|
195
|
+
|
196
|
+
You can create your own subclass of `Kustomize::Session` to define a new
|
197
|
+
load-path, and pass in an instance of it as the `session` keyword-parameter
|
198
|
+
to `Kustomize.load`. This custom Session will be inherited by all `Emitter`s
|
199
|
+
created under the loaded `KustomizeDocument` emitter.
|
200
|
+
|
201
|
+
You can also add other features to your `Kustomize::Session` subclass. The
|
202
|
+
passed-in `Session` is accessible within `Kustomize::Plugin`s as
|
203
|
+
`this.session`, so it can be useful to pass e.g. a framework context object as
|
204
|
+
a member of your `Kustomize::Session` subclass, for use by framework-specific
|
205
|
+
plugins.
|
206
|
+
|
207
|
+
#### Plugin Discovery and Loading
|
208
|
+
|
209
|
+
The `Kustomize::Session` also holds an instance of `Kustomize::PluginManager`,
|
210
|
+
which discovers, loads, and caches plugins.
|
211
|
+
|
212
|
+
As such, if you're calling `Kustomize.load` a lot, it is recommended to reuse
|
213
|
+
your `Kustomize::Session`, so that plugins need only be discovered+loaded once.
|
214
|
+
|
95
215
|
## Development
|
96
216
|
|
97
217
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/kustomizer.gemspec
CHANGED
data/lib/kustomize/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kustomizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Levi Aul
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.1.9
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: base32-multi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: A pure-ruby implementation of the Kubernetes 'kustomize' command.
|
28
42
|
email:
|
29
43
|
- levi@leviaul.com
|