kubes 0.4.7 → 0.5.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/docs/_docs/config/reference.md +1 -0
  4. data/docs/_docs/config/skip.md +1 -1
  5. data/docs/_docs/dsl/multiple-resources.md +3 -3
  6. data/docs/_docs/dsl/resources/job.md +62 -0
  7. data/docs/_docs/extra-env/dsl.md +2 -2
  8. data/docs/_docs/extra-env/yaml.md +1 -1
  9. data/docs/_docs/generators.md +41 -0
  10. data/docs/_docs/helpers.md +2 -2
  11. data/docs/_docs/helpers/google/service-account.md +8 -0
  12. data/docs/_docs/intro.md +3 -1
  13. data/docs/_docs/intro/docker-image.md +66 -0
  14. data/docs/_docs/layering/merge.md +1 -1
  15. data/docs/_docs/learn/dsl/delete.md +10 -2
  16. data/docs/_docs/learn/dsl/review-project.md +2 -2
  17. data/docs/_docs/learn/yaml/delete.md +10 -2
  18. data/docs/_docs/learn/yaml/review-project.md +2 -2
  19. data/docs/_docs/patterns/clock-web-worker.md +3 -3
  20. data/docs/_docs/patterns/migrations.md +1 -1
  21. data/docs/_docs/yaml.md +2 -2
  22. data/docs/_includes/commands.html +2 -2
  23. data/docs/_includes/sidebar.html +2 -0
  24. data/docs/_reference/kubes-delete.md +1 -1
  25. data/docs/_reference/kubes-exec.md +17 -1
  26. data/docs/_reference/kubes-init.md +2 -2
  27. data/docs/_reference/kubes-logs.md +2 -1
  28. data/docs/_reference/kubes-new.md +58 -0
  29. data/docs/_reference/kubes-prune.md +22 -0
  30. data/docs/reference.md +2 -0
  31. data/lib/kubes.rb +1 -0
  32. data/lib/kubes/cli.rb +9 -1
  33. data/lib/kubes/cli/build.rb +6 -0
  34. data/lib/kubes/cli/compile.rb +7 -0
  35. data/lib/kubes/cli/deploy.rb +1 -6
  36. data/lib/kubes/cli/exec.rb +5 -1
  37. data/lib/kubes/cli/help/exec.md +15 -0
  38. data/lib/kubes/cli/help/new.md +30 -0
  39. data/lib/kubes/cli/init.rb +1 -1
  40. data/lib/kubes/cli/new.rb +97 -0
  41. data/lib/kubes/cli/sequence.rb +1 -0
  42. data/lib/kubes/command.rb +7 -0
  43. data/lib/kubes/compiler.rb +19 -21
  44. data/lib/kubes/compiler/dsl/syntax/job.rb +217 -0
  45. data/lib/kubes/compiler/shared/helpers.rb +11 -2
  46. data/lib/kubes/compiler/shared/helpers/deprecated.rb +37 -0
  47. data/lib/kubes/config.rb +1 -1
  48. data/lib/kubes/core.rb +6 -0
  49. data/lib/kubes/docker/strategy/image_name.rb +1 -1
  50. data/lib/kubes/kubectl/batch.rb +0 -33
  51. data/lib/kubes/kubectl/ordering.rb +42 -0
  52. data/lib/kubes/version.rb +1 -1
  53. data/lib/templates/base/.kubes/config.rb.tt +1 -1
  54. data/lib/templates/base/.kubes/config/env/dev.rb +1 -1
  55. data/lib/templates/base/.kubes/config/env/prod.rb +1 -1
  56. data/lib/templates/dsl/.kubes/resources/web/deployment.rb +1 -1
  57. data/lib/templates/new/dsl/backend_config.rb +10 -0
  58. data/lib/templates/new/dsl/config_map.rb +5 -0
  59. data/lib/templates/new/dsl/daemon_set.rb +11 -0
  60. data/lib/templates/new/dsl/deployment.rb +4 -0
  61. data/lib/templates/new/dsl/ingress.rb +3 -0
  62. data/lib/templates/new/dsl/job.rb +2 -0
  63. data/lib/templates/new/dsl/managed_certificate.rb +2 -0
  64. data/lib/templates/new/dsl/namespace.rb +2 -0
  65. data/lib/templates/new/dsl/network_policy.rb +7 -0
  66. data/lib/templates/new/dsl/pod.rb +6 -0
  67. data/lib/templates/new/dsl/role.rb +4 -0
  68. data/lib/templates/new/dsl/role_binding.rb +7 -0
  69. data/lib/templates/new/dsl/secret.rb +5 -0
  70. data/lib/templates/new/dsl/service.rb +2 -0
  71. data/lib/templates/new/dsl/service_account.rb +1 -0
  72. data/lib/templates/new/yaml/backend_config.yaml +10 -0
  73. data/lib/templates/new/yaml/config_map.yaml +9 -0
  74. data/lib/templates/new/yaml/daemon_set.yaml +11 -0
  75. data/lib/templates/new/yaml/deployment.yaml +20 -0
  76. data/lib/templates/new/yaml/ingress.yaml +12 -0
  77. data/lib/templates/new/yaml/job.yaml +19 -0
  78. data/lib/templates/new/yaml/managed_certificate.yaml +7 -0
  79. data/lib/templates/new/yaml/namespace.yaml +6 -0
  80. data/lib/templates/new/yaml/network_policy.yaml +20 -0
  81. data/lib/templates/new/yaml/pod.yaml +11 -0
  82. data/lib/templates/new/yaml/role.yaml +13 -0
  83. data/lib/templates/new/yaml/role_binding.yaml +11 -0
  84. data/lib/templates/new/yaml/secret.yaml +9 -0
  85. data/lib/templates/new/yaml/service.yaml +14 -0
  86. data/lib/templates/new/yaml/service_account.yaml +4 -0
  87. data/lib/templates/yaml/.kubes/resources/base/all.yaml.tt +2 -0
  88. data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +1 -1
  89. data/spec/kubes/cli/prune_spec.rb +1 -0
  90. data/spec/kubes/compiler_spec.rb +5 -1
  91. metadata +41 -2
@@ -108,7 +108,7 @@ spec:
108
108
  spec:
109
109
  containers:
110
110
  - name: demo-web
111
- image: <%= built_image %>
111
+ image: <%= docker_image %>
112
112
  {% endhighlight %}
113
113
  </div>
114
114
  </div>
@@ -121,7 +121,7 @@ namespace "default"
121
121
  labels(role: "web")
122
122
 
123
123
  replicas 2
124
- image built_image # IE: user/demo-web:kubes-2020-06-13T19-55-16-43afc6e
124
+ image docker_image # IE: user/demo-web:kubes-2020-06-13T19-55-16-43afc6e
125
125
  {% endhighlight %}
126
126
  </div>
127
127
  </div>
@@ -42,6 +42,7 @@
42
42
  </ul>
43
43
  </li>
44
44
  <li><a href="{% link _docs/intro/install.md %}">Install</a></li>
45
+ <li><a href="{% link _docs/intro/docker-image.md %}">Docker Image</a></li>
45
46
  </ul>
46
47
  </li>
47
48
  <li><a href="{% link _docs/resources.md %}">Resources</a>
@@ -76,6 +77,7 @@
76
77
  <li><a href="{% link _docs/config/reference.md %}">Reference</a></li>
77
78
  </ul>
78
79
  </li>
80
+ <li><a href="{% link _docs/generators.md %}">Generators</a></li>
79
81
  <li><a href="{% link _docs/yaml.md %}">YAML</a></li>
80
82
  <li><a href="{% link _docs/layering.md %}">Layering</a>
81
83
  <ul>
@@ -9,7 +9,7 @@ reference: true
9
9
 
10
10
  ## Description
11
11
 
12
- Delete Kubernetes resources within the app folder
12
+ Delete Kubernetes resources in defined .kubes/resources
13
13
 
14
14
 
15
15
  ## Options
@@ -36,13 +36,29 @@ If you have have multiple containers in your pod. You can specify the specfic co
36
36
 
37
37
  kubes exec --name web
38
38
 
39
+ ## Default Exec Command
40
+
41
+ The default exec command is `sh`. Example:
42
+
43
+ $ kubes exec
44
+ => kubectl exec -n demo-dev -ti web-568645f665-62j8f -- sh
45
+ /app #
46
+
47
+ You can override the default with `KUBES_DEFAULT_EXEC`. Example:
48
+
49
+ $ export KUBES_DEFAULT_EXEC=bash
50
+ $ kubes exec
51
+ => kubectl exec -n demo-dev -ti web-568645f665-62j8f -- bash
52
+ /app #
53
+
39
54
 
40
55
  ## Options
41
56
 
42
57
  ```
43
58
  [--compile], [--no-compile] # whether or not to compile the .kube/resources
44
59
  # Default: true
45
- n, [--name=NAME] # deployment name to use. IE: demo-web
60
+ p, [--pod=POD] # pod to use. IE: web
61
+ d, [--deployment=DEPLOYMENT] # deployment name to use. IE: demo-web
46
62
  c, [--container=CONTAINER] # Container name. If omitted, the first container in the pod will be chosen
47
63
  [--verbose], [--no-verbose]
48
64
  [--noop], [--no-noop]
@@ -16,11 +16,11 @@ Init project
16
16
 
17
17
  ```
18
18
  a, --app=APP # Docker repo name. Example: web. Generates .kubes/APP/resources folder
19
- [--force] # Bypass overwrite are you sure prompt for existing files
19
+ y, [--force] # Bypass overwrite are you sure prompt for existing files
20
20
  t, [--type=TYPE] # Type: dsl or yaml
21
21
  # Default: yaml
22
22
  --repo=REPO # Docker repo name. Example: user/repo. Configures .kubes/config.rb
23
- n, [--namespace=NAMESPACE] # Namespace to use, defaults to the app option
23
+ n, [--namespace=NAMESPACE] # Namespace to use, defaults to APP-ENV. IE: demo-dev
24
24
  [--verbose], [--no-verbose]
25
25
  [--noop], [--no-noop]
26
26
  ```
@@ -17,7 +17,8 @@ logs from all deployment pods
17
17
  ```
18
18
  [--compile], [--no-compile] # whether or not to compile the .kube/resources
19
19
  # Default: true
20
- n, [--name=NAME] # deployment name to use. IE: demo-web
20
+ p, [--pod=POD] # pod to use. IE: web
21
+ d, [--deployment=DEPLOYMENT] # deployment name to use. IE: demo-web
21
22
  c, [--container=CONTAINER] # Container name. If omitted, the first container in the pod will be chosen
22
23
  f, [--follow], [--no-follow] # Follow logs
23
24
  # Default: true
@@ -0,0 +1,58 @@
1
+ ---
2
+ title: kubes new
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes new
9
+
10
+ ## Description
11
+
12
+ Generates new resource.
13
+
14
+ ## Examples
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
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
+ [--verbose], [--no-verbose]
56
+ [--noop], [--no-noop]
57
+ ```
58
+
@@ -0,0 +1,22 @@
1
+ ---
2
+ title: kubes prune
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes prune
9
+
10
+ ## Description
11
+
12
+ Prune old resources like secret and config maps
13
+
14
+
15
+ ## Options
16
+
17
+ ```
18
+ y, [--yes], [--no-yes] # Skip are you sure prompt
19
+ [--verbose], [--no-verbose]
20
+ [--noop], [--no-noop]
21
+ ```
22
+
@@ -16,4 +16,6 @@ title: CLI Reference
16
16
  * [kubes get]({% link _reference/kubes-get.md %})
17
17
  * [kubes init]({% link _reference/kubes-init.md %})
18
18
  * [kubes logs]({% link _reference/kubes-logs.md %})
19
+ * [kubes new]({% link _reference/kubes-new.md %})
20
+ * [kubes prune]({% link _reference/kubes-prune.md %})
19
21
  * [kubes version]({% link _reference/kubes-version.md %})
@@ -25,5 +25,6 @@ Kubes::Autoloader.setup
25
25
 
26
26
  module Kubes
27
27
  class Error < StandardError; end
28
+ class MissingDockerImage < Error; end
28
29
  extend Core
29
30
  end
@@ -26,6 +26,14 @@ module Kubes
26
26
  long_desc Help.text(:docker)
27
27
  subcommand "docker", Docker
28
28
 
29
+ desc "docker SUBCOMMAND", "Docker subcommands"
30
+ long_desc Help.text(:docker)
31
+ subcommand "docker", Docker
32
+
33
+ long_desc Help.text("new")
34
+ New.options.each { |args| option(*args) }
35
+ register(New, "new", "new", "Generates new resource.")
36
+
29
37
  desc "apply [ROLE] [RESOURCE]", "Apply the Kubernetes YAML files without building docker image"
30
38
  long_desc Help.text(:apply)
31
39
  image_option.call
@@ -48,7 +56,7 @@ module Kubes
48
56
  Compile.new(options).run
49
57
  end
50
58
 
51
- desc "delete [ROLE] [RESOURCE]", "Delete Kubernetes resources within the app folder"
59
+ desc "delete [ROLE] [RESOURCE]", "Delete Kubernetes resources in defined .kubes/resources"
52
60
  long_desc Help.text(:delete)
53
61
  image_option.call
54
62
  yes_option.call
@@ -1,8 +1,14 @@
1
1
  class Kubes::CLI
2
2
  class Build < Base
3
3
  def run
4
+ return unless build?
4
5
  Kubes::Docker.new(@options, "build").run
5
6
  Kubes::Docker.new(@options, "push").run
6
7
  end
8
+
9
+ def build?
10
+ return false if @options[:build] == false || @options[:image] || Kubes.config.image
11
+ @options[:resource].nil? || @options[:resource] == "deployment"
12
+ end
7
13
  end
8
14
  end
@@ -8,9 +8,16 @@ class Kubes::CLI
8
8
  @@compiled = false
9
9
  def run
10
10
  return if @@compiled
11
+ build_docker_image
11
12
  Clean.new(@options.merge(mute: true)).run
12
13
  Kubes::Compiler.new(@options).run
13
14
  @@compiled = true
14
15
  end
16
+
17
+ # auto build docker image and push image if kubes docker build not yet called
18
+ def build_docker_image
19
+ return if File.exist?("#{Kubes.root}/.kubes/state/docker_image.txt")
20
+ Build.new(@options).run
21
+ end
15
22
  end
16
23
  end
@@ -1,13 +1,8 @@
1
1
  class Kubes::CLI
2
2
  class Deploy < Base
3
3
  def run
4
- Build.new(@options).run if build?
4
+ Build.new(@options).run
5
5
  Apply.new(@options).run # also calls Compile
6
6
  end
7
-
8
- def build?
9
- return false if @options[:build] == false || @options[:image]
10
- @options[:resource].nil? || @options[:resource] == "deployment"
11
- end
12
7
  end
13
8
  end
@@ -20,10 +20,14 @@ class Kubes::CLI
20
20
  end
21
21
 
22
22
  container = " -c #{@options[:container]}" unless @options[:container].nil?
23
- cmd = @options[:cmd].empty? ? "bash" : @options[:cmd].join(' ')
23
+ cmd = @options[:cmd].empty? ? default_exec : @options[:cmd].join(' ')
24
24
  sh("kubectl exec #{ns} -ti #{pod}#{container} -- #{cmd}")
25
25
  end
26
26
 
27
+ def default_exec
28
+ ENV['KUBES_DEFAULT_EXEC'] || "sh"
29
+ end
30
+
27
31
  def find_pod
28
32
  pod_name || deployment_pod
29
33
  end
@@ -22,3 +22,18 @@ If you have have multiple deployments in your `.kubes/resources` then the comman
22
22
  If you have have multiple containers in your pod. You can specify the specfic container with the `--container` or `-c` option. Examples:
23
23
 
24
24
  kubes exec --name web
25
+
26
+ ## Default Exec Command
27
+
28
+ The default exec command is `sh`. Example:
29
+
30
+ $ kubes exec
31
+ => kubectl exec -n demo-dev -ti web-568645f665-62j8f -- sh
32
+ /app #
33
+
34
+ You can override the default with `KUBES_DEFAULT_EXEC`. Example:
35
+
36
+ $ export KUBES_DEFAULT_EXEC=bash
37
+ $ kubes exec
38
+ => kubectl exec -n demo-dev -ti web-568645f665-62j8f -- bash
39
+ /app #
@@ -0,0 +1,30 @@
1
+ ## Examples
2
+
3
+ $ kubes new ingress
4
+ create .kubes/resources/web/ingress.yaml
5
+ $ kubes new service_account
6
+ create .kubes/resources/shared/service_account.yaml
7
+ $
8
+
9
+ ## Supported Resources
10
+
11
+ Here's a list of some of the supported resources.
12
+
13
+ backend_config
14
+ config_map
15
+ daemon_set
16
+ deployment
17
+ ingress
18
+ job
19
+ managed_certificate
20
+ namespace
21
+ network_policy
22
+ pod
23
+ role_binding
24
+ role
25
+ secret
26
+ service_account
27
+ service
28
+
29
+ Refer to the source code to all the resources that the generator supports:
30
+ https://github.com/boltops-tools/kubes/blob/master/lib/templates/new/yaml
@@ -3,7 +3,7 @@ class Kubes::CLI
3
3
  def self.options
4
4
  [
5
5
  [:app, aliases: ["a"], required: true, desc: "Docker repo name. Example: web. Generates .kubes/APP/resources folder"],
6
- [:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files"],
6
+ [:force, aliases: ["y"], type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files"],
7
7
  [:type, aliases: ["t"], default: "yaml", desc: "Type: dsl or yaml"],
8
8
  [:repo, required: true, desc: "Docker repo name. Example: user/repo. Configures .kubes/config.rb"],
9
9
  [:namespace, aliases: ["n"], desc: "Namespace to use, defaults to APP-ENV. IE: demo-dev"],
@@ -0,0 +1,97 @@
1
+ class Kubes::CLI
2
+ class New < Sequence
3
+ argument :kind
4
+
5
+ def self.options
6
+ [
7
+ [:app, aliases: ["a"], default: "demo", desc: "App name"],
8
+ [:force, aliases: ["y"], type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files"],
9
+ [:role, aliases: ["r"], desc: "Role. IE: web, clock, worker, migrate, etc. Defaults to convention: web or shared when not set"],
10
+ [:type, aliases: ["t"], default: "yaml", desc: "Type: dsl or yaml"],
11
+ ]
12
+ end
13
+ options.each { |args| class_option(*args) }
14
+
15
+ private
16
+ def app
17
+ options[:app]
18
+ end
19
+
20
+ def role
21
+ role = options[:role]
22
+ return role if role
23
+ shared = %w[
24
+ config_map
25
+ namespace
26
+ network_policy
27
+ persistent_volume
28
+ persistent_volume_claim
29
+ secret
30
+ service_account
31
+ ]
32
+ if shared.include?(full_kind)
33
+ "shared"
34
+ elsif full_kind == "job"
35
+ "migrate"
36
+ else
37
+ "web"
38
+ end
39
+ end
40
+
41
+ def full_kind
42
+ # shorthands
43
+ map = {
44
+ cj: "cron_job",
45
+ cm: "config_map",
46
+ crd: "custom_resource_definition",
47
+ crds: "custom_resource_definition",
48
+ cs: "component_statuses",
49
+ csr: "certificate_signing_request",
50
+ deploy: "deployment",
51
+ ds: "daemonset",
52
+ ep: "endpoints",
53
+ ev: "event",
54
+ hpa: "horizontal_pod_autoscaler",
55
+ ing: "ingress",
56
+ limits: "limit_range",
57
+ netpol: "network_policy",
58
+ no: "node",
59
+ ns: "namespace",
60
+ pc: "priority_class",
61
+ pdb: "pod_disruption_budget",
62
+ po: "pod",
63
+ psp: "pods_ecurity_policy",
64
+ pv: "persistent_volume",
65
+ pvc: "persistent_volume_claim",
66
+ quota: "resource_quota",
67
+ rc: "replication_controller",
68
+ rs: "replica_set",
69
+ sa: "service_account",
70
+ sc: "storage_classes",
71
+ sgp: "security_group_policy",
72
+ sts: "stateful_set",
73
+ svc: "service",
74
+ }.stringify_keys!
75
+ map[kind] || kind
76
+ end
77
+
78
+ def file
79
+ ext = options[:type] == "yaml" ? "yaml" : "rb"
80
+ "#{full_kind}.#{ext}"
81
+ end
82
+
83
+ public
84
+ def set_template_source
85
+ path = File.expand_path("../../templates/new/#{options[:type]}/#{file}", __dir__)
86
+ unless File.exist?(path)
87
+ logger.info "ERROR: Generator for #{file} not supported".color(:red)
88
+ exit 1
89
+ end
90
+ set_source("new/#{options[:type]}")
91
+ end
92
+
93
+ def create_resource
94
+ template file, ".kubes/resources/#{role}/#{file}"
95
+ end
96
+ end
97
+ end