kubes 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70a3c967287e0537aa037d433d02e0e31b1964bc1f4a87aed27472fbf11e6f9b
4
- data.tar.gz: 0e50409529c1ca49356d651647cef3ff0c871fdc13aa2b8ab1b66a689f238543
3
+ metadata.gz: f5115dab9c9c9e52678c67ba1c6a956ffe9369961555d6393e8ad0ca40868fdd
4
+ data.tar.gz: 6f04422236a9df6a5833633c0fdc2b1bc49d31786c0fd1f1f599a75a7b7771eb
5
5
  SHA512:
6
- metadata.gz: 9077b12f79344afe33ef89cc3895b729c92ca0014d4b0e54371d8a2504115c9d35cbbd10374a350a93bf340681e8d6354b2e8cd269490a9cfb64ecc5d02a03e8
7
- data.tar.gz: 220fb55845ce19d85fb5fb3e527750638230cf1bc2b914f4aa3a5ac7ca2c0b9c0b96e7c1eb417c425d382dc9cd8a9a35ddd5358c0b5ba744faaf2972e411ae36
6
+ metadata.gz: c60e4d318db13f130929e1e554b93594f23cfda75b3a2e6974f395b1c1440734077bd85d9e11f0460371f62d8810e402db493c7fdf86b3f823ca8eb8810bb32e
7
+ data.tar.gz: b344b7af0da2964097d564407402cac1b880d134b1d213f1a40deb0234e661c7e08dc15fa3005fcfd4ba6f714d4262f5bd25c17fc876c545d0fac41898cb2a86
@@ -3,6 +3,9 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [0.2.2]
7
+ - #14 init template updates, dockerfile_port helper
8
+
6
9
  ## [0.2.1]
7
10
  - #13 improve network policy dsl
8
11
 
@@ -7,8 +7,9 @@ Kubes provides some helper methods to help write Kubernetes YAML files. Here's
7
7
  Helper | Description
8
8
  --- | ---
9
9
  built_image | Method refers to the latest Docker image built by Kubes. This spares you from having to update the image manually in the deployment resource.
10
- with_extra | Appends the `KUBES_ENV` value to a string if it's set. It's covered in the [Extra Env Docs]({% link _docs/extra-env.md %}).
10
+ dockerfile_port | Exposed port extracted from the Dockerfile of the project.
11
11
  extra | The `KUBES_ENV` value.
12
+ with_extra | Appends the `KUBES_ENV` value to a string if it's set. It's covered in the [Extra Env Docs]({% link _docs/extra-env.md %}).
12
13
 
13
14
  Here's also the source code with the helpers: [helpers.rb](https://github.com/boltops-tools/kubes/blob/master/lib/kubes/compiler/shared/helpers.rb).
14
15
 
@@ -15,6 +15,8 @@ You will be prompted to confirm before deletion. Here's out the output looks lik
15
15
  service "demo-web" deleted
16
16
  => kubectl delete -f .kubes/output/web/deployment.yaml
17
17
  deployment.apps "demo-web" deleted
18
+ => kubectl delete -f .kubes/output/shared/namespace.yaml
19
+ namespace "demo" deleted
18
20
  $
19
21
 
20
22
  Let's double-check that the resources have been deleted:
@@ -14,6 +14,8 @@ You'll see output like this:
14
14
  Pushed 111111111111.dkr.ecr.us-west-2.amazonaws.com/demo:kubes-2020-06-19T04-19-13 docker image.
15
15
  Docker push took 15s.
16
16
  Compiled .kubes/resources files
17
+ => kubectl apply -f .kubes/output/shared/namespace.yaml
18
+ namespace/demo created
17
19
  => kubectl apply -f .kubes/output/web/service.yaml
18
20
  service/demo-web created
19
21
  => kubectl apply -f .kubes/output/web/deployment.yaml
@@ -34,6 +36,9 @@ Example output:
34
36
 
35
37
  $ kubes get
36
38
  => kubectl get --recursive -f .kubes/output
39
+ NAME STATUS AGE
40
+ namespace/demo Active 10s
41
+
37
42
  NAME READY UP-TO-DATE AVAILABLE AGE
38
43
  deployment.apps/demo-web 1/1 1 1 10s
39
44
 
@@ -17,6 +17,7 @@ Let's generate a starter project:
17
17
  create .kubes/config/env/dev.rb
18
18
  create .kubes/config/env/prod.rb
19
19
  create .kubes/resources/base/all.rb
20
+ create .kubes/resources/shared/namespace.rb
20
21
  create .kubes/resources/web/deployment.rb
21
22
  create .kubes/resources/web/deployment/dev.rb
22
23
  create .kubes/resources/web/deployment/prod.rb
@@ -4,7 +4,18 @@ title: Review Project
4
4
 
5
5
  Let's review the resources.
6
6
 
7
- ## Deployment Resource
7
+ ## Namespace
8
+
9
+ We'll create a namespace for the app resources:
10
+
11
+ .kubes/resources/shared/namespace.rb
12
+
13
+ ```ruby
14
+ name "demo"
15
+ labels(app: "demo")
16
+ ```
17
+
18
+ ## Deployment
8
19
 
9
20
  The `web/deployment.rb` file is a little more interesting:
10
21
 
@@ -21,7 +32,7 @@ image built_image # IE: user/demo:kubes-2020-06-13T19-55-16-43afc6e
21
32
 
22
33
  The DSL form is more concise than the YAML form. Also, notice the use of the `built_image` helper. The `built_image` is a kubes helper method that refers to the latest Docker image built. This spares you from updating the image manually.
23
34
 
24
- ## Base Resource
35
+ ## Base Folder
25
36
 
26
37
  Also let's check the files in the base folder.
27
38
 
@@ -6,7 +6,7 @@ Let's update the app. In this case, we don't need to update the Docker image, so
6
6
 
7
7
  kubes apply
8
8
 
9
- Here's what the output looks like:
9
+ Here's what the output looks like. Note, the namespace is not shown for conciseness.
10
10
 
11
11
  $ kubes apply
12
12
  Compiled .kubes/resources files
@@ -15,6 +15,8 @@ You will be prompted to confirm before deletion. Here's out the output looks lik
15
15
  service "demo-web" deleted
16
16
  => kubectl delete -f .kubes/output/web/deployment.yaml
17
17
  deployment.apps "demo-web" deleted
18
+ => kubectl delete -f .kubes/output/shared/namespace.yaml
19
+ namespace "demo" deleted
18
20
  $
19
21
 
20
22
  Let's double-check that the resources have been deleted:
@@ -14,6 +14,8 @@ You'll see output like this:
14
14
  Pushed 111111111111.dkr.ecr.us-west-2.amazonaws.com/demo:kubes-2020-06-19T04-19-13 docker image.
15
15
  Docker push took 15s.
16
16
  Compiled .kubes/resources files
17
+ => kubectl apply -f .kubes/output/shared/namespace.yaml
18
+ namespace/demo created
17
19
  => kubectl apply -f .kubes/output/web/service.yaml
18
20
  service/demo-web created
19
21
  => kubectl apply -f .kubes/output/web/deployment.yaml
@@ -34,6 +36,9 @@ Example output:
34
36
 
35
37
  $ kubes get
36
38
  => kubectl get --recursive -f .kubes/output
39
+ NAME STATUS AGE
40
+ namespace/demo Active 7s
41
+
37
42
  NAME READY UP-TO-DATE AVAILABLE AGE
38
43
  deployment.apps/demo-web 1/1 1 1 7s
39
44
 
@@ -19,6 +19,7 @@ Let's generate a starter project:
19
19
  create .kubes/config/env/prod.rb
20
20
  create .kubes/resources/base/all.yaml
21
21
  create .kubes/resources/base/deployment.yaml
22
+ create .kubes/resources/shared/namespace.yaml
22
23
  create .kubes/resources/web/deployment.yaml
23
24
  create .kubes/resources/web/deployment/dev.yaml
24
25
  create .kubes/resources/web/deployment/prod.yaml
@@ -4,7 +4,22 @@ title: Review Project
4
4
 
5
5
  Let's review the resources.
6
6
 
7
- ## Deployment Resource
7
+ ## Namespace
8
+
9
+ We'll create a namespace for the app resources:
10
+
11
+ .kubes/resources/shared/namespace.yaml
12
+
13
+ ```yaml
14
+ apiVersion: v1
15
+ kind: Namespace
16
+ metadata:
17
+ name: demo
18
+ labels:
19
+ app: demo
20
+ ```
21
+
22
+ ## Deployment
8
23
 
9
24
  The `web/deployment.yaml` file is a little more interesting:
10
25
 
@@ -14,7 +29,7 @@ The `web/deployment.yaml` file is a little more interesting:
14
29
  apiVersion: apps/v1
15
30
  kind: Deployment
16
31
  metadata:
17
- name: demo-web
32
+ name: web
18
33
  labels:
19
34
  role: web
20
35
  spec:
@@ -33,13 +48,13 @@ spec:
33
48
  role: web
34
49
  spec:
35
50
  containers:
36
- - name: demo
51
+ - name: web
37
52
  image: <%= built_image %>
38
53
  ```
39
54
 
40
55
  Notice the `<%= built_image %>`. Kubes processes the YAML files with ERB templating and replaces these tags. The `built_image` is a kubes helper method that refers to the latest Docker image built by Kubes. This spares you updating the image manually.
41
56
 
42
- ## Base Resource
57
+ ## Base Folder
43
58
 
44
59
  Also let's check the files in the base folder.
45
60
 
@@ -47,7 +62,7 @@ Also let's check the files in the base folder.
47
62
 
48
63
  ```yaml
49
64
  metadata:
50
- namespace: default
65
+ namespace: demo
51
66
  ```
52
67
 
53
68
  .kubes/resources/base/deployment.yaml
@@ -68,6 +83,8 @@ spec:
68
83
 
69
84
  The base folder files are processed first as a part of [Kubes Layering]({% link _docs/layering.md %}). This allows you to define common fields and keep your code DRY.
70
85
 
86
+ The `all.yaml` means all resources will use the demo namespace. The `deployment.yaml` adds common labels to all deployment resource kinds.
87
+
71
88
  ## Service Resource
72
89
 
73
90
  Next, let's look at `service.yaml`
@@ -78,20 +95,19 @@ Next, let's look at `service.yaml`
78
95
  apiVersion: v1
79
96
  kind: Service
80
97
  metadata:
81
- name: demo-web
98
+ name: web
82
99
  labels:
83
- app: demo
84
- namespace: default
100
+ role: web
85
101
  spec:
86
102
  ports:
87
103
  - port: 80
88
104
  protocol: TCP
89
- targetPort: 8080
105
+ targetPort: <%= dockerfile_port %>
90
106
  selector:
91
- app: demo
107
+ role: web
92
108
  type: ClusterIP
93
109
  ```
94
110
 
95
- There's no use of ERB templating here.
111
+ The `dockerfile_port` helper returns the EXPOSE port in the Dockerfile. This spares you updating this manually, you only have to update the Dockerfile.
96
112
 
97
113
  Next, we'll deploy the app.
@@ -6,7 +6,7 @@ Let's update the app. In this case, we don't need to update the Docker image, so
6
6
 
7
7
  kubes apply
8
8
 
9
- Here's what the output looks like:
9
+ Here's what the output looks like. Note, the namespace is not shown for conciseness.
10
10
 
11
11
  $ kubes apply
12
12
  Compiled .kubes/resources files
@@ -15,7 +15,7 @@ This is where the `--repo` from `kubes init` got saved. The other options are c
15
15
 
16
16
  ## Dockerfie
17
17
 
18
- The `Dockerfile` is a simple starter example that just runs nginx.
18
+ The `Dockerfile` is a simple starter example that just runs nginx
19
19
 
20
20
  Dockerfile:
21
21
 
@@ -23,3 +23,5 @@ Dockerfile:
23
23
  FROM nginx
24
24
  EXPOSE 80
25
25
  CMD ["nginx", "-g", "daemon off;"]
26
+
27
+ Note: If your project already has a Dockerfile, kubes will use that instead of generating a starter one.
@@ -49,7 +49,7 @@ class Kubes::CLI
49
49
  ignores = %w[
50
50
  .kubes/output
51
51
  .kubes/state
52
- ]
52
+ ].map {|l| "#{l}\n"} # the readlines will have lines with \n so keep consistent for processing
53
53
  if File.exist?(".gitignore")
54
54
  lines = IO.readlines(".gitignore")
55
55
  if lines.detect { |l| l.include?('.kubes/output') }
@@ -61,7 +61,7 @@ class Kubes::CLI
61
61
  lines = ignores
62
62
  end
63
63
 
64
- text = lines.join("\n") + "\n"
64
+ text = lines.join('')
65
65
  IO.write(".gitignore", text)
66
66
  puts "Updated .gitignore"
67
67
  end
@@ -1,4 +1,19 @@
1
1
  module Kubes::Compiler::Dsl::Core
2
2
  module Helpers
3
+ def dockerfile_port
4
+ path = "#{Kubes.root}/Dockerfile"
5
+ File.exist?(path) ? parse_for_dockerfile_port(path) : 80
6
+ end
7
+
8
+ private
9
+ def parse_for_dockerfile_port(path)
10
+ lines = IO.read(path).split("\n")
11
+ expose_line = lines.find { |l| l =~ /^EXPOSE / }
12
+ if expose_line
13
+ md = expose_line.match(/EXPOSE (\d+)/)
14
+ port = md[1] if md
15
+ end
16
+ port ? port.to_i : 80
17
+ end
3
18
  end
4
19
  end
@@ -1,3 +1,3 @@
1
1
  module Kubes
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -1,2 +1,2 @@
1
- namespace "default"
1
+ namespace "<%= app %>"
2
2
  labels(app: "<%= app %>")
@@ -0,0 +1,2 @@
1
+ name "<%= app %>"
2
+ labels(app: "<%= app %>")
@@ -1,7 +1,9 @@
1
- name "<%= app %>-web"
1
+ name "web"
2
2
  labels(role: "web")
3
3
 
4
4
  replicas 1
5
5
  image built_image # IE: user/<%= app %>:kubes-2020-06-13T19-55-16-43afc6e
6
6
 
7
+ # revisionHistoryLimit 1 # uncomment to reduce old ReplicaSets, default is 10 https://bit.ly/3hqrzyP
8
+
7
9
  # More docs: kubes.guru/docs/dsl/deployment/
@@ -1,8 +1,8 @@
1
- name "<%= app %>-web"
1
+ name "web"
2
2
  labels(role: "web")
3
3
 
4
4
  # Optional since default port is 80
5
5
  # port 80
6
- # targetPort 80
6
+ targetPort dockerfile_port # expose port in Dockerfile
7
7
 
8
8
  # More docs: kubes.guru/docs/dsl/service/
@@ -1,2 +1,2 @@
1
1
  metadata:
2
- namespace: default
2
+ namespace: <%= app %>
@@ -0,0 +1,6 @@
1
+ apiVersion: v1
2
+ kind: Namespace
3
+ metadata:
4
+ name: <%= app %>
5
+ labels:
6
+ app: <%= app %>
@@ -1,7 +1,7 @@
1
1
  apiVersion: apps/v1
2
2
  kind: Deployment
3
3
  metadata:
4
- name: <%= app %>-web
4
+ name: web
5
5
  labels:
6
6
  role: web
7
7
  spec:
@@ -20,5 +20,5 @@ spec:
20
20
  role: web
21
21
  spec:
22
22
  containers:
23
- - name: <%= app %>-web
23
+ - name: web
24
24
  image: <%%= built_image %>
@@ -1,14 +1,14 @@
1
1
  apiVersion: v1
2
2
  kind: Service
3
3
  metadata:
4
- name: <%= app %>-web
4
+ name: web
5
5
  labels:
6
6
  role: web
7
7
  spec:
8
8
  ports:
9
9
  - port: 80
10
10
  protocol: TCP
11
- targetPort: 80
11
+ targetPort: <%%= dockerfile_port %>
12
12
  selector:
13
13
  role: web
14
14
  type: ClusterIP
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-17 00:00:00.000000000 Z
11
+ date: 2020-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -536,12 +536,14 @@ files:
536
536
  - lib/templates/base/.kubes/config/env/prod.rb
537
537
  - lib/templates/docker/Dockerfile
538
538
  - lib/templates/dsl/.kubes/resources/base/all.rb.tt
539
- - lib/templates/dsl/.kubes/resources/web/deployment.rb.tt
539
+ - lib/templates/dsl/.kubes/resources/shared/namespace.rb.tt
540
+ - lib/templates/dsl/.kubes/resources/web/deployment.rb
540
541
  - lib/templates/dsl/.kubes/resources/web/deployment/dev.rb
541
542
  - lib/templates/dsl/.kubes/resources/web/deployment/prod.rb
542
- - lib/templates/dsl/.kubes/resources/web/service.rb.tt
543
+ - lib/templates/dsl/.kubes/resources/web/service.rb
543
544
  - lib/templates/yaml/.kubes/resources/base/all.yaml.tt
544
545
  - lib/templates/yaml/.kubes/resources/base/deployment.yaml.tt
546
+ - lib/templates/yaml/.kubes/resources/shared/namespace.yaml.tt
545
547
  - lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt
546
548
  - lib/templates/yaml/.kubes/resources/web/deployment/dev.yaml
547
549
  - lib/templates/yaml/.kubes/resources/web/deployment/prod.yaml