kubes 0.4.7 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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