kubes 0.5.0 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gcloudignore +22 -0
- data/.gitignore +1 -1
- data/CHANGELOG.md +22 -0
- data/Dockerfile +6 -6
- data/Dockerfile.alpine +20 -0
- data/README.md +54 -8
- data/docker/install/docker.sh +8 -0
- data/docker/install/gcloud.sh +18 -0
- data/docker/install/kubectl.sh +4 -0
- data/docs/_docs/config/hooks/kubes.md +1 -0
- data/docs/_docs/config/reference.md +1 -0
- data/docs/_docs/dsl/multiple-resources.md +3 -1
- data/docs/_docs/dsl/resources/secret.md +19 -2
- data/docs/_docs/generators.md +4 -4
- data/docs/_docs/helpers.md +16 -2
- data/docs/_docs/helpers/aws/advanced.md +10 -0
- data/docs/_docs/helpers/aws/advanced/secrets.md +131 -0
- data/docs/_docs/helpers/aws/advanced/ssm.md +78 -0
- data/docs/_docs/helpers/aws/secrets.md +18 -88
- data/docs/_docs/helpers/aws/ssm.md +20 -38
- data/docs/_docs/helpers/google/advanced.md +10 -0
- data/docs/_docs/helpers/google/advanced/secrets.md +78 -0
- data/docs/_docs/helpers/google/gke.md +89 -0
- data/docs/_docs/helpers/google/secrets.md +18 -27
- data/docs/_docs/intro.md +2 -11
- data/docs/_docs/intro/how-kubes-works.md +7 -11
- data/docs/_docs/layering.md +2 -0
- data/docs/_docs/layering/mix.md +99 -0
- data/docs/_docs/patterns/multiple-envs.md +55 -0
- data/docs/_docs/variables.md +23 -0
- data/docs/_docs/variables/advanced.md +62 -0
- data/docs/_docs/variables/basic.md +137 -0
- data/docs/_docs/vs.md +10 -0
- data/docs/_docs/vs/custom.md +109 -0
- data/docs/_docs/vs/helm.md +243 -0
- data/docs/_docs/vs/kustomize.md +167 -0
- data/docs/_includes/intro/features.md +11 -0
- data/docs/_includes/layering/layers.md +2 -4
- data/docs/_includes/sidebar.html +39 -0
- data/docs/_includes/vs/article.md +1 -0
- data/docs/_includes/vs/kubes/layering.md +10 -0
- data/docs/_includes/vs/kubes/structure.md +24 -0
- data/docs/_reference/kubes-new-help.md +15 -0
- data/docs/_reference/kubes-new-helper.md +25 -0
- data/docs/_reference/kubes-new-resource.md +56 -0
- data/docs/_reference/kubes-new-variable.md +20 -0
- data/docs/_reference/kubes-new.md +6 -38
- data/kubes.gemspec +2 -2
- data/lib/kubes.rb +4 -3
- data/lib/kubes/auth.rb +13 -1
- data/lib/kubes/auth/base.rb +21 -0
- data/lib/kubes/auth/ecr.rb +1 -15
- data/lib/kubes/auth/gcr.rb +24 -0
- data/lib/kubes/cli/apply.rb +0 -1
- data/lib/kubes/cli/help/new/helper.md +4 -0
- data/lib/kubes/cli/help/{new.md → new/resource.md} +3 -3
- data/lib/kubes/cli/new.rb +12 -94
- data/lib/kubes/cli/new/helper.rb +24 -0
- data/lib/kubes/cli/new/resource.rb +97 -0
- data/lib/kubes/cli/new/variable.rb +16 -0
- data/lib/kubes/cli/prune.rb +4 -2
- data/lib/kubes/command.rb +1 -1
- data/lib/kubes/compiler/decorator/base.rb +1 -1
- data/lib/kubes/compiler/dsl/core/base.rb +6 -9
- data/lib/kubes/compiler/layering.rb +21 -7
- data/lib/kubes/compiler/shared/custom_variables.rb +38 -0
- data/lib/kubes/compiler/shared/plugin_helpers.rb +14 -0
- data/lib/kubes/compiler/strategy.rb +7 -6
- data/lib/kubes/compiler/strategy/base.rb +59 -2
- data/lib/kubes/compiler/strategy/dsl.rb +0 -29
- data/lib/kubes/compiler/strategy/erb.rb +10 -22
- data/lib/kubes/compiler/util/normalize.rb +6 -3
- data/lib/kubes/compiler/util/yaml_dump.rb +4 -4
- data/lib/kubes/config.rb +14 -0
- data/lib/kubes/hooks/builder.rb +20 -5
- data/lib/kubes/hooks/concern.rb +1 -1
- data/lib/kubes/kubectl/batch.rb +7 -0
- data/lib/kubes/plugin.rb +14 -0
- data/lib/kubes/util/sh.rb +1 -1
- data/lib/kubes/version.rb +1 -1
- data/lib/templates/new/helper/file.rb +2 -0
- data/lib/templates/new/{dsl → resource/dsl}/backend_config.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/config_map.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/daemon_set.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/deployment.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/ingress.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/job.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/managed_certificate.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/namespace.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/network_policy.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/pod.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/role.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/role_binding.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/secret.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/service.rb +0 -0
- data/lib/templates/new/{dsl → resource/dsl}/service_account.rb +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/backend_config.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/config_map.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/daemon_set.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/deployment.yaml +0 -1
- data/lib/templates/new/{yaml → resource/yaml}/ingress.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/job.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/managed_certificate.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/namespace.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/network_policy.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/pod.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/role.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/role_binding.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/secret.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/service.yaml +0 -0
- data/lib/templates/new/{yaml → resource/yaml}/service_account.yaml +0 -0
- data/lib/templates/new/variable/file.rb +1 -0
- data/spec/fixtures/multiple-files/{deployment-1.rb → .kubes/resources/web/deployment-1.rb} +0 -0
- data/spec/fixtures/multiple-files/{deployment-2.rb → .kubes/resources/web/deployment-2.rb} +0 -0
- data/spec/fixtures/project/.kubes/resources/{deployment.rb → web/deployment.rb} +0 -0
- data/spec/fixtures/project/.kubes/resources/{foobar.rb → web/empty.rb} +0 -0
- data/spec/fixtures/project/.kubes/resources/{service.rb → web/service.rb} +1 -1
- data/spec/fixtures/syntax/{network_policy.rb → .kubes/resources/web/network_policy.rb} +0 -0
- data/spec/fixtures/syntax/{pod.rb → .kubes/resources/web/pod.rb} +0 -0
- data/spec/kubes/compiler/strategy/dsl_spec.rb +2 -2
- data/spec/kubes/compiler_spec.rb +1 -1
- data/spec/kubes/dsl/network_policy_spec.rb +1 -1
- data/spec/kubes/dsl/pod_spec.rb +1 -1
- metadata +95 -56
@@ -0,0 +1,11 @@
|
|
1
|
+
* Automation: [Builds the Docker image]({% link _docs/config/docker.md %}) and updates the compiled YAML files
|
2
|
+
* Syntactic Sugar: Use an [ERB/YAML]({% link _docs/yaml.md %}) or a [DSL]({% link _docs/dsl.md %}) to write your Kubernetes YAML files. You can use a mix of DSL and YAML definitions in the `.kubes/resources` folder.
|
3
|
+
* Layering: Use the same Kubernetes YAML to build multiple environments like dev and prod with [layering]({% link _docs/layering.md %}).
|
4
|
+
* Secrets: Use helpers like [aws_secret]({% link _docs/helpers/aws/secrets.md %}), [aws_ssm]({% link _docs/helpers/aws/ssm.md %}), and [google_secret]({% link _docs/helpers/google/secrets.md %}) to build Kubernetes secrets.yaml from secret providers designed for it.
|
5
|
+
* Generators: Kubes ships with a few generators to help you get building with Kubernetes quickly. See: [Generator Docs]({% link _docs/generators.md %}).
|
6
|
+
* CLI Customizations: You can customize the [cli args]({% link _docs/config/args/kubectl.md %}).
|
7
|
+
* Hooks: You can also run [hooks]({% link _docs/config/hooks.md %}) before and after [kubes]({% link _docs/config/hooks/kubes.md %}) and [kubectl]({% link _docs/config/hooks/kubectl.md %}) commands.
|
8
|
+
* Automated Suffix Hashes: Automatically appends a suffix hash to ConfigMap and Secret resources. More details in [ConfigMap]({% link _docs/dsl/resources/config_map.md %}) and [Secret]({% link _docs/dsl/resources/secret.md %}) docs.
|
9
|
+
* Kustomize Support: If you're a kustomization user, you can use it with Kubes. More details in [Kustomize Support Docs]({% link _docs/misc/kustomize.md %}).
|
10
|
+
* Auto Context Switching: Map dev to a specific kubectl context and prod to another kubectl context and Kubes can switch them automatically so you won't have to remember. More details in [Auto Context Docs]({% link _docs/misc/auto-context.md %}).
|
11
|
+
* Ordering: Kubes run kubectl apply to create resources in the [correct order]({% link _docs/intro/ordering.md %}). For deleting, it kubes will run `kubectl delete` in the correct reverse order. The order is also [customizable]({% link _docs/intro/ordering/custom.md %}).
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Kubes Layering in it's full form allows you to keep your resource definitions DRY and create different environments with the same code.
|
2
2
|
|
3
|
-
## Structure
|
3
|
+
## Project Structure
|
4
4
|
|
5
5
|
Here's an example structure, so we can understand how layering works.
|
6
6
|
|
@@ -25,9 +25,7 @@ To explain the layering, here's the general processing order that Kubes takes.
|
|
25
25
|
2. Then Kubes will process your `.kubes/resources/ROLE` definitions.
|
26
26
|
3. Lastly, Kubes processes any post-layers in the `.kubes/resources/ROLE/KIND` folders.
|
27
27
|
|
28
|
-
Note, both YAML and DSL forms support layering.
|
29
|
-
|
30
|
-
Layering only combines resources definitions with the same form. For example, the DSL form `base/all.rb` will not be combined with YAML form `web/deployment.yaml`.
|
28
|
+
Note, both YAML and DSL forms support layering. They can be mixed together.
|
31
29
|
|
32
30
|
## Full Layering
|
33
31
|
|
data/docs/_includes/sidebar.html
CHANGED
@@ -28,6 +28,14 @@
|
|
28
28
|
<li><a href="{% link _docs/learn/dsl/next-steps.md %}">Next Steps</a></li>
|
29
29
|
</ul>
|
30
30
|
</li>
|
31
|
+
<li><a href="{% link _docs/vs.md %}">Kubes vs Others</a>
|
32
|
+
<ul>
|
33
|
+
{% assign docs = site.docs | where: "categories","vs" %}
|
34
|
+
{% for doc in docs -%}
|
35
|
+
<li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
|
36
|
+
{% endfor %}
|
37
|
+
</ul>
|
38
|
+
</li>
|
31
39
|
</ul>
|
32
40
|
<h2><a href="{% link docs.md %}">Docs</a></h2>
|
33
41
|
<ul id="docs">
|
@@ -83,6 +91,7 @@
|
|
83
91
|
<ul>
|
84
92
|
<li><a href="{% link _docs/layering/yaml.md %}">YAML</a></li>
|
85
93
|
<li><a href="{% link _docs/layering/dsl.md %}">DSL</a></li>
|
94
|
+
<li><a href="{% link _docs/layering/mix.md %}">Mix</a></li>
|
86
95
|
<li><a href="{% link _docs/layering/merge.md %}">Merge Behavior</a></li>
|
87
96
|
</ul>
|
88
97
|
</li>
|
@@ -99,6 +108,14 @@
|
|
99
108
|
<li><a href="{% link _docs/dsl/multiple-resources.md %}">Multiple Resources</a>
|
100
109
|
</ul>
|
101
110
|
</li>
|
111
|
+
<li><a href="{% link _docs/variables.md %}">Variables</a>
|
112
|
+
<ul>
|
113
|
+
{% assign docs = site.docs | where: "categories","variables" %}
|
114
|
+
{% for doc in docs -%}
|
115
|
+
<li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
|
116
|
+
{% endfor %}
|
117
|
+
</ul>
|
118
|
+
</li>
|
102
119
|
<li><a href="{% link _docs/helpers.md %}">Helpers</a>
|
103
120
|
<ul>
|
104
121
|
<li><a href="{% link _docs/helpers/custom.md %}">Custom</a></li>
|
@@ -106,7 +123,18 @@
|
|
106
123
|
<ul>
|
107
124
|
{% assign docs = site.docs | where: "categories","helpers-aws" %}
|
108
125
|
{% for doc in docs -%}
|
126
|
+
{% if doc.nav_text == "Advanced" %}
|
127
|
+
<li><a href='{{ doc.url }}'>{{ doc.nav_text }}</a>
|
128
|
+
<ul>
|
129
|
+
{% assign docs = site.docs | where: "categories","advanced-helpers-aws" %}
|
130
|
+
{% for doc in docs -%}
|
131
|
+
<li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
|
132
|
+
{% endfor %}
|
133
|
+
</ul>
|
134
|
+
</li>
|
135
|
+
{% else %}
|
109
136
|
<li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
|
137
|
+
{% endif %}
|
110
138
|
{% endfor %}
|
111
139
|
</ul>
|
112
140
|
</li>
|
@@ -114,7 +142,18 @@
|
|
114
142
|
<ul>
|
115
143
|
{% assign docs = site.docs | where: "categories","helpers-google" %}
|
116
144
|
{% for doc in docs -%}
|
145
|
+
{% if doc.nav_text == "Advanced" %}
|
146
|
+
<li><a href='{{ doc.url }}'>{{ doc.nav_text }}</a>
|
147
|
+
<ul>
|
148
|
+
{% assign docs = site.docs | where: "categories","advanced-helpers-google" %}
|
149
|
+
{% for doc in docs -%}
|
150
|
+
<li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
|
151
|
+
{% endfor %}
|
152
|
+
</ul>
|
153
|
+
</li>
|
154
|
+
{% else %}
|
117
155
|
<li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
|
156
|
+
{% endif %}
|
118
157
|
{% endfor %}
|
119
158
|
</ul>
|
120
159
|
</li>
|
@@ -0,0 +1 @@
|
|
1
|
+
This article also covers more differences in detail: [Kustomize vs Helm vs Kubes: Kubernetes Deploy Tools](https://blog.boltops.com/2020/11/05/kustomize-vs-helm-vs-kubes-kubernetes-deploy-tools)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
### Kubes Layering
|
2
|
+
|
3
|
+
To deploy and create multiple environments like dev and prod with the same YAML, we use a different KUBES_ENV setting:
|
4
|
+
|
5
|
+
KUBES_ENV=dev kubes deploy
|
6
|
+
KUBES_ENV=prod kubes deploy
|
7
|
+
|
8
|
+
The layering is achieved thanks to the conventional project structure. You don't have to do any extra work, you just create pre-process base layer files or post-process environment specific layer files.
|
9
|
+
|
10
|
+
* [Kubes Layering Docs]({% link _docs/layering.md %})
|
@@ -0,0 +1,24 @@
|
|
1
|
+
### Kubes Project Structure
|
2
|
+
|
3
|
+
On the other hand, Kubes defines a conventional project structure. Here's a project directory example:
|
4
|
+
|
5
|
+
.kubes
|
6
|
+
└── resources
|
7
|
+
├── base
|
8
|
+
│ ├── all.yaml
|
9
|
+
│ └── deployment.yaml
|
10
|
+
├── shared
|
11
|
+
│ └── namespace.yaml
|
12
|
+
└── web
|
13
|
+
├── deployment
|
14
|
+
│ ├── dev.yaml
|
15
|
+
│ └── prod.yaml
|
16
|
+
├── deployment.yaml
|
17
|
+
└── service.yaml
|
18
|
+
|
19
|
+
A Kubes project structure also supports introduces a role concept or folder. The folder structure only shows a web role for simplicity. You can always add more roles. For example:
|
20
|
+
|
21
|
+
.kubes/resources/ROLE/deployment.yaml
|
22
|
+
.kubes/resources/clock/deployment.yaml
|
23
|
+
.kubes/resources/web/deployment.yaml
|
24
|
+
.kubes/resources/worker/deployment.yaml
|
@@ -0,0 +1,25 @@
|
|
1
|
+
---
|
2
|
+
title: kubes new helper
|
3
|
+
reference: true
|
4
|
+
---
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
kubes new helper
|
9
|
+
|
10
|
+
## Description
|
11
|
+
|
12
|
+
Generates kubes helper file.
|
13
|
+
|
14
|
+
## Examples
|
15
|
+
|
16
|
+
$ kubes new helper custom
|
17
|
+
create .kubes/helpers/custom_helper.rb
|
18
|
+
|
19
|
+
|
20
|
+
## Options
|
21
|
+
|
22
|
+
```
|
23
|
+
y, [--force] # Bypass overwrite are you sure prompt for existing files
|
24
|
+
```
|
25
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
title: kubes new resource
|
3
|
+
reference: true
|
4
|
+
---
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
kubes new resource
|
9
|
+
|
10
|
+
## Description
|
11
|
+
|
12
|
+
Generates Kubes Kubernetes resource definition.
|
13
|
+
|
14
|
+
## Examples
|
15
|
+
|
16
|
+
$ kubes new resource ingress
|
17
|
+
create .kubes/resources/web/ingress.yaml
|
18
|
+
$ kubes new resource service_account
|
19
|
+
create .kubes/resources/shared/service_account.yaml
|
20
|
+
$
|
21
|
+
|
22
|
+
## Supported Resources
|
23
|
+
|
24
|
+
Here's a list of some of the supported resources.
|
25
|
+
|
26
|
+
backend_config
|
27
|
+
config_map
|
28
|
+
daemon_set
|
29
|
+
deployment
|
30
|
+
ingress
|
31
|
+
job
|
32
|
+
managed_certificate
|
33
|
+
namespace
|
34
|
+
network_policy
|
35
|
+
pod
|
36
|
+
role_binding
|
37
|
+
role
|
38
|
+
secret
|
39
|
+
service_account
|
40
|
+
service
|
41
|
+
|
42
|
+
Refer to the source code to all the resources that the generator supports:
|
43
|
+
https://github.com/boltops-tools/kubes/blob/master/lib/templates/new/resource/yaml
|
44
|
+
|
45
|
+
|
46
|
+
## Options
|
47
|
+
|
48
|
+
```
|
49
|
+
a, [--app=APP] # App name
|
50
|
+
# Default: demo
|
51
|
+
y, [--force] # Bypass overwrite are you sure prompt for existing files
|
52
|
+
r, [--role=ROLE] # Role. IE: web, clock, worker, migrate, etc. Defaults to convention: web or shared when not set
|
53
|
+
t, [--type=TYPE] # Type: dsl or yaml
|
54
|
+
# Default: yaml
|
55
|
+
```
|
56
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
title: kubes new variable
|
3
|
+
reference: true
|
4
|
+
---
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
kubes new variable
|
9
|
+
|
10
|
+
## Description
|
11
|
+
|
12
|
+
Generates kubes variable file.
|
13
|
+
|
14
|
+
|
15
|
+
## Options
|
16
|
+
|
17
|
+
```
|
18
|
+
y, [--force] # Bypass overwrite are you sure prompt for existing files
|
19
|
+
```
|
20
|
+
|
@@ -11,48 +11,16 @@ reference: true
|
|
11
11
|
|
12
12
|
Generates new resource.
|
13
13
|
|
14
|
-
##
|
15
|
-
|
16
|
-
$ kubes new ingress
|
17
|
-
create .kubes/resources/web/ingress.yaml
|
18
|
-
$ kubes new service_account
|
19
|
-
create .kubes/resources/shared/service_account.yaml
|
20
|
-
$
|
21
|
-
|
22
|
-
## Supported Resources
|
23
|
-
|
24
|
-
Here's a list of some of the supported resources.
|
25
|
-
|
26
|
-
backend_config
|
27
|
-
config_map
|
28
|
-
daemon_set
|
29
|
-
deployment
|
30
|
-
ingress
|
31
|
-
job
|
32
|
-
managed_certificate
|
33
|
-
namespace
|
34
|
-
network_policy
|
35
|
-
pod
|
36
|
-
role_binding
|
37
|
-
role
|
38
|
-
secret
|
39
|
-
service_account
|
40
|
-
service
|
41
|
-
|
42
|
-
Refer to the source code to all the resources that the generator supports:
|
43
|
-
https://github.com/boltops-tools/kubes/blob/master/lib/templates/new/yaml
|
14
|
+
## Subcommands
|
44
15
|
|
16
|
+
* [kubes new helper]({% link _reference/kubes-new-helper.md %}) - Generates kubes helper file.
|
17
|
+
* [kubes new resource]({% link _reference/kubes-new-resource.md %}) - Generates Kubes Kubernetes resource definition.
|
18
|
+
* [kubes new variable]({% link _reference/kubes-new-variable.md %}) - Generates kubes variable file.
|
45
19
|
|
46
20
|
## Options
|
47
21
|
|
48
22
|
```
|
49
|
-
|
50
|
-
|
51
|
-
y, [--force] # Bypass overwrite are you sure prompt for existing files
|
52
|
-
r, [--role=ROLE] # Role. IE: web, clock, worker, migrate, etc. Defaults to convention: web or shared when not set
|
53
|
-
t, [--type=TYPE] # Type: dsl or yaml
|
54
|
-
# Default: yaml
|
55
|
-
[--verbose], [--no-verbose]
|
56
|
-
[--noop], [--no-noop]
|
23
|
+
[--verbose], [--no-verbose]
|
24
|
+
[--noop], [--no-noop]
|
57
25
|
```
|
58
26
|
|
data/kubes.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_dependency "zeitwerk"
|
30
30
|
|
31
31
|
# core helper libs
|
32
|
-
spec.add_dependency "kubes_aws"
|
33
|
-
spec.add_dependency "kubes_google"
|
32
|
+
spec.add_dependency "kubes_aws", "~> 0.2.0"
|
33
|
+
spec.add_dependency "kubes_google", "~> 0.3.1"
|
34
34
|
|
35
35
|
spec.add_development_dependency "bundler"
|
36
36
|
spec.add_development_dependency "byebug"
|
data/lib/kubes.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
$stdout.sync = true unless ENV["KUBES_STDOUT_SYNC"] == "0"
|
2
2
|
|
3
3
|
$:.unshift(File.expand_path("../", __FILE__))
|
4
|
+
|
5
|
+
require "kubes/autoloader"
|
6
|
+
Kubes::Autoloader.setup
|
7
|
+
|
4
8
|
require "active_support/core_ext/class"
|
5
9
|
require "active_support/core_ext/hash"
|
6
10
|
require "active_support/core_ext/string"
|
@@ -20,9 +24,6 @@ require "kubes_google"
|
|
20
24
|
|
21
25
|
DslEvaluator.backtrace_reject = "lib/kubes"
|
22
26
|
|
23
|
-
require "kubes/autoloader"
|
24
|
-
Kubes::Autoloader.setup
|
25
|
-
|
26
27
|
module Kubes
|
27
28
|
class Error < StandardError; end
|
28
29
|
class MissingDockerImage < Error; end
|
data/lib/kubes/auth.rb
CHANGED
@@ -10,11 +10,23 @@ module Kubes
|
|
10
10
|
klass.new(@image).run
|
11
11
|
end
|
12
12
|
|
13
|
-
# Currently only support ECR
|
13
|
+
# Currently only support ECR and GCR
|
14
|
+
# TODO: consider moving this to plugin gems
|
14
15
|
def strategy_class
|
16
|
+
return unless auth?
|
15
17
|
case @image
|
16
18
|
when /\.amazonaws\.com/ # IE: 112233445566.dkr.ecr.us-west-2.amazonaws.com/demo/sinatra
|
17
19
|
Ecr
|
20
|
+
when /gcr\.io/
|
21
|
+
Gcr
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def auth?
|
26
|
+
if ENV['KUBES_REPO_AUTO_AUTH'].nil?
|
27
|
+
Kubes.config.repo_auth
|
28
|
+
else
|
29
|
+
%w[1 true].include?(ENV['KUBES_REPO_AUTO_AUTH'])
|
18
30
|
end
|
19
31
|
end
|
20
32
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
class Kubes::Auth
|
4
|
+
class Base
|
5
|
+
include Kubes::Logging
|
6
|
+
|
7
|
+
def initialize(image)
|
8
|
+
@image = image
|
9
|
+
@repo_domain = "#{image.split('/').first}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def ensure_dotdocker_exists
|
13
|
+
dirname = File.dirname(docker_config)
|
14
|
+
FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
|
15
|
+
end
|
16
|
+
|
17
|
+
def docker_config
|
18
|
+
"#{ENV['HOME']}/.docker/config.json"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/kubes/auth/ecr.rb
CHANGED
@@ -14,14 +14,9 @@
|
|
14
14
|
# If that format changes, the update will need to be updated.
|
15
15
|
#
|
16
16
|
class Kubes::Auth
|
17
|
-
class Ecr
|
17
|
+
class Ecr < Base
|
18
18
|
include Kubes::AwsServices
|
19
19
|
|
20
|
-
def initialize(image)
|
21
|
-
@image = image
|
22
|
-
@repo_domain = "#{image.split('/').first}"
|
23
|
-
end
|
24
|
-
|
25
20
|
def run
|
26
21
|
auth_token = fetch_auth_token
|
27
22
|
if File.exist?(docker_config)
|
@@ -42,14 +37,5 @@ class Kubes::Auth
|
|
42
37
|
def fetch_auth_token
|
43
38
|
ecr.get_authorization_token.authorization_data.first.authorization_token
|
44
39
|
end
|
45
|
-
|
46
|
-
def docker_config
|
47
|
-
"#{ENV['HOME']}/.docker/config.json"
|
48
|
-
end
|
49
|
-
|
50
|
-
def ensure_dotdocker_exists
|
51
|
-
dirname = File.dirname(docker_config)
|
52
|
-
FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
|
53
|
-
end
|
54
40
|
end
|
55
41
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Kubes::Auth
|
2
|
+
class Gcr < Base
|
3
|
+
def run
|
4
|
+
authorize! unless authorized?
|
5
|
+
end
|
6
|
+
|
7
|
+
def authorize!
|
8
|
+
command = "gcloud auth configure-docker"
|
9
|
+
logger.debug "Authorizing GCR with: #{command}"
|
10
|
+
success = system(command)
|
11
|
+
unless success
|
12
|
+
logger.error "ERROR: running #{command}".color(:red)
|
13
|
+
exit $?.exitstatus if exit_on_fail
|
14
|
+
end
|
15
|
+
success
|
16
|
+
end
|
17
|
+
|
18
|
+
def authorized?
|
19
|
+
return false unless File.exist?(docker_config)
|
20
|
+
data = JSON.load(IO.read(docker_config))
|
21
|
+
!!data.dig('credHelpers', 'gcr.io')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|