kubes 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +15 -7
- data/.rspec +3 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +3 -1
- data/Guardfile +19 -0
- data/LICENSE.txt +201 -0
- data/README.md +46 -18
- data/Rakefile +13 -1
- data/docs/.gitignore +5 -0
- data/docs/CNAME +1 -0
- data/docs/Gemfile +16 -0
- data/docs/LICENSE +201 -0
- data/docs/Procfile +2 -0
- data/docs/README.md +24 -0
- data/docs/Rakefile +38 -0
- data/docs/_config.yml +71 -0
- data/docs/_docs/auto-context.md +47 -0
- data/docs/_docs/config.md +9 -0
- data/docs/_docs/config/docker.md +70 -0
- data/docs/_docs/config/env.md +58 -0
- data/docs/_docs/config/kubectl.md +61 -0
- data/docs/_docs/contributing.md +98 -0
- data/docs/_docs/dsl.md +66 -0
- data/docs/_docs/dsl/multiple-resources.md +114 -0
- data/docs/_docs/dsl/resources.md +12 -0
- data/docs/_docs/dsl/resources/backend_config.md +45 -0
- data/docs/_docs/dsl/resources/config_map.md +84 -0
- data/docs/_docs/dsl/resources/daemon_set.md +58 -0
- data/docs/_docs/dsl/resources/deployment.md +142 -0
- data/docs/_docs/dsl/resources/generic.md +58 -0
- data/docs/_docs/dsl/resources/ingress.md +103 -0
- data/docs/_docs/dsl/resources/managed_certificate.md +39 -0
- data/docs/_docs/dsl/resources/namespace.md +34 -0
- data/docs/_docs/dsl/resources/network_policy.md +45 -0
- data/docs/_docs/dsl/resources/pod.md +82 -0
- data/docs/_docs/dsl/resources/role.md +44 -0
- data/docs/_docs/dsl/resources/role_binding.md +55 -0
- data/docs/_docs/dsl/resources/secret.md +87 -0
- data/docs/_docs/dsl/resources/service.md +60 -0
- data/docs/_docs/dsl/resources/service_account.md +37 -0
- data/docs/_docs/extra-env.md +23 -0
- data/docs/_docs/extra-env/dsl.md +86 -0
- data/docs/_docs/extra-env/yaml.md +67 -0
- data/docs/_docs/helpers.md +18 -0
- data/docs/_docs/intro.md +15 -0
- data/docs/_docs/intro/concepts.md +37 -0
- data/docs/_docs/intro/how-kubes-works.md +29 -0
- data/docs/_docs/intro/install.md +6 -0
- data/docs/_docs/intro/ordering.md +63 -0
- data/docs/_docs/intro/ordering/custom.md +25 -0
- data/docs/_docs/intro/structure.md +43 -0
- data/docs/_docs/kustomize.md +54 -0
- data/docs/_docs/layering.md +8 -0
- data/docs/_docs/layering/dsl.md +5 -0
- data/docs/_docs/layering/merge.md +96 -0
- data/docs/_docs/layering/yaml.md +5 -0
- data/docs/_docs/learn/dsl.md +5 -0
- data/docs/_docs/learn/dsl/change.md +16 -0
- data/docs/_docs/learn/dsl/cluster.md +5 -0
- data/docs/_docs/learn/dsl/delete.md +30 -0
- data/docs/_docs/learn/dsl/deploy.md +61 -0
- data/docs/_docs/learn/dsl/install.md +5 -0
- data/docs/_docs/learn/dsl/new-project.md +33 -0
- data/docs/_docs/learn/dsl/next-steps.md +5 -0
- data/docs/_docs/learn/dsl/review-project.md +52 -0
- data/docs/_docs/learn/dsl/update.md +53 -0
- data/docs/_docs/learn/yaml.md +5 -0
- data/docs/_docs/learn/yaml/change.md +17 -0
- data/docs/_docs/learn/yaml/cluster.md +5 -0
- data/docs/_docs/learn/yaml/delete.md +30 -0
- data/docs/_docs/learn/yaml/deploy.md +62 -0
- data/docs/_docs/learn/yaml/install.md +5 -0
- data/docs/_docs/learn/yaml/new-project.md +36 -0
- data/docs/_docs/learn/yaml/next-steps.md +5 -0
- data/docs/_docs/learn/yaml/review-project.md +97 -0
- data/docs/_docs/learn/yaml/update.md +54 -0
- data/docs/_docs/next-steps.md +13 -0
- data/docs/_docs/patterns.md +7 -0
- data/docs/_docs/patterns/clock-web-worker.md +71 -0
- data/docs/_docs/resources.md +11 -0
- data/docs/_docs/resources/base.md +33 -0
- data/docs/_docs/resources/role.md +41 -0
- data/docs/_docs/resources/shared.md +36 -0
- data/docs/_docs/yaml.md +46 -0
- data/docs/_includes/commands.html +131 -0
- data/docs/_includes/content.html +25 -0
- data/docs/_includes/dsl/methods.md +1 -0
- data/docs/_includes/dsl/rolling_deployment.md +1 -0
- data/docs/_includes/dsl/suffix_hash.md +8 -0
- data/docs/_includes/example.html +12 -0
- data/docs/_includes/footer.html +37 -0
- data/docs/_includes/google_analytics.html +10 -0
- data/docs/_includes/header.html +31 -0
- data/docs/_includes/intro/install.md +15 -0
- data/docs/_includes/js.html +3 -0
- data/docs/_includes/kubes-steps.md +3 -0
- data/docs/_includes/layering/layers.md +64 -0
- data/docs/_includes/learn/cluster.md +22 -0
- data/docs/_includes/learn/next-steps.md +6 -0
- data/docs/_includes/learn/review.md +25 -0
- data/docs/_includes/learn/start.md +3 -0
- data/docs/_includes/reference.md +3 -0
- data/docs/_includes/sidebar.html +113 -0
- data/docs/_layouts/default.html +35 -0
- data/docs/_reference/kubes-apply.md +24 -0
- data/docs/_reference/kubes-clean.md +22 -0
- data/docs/_reference/kubes-compile.md +22 -0
- data/docs/_reference/kubes-completion.md +42 -0
- data/docs/_reference/kubes-completion_script.md +25 -0
- data/docs/_reference/kubes-delete.md +23 -0
- data/docs/_reference/kubes-deploy.md +35 -0
- data/docs/_reference/kubes-docker-build.md +20 -0
- data/docs/_reference/kubes-docker-help.md +15 -0
- data/docs/_reference/kubes-docker-push.md +20 -0
- data/docs/_reference/kubes-docker.md +25 -0
- data/docs/_reference/kubes-init.md +26 -0
- data/docs/_reference/kubes-version.md +21 -0
- data/docs/_sass/bootstrap-overrides.scss +17 -0
- data/docs/_sass/buttons.scss +62 -0
- data/docs/_sass/caret.scss +39 -0
- data/docs/_sass/content.scss +21 -0
- data/docs/_sass/cta.scss +39 -0
- data/docs/_sass/default.scss +103 -0
- data/docs/_sass/footer.scss +66 -0
- data/docs/_sass/masthead.scss +77 -0
- data/docs/_sass/mixins.scss +79 -0
- data/docs/_sass/sidebar.scss +107 -0
- data/docs/_sass/syntax.scss +89 -0
- data/docs/_sass/table.scss +30 -0
- data/docs/_sass/theme.scss +292 -0
- data/docs/_sass/variables.scss +24 -0
- data/docs/bin/build +4 -0
- data/docs/bin/rerun +2 -0
- data/docs/bin/web +8 -0
- data/docs/css/main.scss +24 -0
- data/docs/docs.md +7 -0
- data/docs/getting-started.md +12 -0
- data/docs/img/logos/boltops-logo-full.png +0 -0
- data/docs/img/logos/boltops-logo.png +0 -0
- data/docs/img/logos/filler-logo.png +0 -0
- data/docs/img/logos/kubes-black.png +0 -0
- data/docs/img/logos/kubes-sign.png +0 -0
- data/docs/index.html +34 -0
- data/docs/js/app.js +39414 -0
- data/docs/opal/app.rb +16 -0
- data/docs/opal/pager.rb +90 -0
- data/docs/opal/sidebar.rb +94 -0
- data/docs/opal/sidebar/expander.rb +51 -0
- data/docs/reference.md +15 -0
- data/docs/support.md +19 -0
- data/docs/vendor/bootstrap/css/bootstrap-grid.css +3719 -0
- data/docs/vendor/bootstrap/css/bootstrap-grid.css.map +1 -0
- data/docs/vendor/bootstrap/css/bootstrap-grid.min.css +7 -0
- data/docs/vendor/bootstrap/css/bootstrap-grid.min.css.map +1 -0
- data/docs/vendor/bootstrap/css/bootstrap-reboot.css +331 -0
- data/docs/vendor/bootstrap/css/bootstrap-reboot.css.map +1 -0
- data/docs/vendor/bootstrap/css/bootstrap-reboot.min.css +8 -0
- data/docs/vendor/bootstrap/css/bootstrap-reboot.min.css.map +1 -0
- data/docs/vendor/bootstrap/css/bootstrap.css +10038 -0
- data/docs/vendor/bootstrap/css/bootstrap.css.map +1 -0
- data/docs/vendor/bootstrap/css/bootstrap.min.css +7 -0
- data/docs/vendor/bootstrap/css/bootstrap.min.css.map +1 -0
- data/docs/vendor/bootstrap/js/bootstrap.bundle.js +7013 -0
- data/docs/vendor/bootstrap/js/bootstrap.bundle.js.map +1 -0
- data/docs/vendor/bootstrap/js/bootstrap.bundle.min.js +7 -0
- data/docs/vendor/bootstrap/js/bootstrap.bundle.min.js.map +1 -0
- data/docs/vendor/bootstrap/js/bootstrap.js +4435 -0
- data/docs/vendor/bootstrap/js/bootstrap.js.map +1 -0
- data/docs/vendor/bootstrap/js/bootstrap.min.js +7 -0
- data/docs/vendor/bootstrap/js/bootstrap.min.js.map +1 -0
- data/docs/vendor/font-awesome/css/font-awesome.css +2337 -0
- data/docs/vendor/font-awesome/css/font-awesome.min.css +4 -0
- data/docs/vendor/font-awesome/fonts/FontAwesome.otf +0 -0
- data/docs/vendor/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- data/docs/vendor/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
- data/docs/vendor/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- data/docs/vendor/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- data/docs/vendor/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- data/docs/vendor/font-awesome/less/animated.less +34 -0
- data/docs/vendor/font-awesome/less/bordered-pulled.less +25 -0
- data/docs/vendor/font-awesome/less/core.less +12 -0
- data/docs/vendor/font-awesome/less/fixed-width.less +6 -0
- data/docs/vendor/font-awesome/less/font-awesome.less +18 -0
- data/docs/vendor/font-awesome/less/icons.less +789 -0
- data/docs/vendor/font-awesome/less/larger.less +13 -0
- data/docs/vendor/font-awesome/less/list.less +19 -0
- data/docs/vendor/font-awesome/less/mixins.less +60 -0
- data/docs/vendor/font-awesome/less/path.less +15 -0
- data/docs/vendor/font-awesome/less/rotated-flipped.less +20 -0
- data/docs/vendor/font-awesome/less/screen-reader.less +5 -0
- data/docs/vendor/font-awesome/less/stacked.less +20 -0
- data/docs/vendor/font-awesome/less/variables.less +799 -0
- data/docs/vendor/font-awesome/scss/_animated.scss +34 -0
- data/docs/vendor/font-awesome/scss/_bordered-pulled.scss +25 -0
- data/docs/vendor/font-awesome/scss/_core.scss +12 -0
- data/docs/vendor/font-awesome/scss/_fixed-width.scss +6 -0
- data/docs/vendor/font-awesome/scss/_icons.scss +789 -0
- data/docs/vendor/font-awesome/scss/_larger.scss +13 -0
- data/docs/vendor/font-awesome/scss/_list.scss +19 -0
- data/docs/vendor/font-awesome/scss/_mixins.scss +60 -0
- data/docs/vendor/font-awesome/scss/_path.scss +15 -0
- data/docs/vendor/font-awesome/scss/_rotated-flipped.scss +20 -0
- data/docs/vendor/font-awesome/scss/_screen-reader.scss +5 -0
- data/docs/vendor/font-awesome/scss/_stacked.scss +20 -0
- data/docs/vendor/font-awesome/scss/_variables.scss +799 -0
- data/docs/vendor/font-awesome/scss/font-awesome.scss +18 -0
- data/docs/vendor/jquery/jquery.js +10598 -0
- data/docs/vendor/jquery/jquery.min.js +2 -0
- data/docs/vendor/jquery/jquery.min.map +1 -0
- data/docs/vendor/jquery/jquery.slim.js +8495 -0
- data/docs/vendor/jquery/jquery.slim.min.js +2 -0
- data/docs/vendor/jquery/jquery.slim.min.map +1 -0
- data/docs/vendor/simple-line-icons/css/simple-line-icons.css +778 -0
- data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.eot +0 -0
- data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.svg +200 -0
- data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.ttf +0 -0
- data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.woff +0 -0
- data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.woff2 +0 -0
- data/docs/vendor/simple-line-icons/less/simple-line-icons.less +982 -0
- data/docs/vendor/simple-line-icons/scss/simple-line-icons.scss +979 -0
- data/exe/kubes +14 -0
- data/kubes.gemspec +29 -19
- data/lib/kubes.rb +21 -1
- data/lib/kubes/args/custom.rb +30 -0
- data/lib/kubes/args/dsl.rb +14 -0
- data/lib/kubes/auth.rb +21 -0
- data/lib/kubes/auth/ecr.rb +55 -0
- data/lib/kubes/autoloader.rb +21 -0
- data/lib/kubes/aws_services.rb +14 -0
- data/lib/kubes/cli.rb +93 -0
- data/lib/kubes/cli/apply.rb +9 -0
- data/lib/kubes/cli/base.rb +9 -0
- data/lib/kubes/cli/build.rb +8 -0
- data/lib/kubes/cli/clean.rb +9 -0
- data/lib/kubes/cli/compile.rb +8 -0
- data/lib/kubes/cli/delete.rb +11 -0
- data/lib/kubes/cli/deploy.rb +13 -0
- data/lib/kubes/cli/describe.rb +8 -0
- data/lib/kubes/cli/docker.rb +20 -0
- data/lib/kubes/cli/get.rb +8 -0
- data/lib/kubes/cli/help.rb +11 -0
- data/lib/kubes/cli/help/completion.md +20 -0
- data/lib/kubes/cli/help/completion_script.md +3 -0
- data/lib/kubes/cli/help/deploy.md +10 -0
- data/lib/kubes/cli/init.rb +69 -0
- data/lib/kubes/cli/sequence.rb +27 -0
- data/lib/kubes/command.rb +100 -0
- data/lib/kubes/compiler.rb +71 -0
- data/lib/kubes/compiler/decorator.rb +17 -0
- data/lib/kubes/compiler/decorator/base.rb +16 -0
- data/lib/kubes/compiler/decorator/compile.rb +12 -0
- data/lib/kubes/compiler/decorator/resources/base.rb +13 -0
- data/lib/kubes/compiler/decorator/resources/container.rb +76 -0
- data/lib/kubes/compiler/decorator/resources/container/mapping.rb +28 -0
- data/lib/kubes/compiler/decorator/resources/deployment.rb +10 -0
- data/lib/kubes/compiler/decorator/resources/pod.rb +10 -0
- data/lib/kubes/compiler/decorator/resources/secret.rb +23 -0
- data/lib/kubes/compiler/decorator/write.rb +14 -0
- data/lib/kubes/compiler/dsl/core/base.rb +27 -0
- data/lib/kubes/compiler/dsl/core/blocks.rb +55 -0
- data/lib/kubes/compiler/dsl/core/fields.rb +78 -0
- data/lib/kubes/compiler/dsl/core/files.rb +28 -0
- data/lib/kubes/compiler/dsl/core/helpers.rb +4 -0
- data/lib/kubes/compiler/dsl/core/parser.rb +43 -0
- data/lib/kubes/compiler/dsl/syntax/backend_config.rb +10 -0
- data/lib/kubes/compiler/dsl/syntax/cluster_role.rb +4 -0
- data/lib/kubes/compiler/dsl/syntax/cluster_role_binding.rb +4 -0
- data/lib/kubes/compiler/dsl/syntax/config_map.rb +20 -0
- data/lib/kubes/compiler/dsl/syntax/daemon_set.rb +23 -0
- data/lib/kubes/compiler/dsl/syntax/deployment.rb +163 -0
- data/lib/kubes/compiler/dsl/syntax/ingress.rb +41 -0
- data/lib/kubes/compiler/dsl/syntax/managed_certificate.rb +18 -0
- data/lib/kubes/compiler/dsl/syntax/namespace.rb +13 -0
- data/lib/kubes/compiler/dsl/syntax/network_policy.rb +30 -0
- data/lib/kubes/compiler/dsl/syntax/pod.rb +81 -0
- data/lib/kubes/compiler/dsl/syntax/resource.rb +70 -0
- data/lib/kubes/compiler/dsl/syntax/role.rb +40 -0
- data/lib/kubes/compiler/dsl/syntax/role_binding.rb +43 -0
- data/lib/kubes/compiler/dsl/syntax/secret.rb +22 -0
- data/lib/kubes/compiler/dsl/syntax/service.rb +68 -0
- data/lib/kubes/compiler/dsl/syntax/service_account.rb +20 -0
- data/lib/kubes/compiler/layering.rb +39 -0
- data/lib/kubes/compiler/shared/helpers.rb +30 -0
- data/lib/kubes/compiler/strategy.rb +27 -0
- data/lib/kubes/compiler/strategy/base.rb +13 -0
- data/lib/kubes/compiler/strategy/dsl.rb +32 -0
- data/lib/kubes/compiler/strategy/erb.rb +42 -0
- data/lib/kubes/compiler/strategy/pass.rb +9 -0
- data/lib/kubes/compiler/strategy/result.rb +26 -0
- data/lib/kubes/compiler/util/normalize.rb +11 -0
- data/lib/kubes/compiler/util/yaml_dump.rb +23 -0
- data/lib/kubes/completer.rb +159 -0
- data/lib/kubes/completer/script.rb +6 -0
- data/lib/kubes/completer/script.sh +10 -0
- data/lib/kubes/config.rb +82 -0
- data/lib/kubes/core.rb +32 -0
- data/lib/kubes/docker/args/default.rb +39 -0
- data/lib/kubes/docker/base.rb +88 -0
- data/lib/kubes/docker/build.rb +33 -0
- data/lib/kubes/docker/push.rb +33 -0
- data/lib/kubes/hooks/builder.rb +41 -0
- data/lib/kubes/hooks/dsl.rb +19 -0
- data/lib/kubes/kubectl.rb +87 -0
- data/lib/kubes/kubectl/args/base.rb +12 -0
- data/lib/kubes/kubectl/args/kustomize.rb +28 -0
- data/lib/kubes/kubectl/args/standard.rb +32 -0
- data/lib/kubes/kubectl/batch.rb +49 -0
- data/lib/kubes/kubectl/decider.rb +15 -0
- data/lib/kubes/kubectl/kustomize.rb +13 -0
- data/lib/kubes/kubectl/ordering.rb +27 -0
- data/lib/kubes/logger.rb +26 -0
- data/lib/kubes/logging.rb +7 -0
- data/lib/kubes/util/consider.rb +9 -0
- data/lib/kubes/util/sh.rb +43 -0
- data/lib/kubes/util/sure.rb +17 -0
- data/lib/kubes/util/time.rb +14 -0
- data/lib/kubes/version.rb +1 -1
- data/lib/templates/base/.kubes/config.rb.tt +9 -0
- data/lib/templates/base/.kubes/config/env/dev.rb +6 -0
- data/lib/templates/base/.kubes/config/env/prod.rb +6 -0
- data/lib/templates/docker/Dockerfile +4 -0
- data/lib/templates/dsl/.kubes/resources/base/all.rb.tt +2 -0
- data/lib/templates/dsl/.kubes/resources/web/deployment.rb.tt +7 -0
- data/lib/templates/dsl/.kubes/resources/web/deployment/dev.rb +1 -0
- data/lib/templates/dsl/.kubes/resources/web/deployment/prod.rb +1 -0
- data/lib/templates/dsl/.kubes/resources/web/service.rb.tt +8 -0
- data/lib/templates/yaml/.kubes/resources/base/all.yaml.tt +2 -0
- data/lib/templates/yaml/.kubes/resources/base/deployment.yaml.tt +11 -0
- data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +24 -0
- data/lib/templates/yaml/.kubes/resources/web/deployment/dev.yaml +2 -0
- data/lib/templates/yaml/.kubes/resources/web/deployment/prod.yaml +2 -0
- data/lib/templates/yaml/.kubes/resources/web/service.yaml.tt +14 -0
- data/spec/cli_spec.rb +8 -0
- data/spec/fixtures/artifacts/demo-web/deployment.yaml +26 -0
- data/spec/fixtures/artifacts/demo-web/service.yaml +16 -0
- data/spec/fixtures/blocks/deployments.rb +9 -0
- data/spec/fixtures/decorators/deployment/configMap/envFrom.yaml +27 -0
- data/spec/fixtures/decorators/deployment/configMap/valueFrom.yaml +30 -0
- data/spec/fixtures/decorators/deployment/configMap/volumes.yaml +34 -0
- data/spec/fixtures/decorators/deployment/secret/envFrom.yaml +27 -0
- data/spec/fixtures/decorators/deployment/secret/valueFrom.yaml +30 -0
- data/spec/fixtures/decorators/deployment/secret/volumes.yaml +34 -0
- data/spec/fixtures/decorators/pod/configMap/envFrom.yaml +12 -0
- data/spec/fixtures/decorators/pod/configMap/valueFrom.yaml +16 -0
- data/spec/fixtures/decorators/pod/configMap/volumes.yaml +19 -0
- data/spec/fixtures/decorators/pod/secret/envFrom.yaml +12 -0
- data/spec/fixtures/decorators/pod/secret/valueFrom.yaml +16 -0
- data/spec/fixtures/decorators/pod/secret/volumes.yaml +19 -0
- data/spec/fixtures/deployments/minimum.rb +5 -0
- data/spec/fixtures/deployments/props.rb +7 -0
- data/spec/fixtures/deployments/setter/container.rb +11 -0
- data/spec/fixtures/deployments/setter/containers.rb +14 -0
- data/spec/fixtures/deployments/setter/metadata.rb +15 -0
- data/spec/fixtures/deployments/setter/sidecar.rb +12 -0
- data/spec/fixtures/deployments/setter/spec.rb +10 -0
- data/spec/fixtures/multiple-files/deployment-1.rb +4 -0
- data/spec/fixtures/multiple-files/deployment-2.rb +4 -0
- data/spec/fixtures/project/.gitignore +1 -0
- data/spec/fixtures/project/.kubes/resources/deployment.rb +32 -0
- data/spec/fixtures/project/.kubes/resources/foobar.rb +0 -0
- data/spec/fixtures/project/.kubes/resources/service.rb +3 -0
- data/spec/fixtures/services/minimum.rb +3 -0
- data/spec/fixtures/syntax/network_policy.rb +3 -0
- data/spec/fixtures/syntax/pod.rb +1 -0
- data/spec/kubes/compiler/decorator/resources/deployment_spec.rb +92 -0
- data/spec/kubes/compiler/decorator/resources/pod_spec.rb +92 -0
- data/spec/kubes/compiler/strategy/dsl_spec.rb +36 -0
- data/spec/kubes/compiler_spec.rb +10 -0
- data/spec/kubes/dsl/daemon_set.rb +11 -0
- data/spec/kubes/dsl/deployment_spec.rb +60 -0
- data/spec/kubes/dsl/network_policy_spec.rb +14 -0
- data/spec/kubes/dsl/pod_spec.rb +11 -0
- data/spec/kubes/dsl/service_spec.rb +12 -0
- data/spec/kubes/kubectl/batch_spec.rb +24 -0
- data/spec/spec_helper.rb +34 -0
- metadata +602 -22
- data/bin/console +0 -14
- data/bin/setup +0 -8
data/docs/_docs/dsl.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
---
|
2
|
+
title: Kubes DSL
|
3
|
+
---
|
4
|
+
|
5
|
+
Kubes supports a DSL that builds Kubernetes YAML files. The DSL substantially reduces the amount of code you have to write. Each part of the structure can be customized and overridden.
|
6
|
+
|
7
|
+
## DSL Methods
|
8
|
+
|
9
|
+
In general, the available DSL methods correspond to resource fields available. To find available methods:
|
10
|
+
|
11
|
+
1. Look the at the source for each of the [resources](https://github.com/boltops-tools/kubes/tree/master/lib/kubes/compiler/dsl/syntax).
|
12
|
+
2. Refer to each resource's docs, linked at the bottom of this page.
|
13
|
+
3. And use the `kubectl explain` command.
|
14
|
+
|
15
|
+
Sometimes the methods may not exactly match to avoid field names collisions. Though this is the exception, not the rule.
|
16
|
+
|
17
|
+
## Example
|
18
|
+
|
19
|
+
Here's a simple example:
|
20
|
+
|
21
|
+
.kubes/resources/web/service.rb
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
name "demo-web"
|
25
|
+
labels(role: "web")
|
26
|
+
namespace "demo"
|
27
|
+
|
28
|
+
port 80
|
29
|
+
targetPort 80
|
30
|
+
```
|
31
|
+
|
32
|
+
Results in:
|
33
|
+
|
34
|
+
.kubes/output/web/service.yaml
|
35
|
+
|
36
|
+
```yaml
|
37
|
+
---
|
38
|
+
apiVersion: v1
|
39
|
+
kind: Service
|
40
|
+
metadata:
|
41
|
+
name: demo-web
|
42
|
+
labels:
|
43
|
+
app: demo
|
44
|
+
namespace: demo
|
45
|
+
spec:
|
46
|
+
ports:
|
47
|
+
- port: 80
|
48
|
+
protocol: TCP
|
49
|
+
targetPort: 8080
|
50
|
+
selector:
|
51
|
+
app: demo
|
52
|
+
type: NodePort
|
53
|
+
```
|
54
|
+
|
55
|
+
Notice how `port` and `targetPort` correspond to `spec.ports.port` and `spec.ports.targetPort` in the YAML.
|
56
|
+
|
57
|
+
## Reader and Writer Methods
|
58
|
+
|
59
|
+
In general:
|
60
|
+
|
61
|
+
* The DSL methods behave as reader methods when no arguments are passed to it. IE: `name "demo-web"` sets the value.
|
62
|
+
* The DSL methods behave as writer methods when arguments are passed to it. IE: `name` returns the value.
|
63
|
+
|
64
|
+
## Merge Behavior
|
65
|
+
|
66
|
+
Generally, the merge should behave as expected. For example, map or Hash fields are merged together from multiple layers. Strings are simply replaced. See more details at [Layering Merge Behavior]({% link _docs/layering/merge.md %})
|
@@ -0,0 +1,114 @@
|
|
1
|
+
---
|
2
|
+
title: Multiple Resources
|
3
|
+
---
|
4
|
+
|
5
|
+
Kubes encourages a structure with files that matches the resource kind. Example:
|
6
|
+
|
7
|
+
.kubes
|
8
|
+
└── resources
|
9
|
+
└── web
|
10
|
+
├── deployment.rb
|
11
|
+
└── service.rb
|
12
|
+
|
13
|
+
This structure is nicely organized and covers 80% of use cases. An astute user may point out that this struture assumes one resource of each kind.
|
14
|
+
|
15
|
+
Next, we'll cover different ways to create multiple resource of the same kinds.
|
16
|
+
|
17
|
+
## Multiple Resources: Multiple Files
|
18
|
+
|
19
|
+
You can create multiple resources of same kind by appending a dash followed by anything. Example:
|
20
|
+
|
21
|
+
.kubes
|
22
|
+
└── resources
|
23
|
+
└── web
|
24
|
+
├── deployment-1.rb
|
25
|
+
├── deployment-2.rb
|
26
|
+
├── service-1.rb
|
27
|
+
└── service-2.rb
|
28
|
+
|
29
|
+
Only words before the dash are used to infer the resource kind.
|
30
|
+
|
31
|
+
Filename | Resource Kind
|
32
|
+
--- | ---
|
33
|
+
deployment-1.rb | Deployment
|
34
|
+
deployment-2.rb | Deployment
|
35
|
+
service-1.rb | Service
|
36
|
+
service-2.rb | Service
|
37
|
+
|
38
|
+
Using multiple files is the general recommended approach.
|
39
|
+
|
40
|
+
## Multiple Resources: Block Form
|
41
|
+
|
42
|
+
You can also use a block form to create multiple resources. You name the resource files with plural names. An example helps explain:
|
43
|
+
|
44
|
+
.kubes
|
45
|
+
└── resources
|
46
|
+
└── deployments.rb
|
47
|
+
|
48
|
+
.kubes/resources/web/deployments.rb
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
deployment "demo-web" do
|
52
|
+
labels(role: "web")
|
53
|
+
replicas 1
|
54
|
+
image built_image # IE: user/demo:kubes-2020-06-13T19-55-16-43afc6e
|
55
|
+
end
|
56
|
+
|
57
|
+
deployment "demo-web-2" do
|
58
|
+
labels(role: "web")
|
59
|
+
replicas 1
|
60
|
+
image built_image # IE: user/demo:kubes-2020-06-13T19-55-16-43afc6e
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
You can also mix and matched resources. When you use the block form, the file name is not used to infer the resource type. The resource kind is explicitly declare by the block method name.
|
65
|
+
|
66
|
+
|
67
|
+
.kubes/resources/web/resources.rb
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
deployment "demo-web" do
|
71
|
+
labels(role: "web")
|
72
|
+
replicas 1
|
73
|
+
image built_image # IE: user/demo:kubes-2020-06-13T19-55-16-43afc6e
|
74
|
+
end
|
75
|
+
|
76
|
+
service "demo-web" do
|
77
|
+
labels(role: "web")
|
78
|
+
end
|
79
|
+
```
|
80
|
+
|
81
|
+
You can declare deployment, service, and other resource kinds multiple times.
|
82
|
+
|
83
|
+
## Layering
|
84
|
+
|
85
|
+
Layering works for both simple and block form. Just create a folder with the corresponding name.
|
86
|
+
|
87
|
+
* The layering definitions with the simple form only merge with other simple form layers.
|
88
|
+
* The layering definitions for block forms only merge with other block form layers.
|
89
|
+
|
90
|
+
Simple form layering:
|
91
|
+
|
92
|
+
.kubes/resources/
|
93
|
+
├── base
|
94
|
+
│ ├── all.rb
|
95
|
+
│ └── deployment.rb
|
96
|
+
└── web
|
97
|
+
├── deployment
|
98
|
+
│ ├── dev.rb
|
99
|
+
│ └── prod.rb
|
100
|
+
└── deployment.rb
|
101
|
+
|
102
|
+
Block form layering:
|
103
|
+
|
104
|
+
.kubes/resources/
|
105
|
+
├── base
|
106
|
+
│ ├── alls.rb
|
107
|
+
│ └── deployments.rb
|
108
|
+
└── web
|
109
|
+
├── deployments
|
110
|
+
│ ├── dev.rb
|
111
|
+
│ └── prod.rb
|
112
|
+
└── deployments.rb
|
113
|
+
|
114
|
+
The main difference are pluralized filenames.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
---
|
2
|
+
title: Resources
|
3
|
+
---
|
4
|
+
|
5
|
+
Here's a list of the resources supported by the Kubes DSL.
|
6
|
+
|
7
|
+
{% assign docs = site.docs | where: "categories","dsl" %}
|
8
|
+
{% for doc in docs -%}
|
9
|
+
* [{{ doc.title }}]({{ doc.url }})
|
10
|
+
{% endfor %}
|
11
|
+
|
12
|
+
For resources, that are not supported, you can use the [Generic resource]({% link _docs/dsl/resources/generic.md %}) or use [YAML]({% link _docs/yaml.md %}) instead. You can use a mix of DSL and YAML definitions in the `.kubes/resources` folder.
|
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
title: BackendConfig
|
3
|
+
categories: dsl
|
4
|
+
---
|
5
|
+
|
6
|
+
A BackendConfig is [custom resource definitions (CRDs)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) that allow you to further customize the load balancer.
|
7
|
+
|
8
|
+
Here's an example of a BackendConfig.
|
9
|
+
|
10
|
+
.kubes/resources/web/backend-config.rb
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
name "backendconfig"
|
14
|
+
spec(
|
15
|
+
timeoutSec: 40,
|
16
|
+
connectionDraining: {
|
17
|
+
drainingTimeoutSec: 60,
|
18
|
+
},
|
19
|
+
sessionAffinity: {
|
20
|
+
affinityType: "CLIENT_IP",
|
21
|
+
}
|
22
|
+
)
|
23
|
+
```
|
24
|
+
|
25
|
+
Produces:
|
26
|
+
|
27
|
+
.kubes/output/web/backend-config.yaml
|
28
|
+
|
29
|
+
```yaml
|
30
|
+
---
|
31
|
+
apiVersion: cloud.google.com/v1
|
32
|
+
kind: BackendConfig
|
33
|
+
metadata:
|
34
|
+
name: my-bsc-backendconfig
|
35
|
+
spec:
|
36
|
+
timeoutSec: 40
|
37
|
+
connectionDraining:
|
38
|
+
drainingTimeoutSec: 60
|
39
|
+
sessionAffinity:
|
40
|
+
affinityType: CLIENT_IP
|
41
|
+
```
|
42
|
+
|
43
|
+
## DSL Methods
|
44
|
+
|
45
|
+
{% include dsl/methods.md name="backend_config" %}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
---
|
2
|
+
title: ConfigMap
|
3
|
+
categories: dsl
|
4
|
+
---
|
5
|
+
|
6
|
+
## Example
|
7
|
+
|
8
|
+
Here's an example of a ConfigMap.
|
9
|
+
|
10
|
+
.kubes/resources/shared/config_map.rb
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
name "demo-config-map"
|
14
|
+
data(
|
15
|
+
database: "mongodb",
|
16
|
+
database_uri: "mongodb://localhost:27017",
|
17
|
+
)
|
18
|
+
```
|
19
|
+
|
20
|
+
Produces:
|
21
|
+
|
22
|
+
.kubes/output/shared/config_map.yaml
|
23
|
+
|
24
|
+
```yaml
|
25
|
+
apiVersion: v1
|
26
|
+
kind: ConfigMap
|
27
|
+
metadata:
|
28
|
+
name: demo-config-map-cfbd534f91
|
29
|
+
labels:
|
30
|
+
app: demo
|
31
|
+
namespace: default
|
32
|
+
data:
|
33
|
+
database: mongodb
|
34
|
+
database_uri: mongodb://localhost:27017
|
35
|
+
```
|
36
|
+
|
37
|
+
## Suffix Hash
|
38
|
+
|
39
|
+
{% include dsl/rolling_deployment.md kind="ConfigMap" %}
|
40
|
+
|
41
|
+
.kubes/output/web/deployment.yaml:
|
42
|
+
|
43
|
+
```yaml
|
44
|
+
# ..
|
45
|
+
spec:
|
46
|
+
template:
|
47
|
+
spec:
|
48
|
+
containers:
|
49
|
+
- name: demo-web
|
50
|
+
image: nginx
|
51
|
+
envFrom:
|
52
|
+
- configMapRef:
|
53
|
+
name: demo-config-map-cfbd534f91
|
54
|
+
```
|
55
|
+
|
56
|
+
{% include dsl/suffix_hash.md %}
|
57
|
+
|
58
|
+
## Files Helper
|
59
|
+
|
60
|
+
You can use a `files` helper to load ConfigMap values from one or more files.
|
61
|
+
|
62
|
+
|
63
|
+
.kubes/resources/shared/config_map.rb
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
name "demo-secret"
|
67
|
+
files("files/configs.txt")
|
68
|
+
```
|
69
|
+
|
70
|
+
The `files/configs.txt` should be in the same folder as the `config_map.rb` definition. Example:
|
71
|
+
|
72
|
+
.kubes/resources/shared/files/configs.txt
|
73
|
+
|
74
|
+
CONFIG1=value1
|
75
|
+
CONFIG2=value2
|
76
|
+
|
77
|
+
## DSL Methods
|
78
|
+
|
79
|
+
Here's a list of more common methods:
|
80
|
+
|
81
|
+
* data
|
82
|
+
* binaryData
|
83
|
+
|
84
|
+
{% include dsl/methods.md name="config_map" %}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
title: DaemonSet
|
3
|
+
categories: dsl
|
4
|
+
---
|
5
|
+
|
6
|
+
## Example
|
7
|
+
|
8
|
+
Here's an example of a DaemonSet.
|
9
|
+
|
10
|
+
.kubes/resources/shared/daemon_set.rb
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
name "calico-node"
|
14
|
+
namespace "kube-system"
|
15
|
+
labels("k8s-app": "calico-node")
|
16
|
+
updateStrategy(
|
17
|
+
type: "RollingUpdate",
|
18
|
+
rollingUpdate: {
|
19
|
+
maxUnavailable: 1
|
20
|
+
}
|
21
|
+
)
|
22
|
+
annotations(
|
23
|
+
"*scheduler**.alpha.kubernetes.io/critical-pod": '*'
|
24
|
+
)
|
25
|
+
```
|
26
|
+
|
27
|
+
Produces:
|
28
|
+
|
29
|
+
.kubes/output/shared/daemon_set.yaml
|
30
|
+
|
31
|
+
```yaml
|
32
|
+
apiVersion: apps/v1
|
33
|
+
kind: DaemonSet
|
34
|
+
metadata:
|
35
|
+
annotations:
|
36
|
+
"*scheduler**.alpha.kubernetes.io/critical-pod": "*"
|
37
|
+
name: calico-node
|
38
|
+
labels:
|
39
|
+
k8s-app: calico-node
|
40
|
+
namespace: kube-system
|
41
|
+
spec:
|
42
|
+
updateStrategy:
|
43
|
+
type: RollingUpdate
|
44
|
+
rollingUpdate:
|
45
|
+
maxUnavailable: 1
|
46
|
+
```
|
47
|
+
|
48
|
+
## DSL Methods
|
49
|
+
|
50
|
+
Here's a list of more common methods:
|
51
|
+
|
52
|
+
* minReadySeconds
|
53
|
+
* revisionHistoryLimit
|
54
|
+
* selector
|
55
|
+
* template
|
56
|
+
* updateStrategy
|
57
|
+
|
58
|
+
{% include dsl/methods.md name="daemon_set" %}
|
@@ -0,0 +1,142 @@
|
|
1
|
+
---
|
2
|
+
title: Deployment
|
3
|
+
categories: dsl
|
4
|
+
---
|
5
|
+
|
6
|
+
DSL builds Kubernetes YAML files with a reasonable default structure. Each part of the structure can be customized and overridden.
|
7
|
+
|
8
|
+
## Basics
|
9
|
+
|
10
|
+
.kubes/resources/web/deployment.rb:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
name "demo-web"
|
14
|
+
labels(role: "web")
|
15
|
+
namespace "default"
|
16
|
+
replicas 2
|
17
|
+
image "nginx"
|
18
|
+
```
|
19
|
+
|
20
|
+
Produces:
|
21
|
+
|
22
|
+
.kubes/output/web/deployment.yaml:
|
23
|
+
|
24
|
+
```yaml
|
25
|
+
apiVersion: apps/v1
|
26
|
+
kind: Deployment
|
27
|
+
metadata:
|
28
|
+
name: demo-web
|
29
|
+
labels:
|
30
|
+
app: demo
|
31
|
+
namespace: default
|
32
|
+
spec:
|
33
|
+
replicas: 2
|
34
|
+
selector:
|
35
|
+
matchLabels:
|
36
|
+
app: demo
|
37
|
+
strategy:
|
38
|
+
rollingUpdate:
|
39
|
+
maxSurge: 25
|
40
|
+
maxUnavailable: 25
|
41
|
+
type: RollingUpdate
|
42
|
+
template:
|
43
|
+
metadata:
|
44
|
+
labels:
|
45
|
+
app: demo
|
46
|
+
containers:
|
47
|
+
- name: demo-web
|
48
|
+
image: nginx
|
49
|
+
```
|
50
|
+
|
51
|
+
## More Customizations
|
52
|
+
|
53
|
+
You can override any of the attributes within the deployment structure. You have first-class citizen access to the DSL helpers methods like template and strategy methods that set reasonable defaults.
|
54
|
+
|
55
|
+
Examples:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
spec(
|
59
|
+
replicas: replicas,
|
60
|
+
selector: {matchLabels: labels},
|
61
|
+
strategy: strategy,
|
62
|
+
template: template,
|
63
|
+
)
|
64
|
+
```
|
65
|
+
|
66
|
+
If you only have a single container:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
container(
|
70
|
+
name: name,
|
71
|
+
image: "nginx",
|
72
|
+
ports: [
|
73
|
+
containerPort: 80
|
74
|
+
]
|
75
|
+
)
|
76
|
+
```
|
77
|
+
|
78
|
+
For multiple containers:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
containers([
|
82
|
+
name: name,
|
83
|
+
image: "nginx",
|
84
|
+
ports: [
|
85
|
+
containerPort: 80
|
86
|
+
]
|
87
|
+
])
|
88
|
+
```
|
89
|
+
|
90
|
+
Refer to the source code [syntax/deployment.rb](https://github.com/boltops-tools/kubes/blob/master/lib/kubes/compiler/dsl/syntax/deployment.rb) for more methods available.
|
91
|
+
|
92
|
+
## DSL Methods
|
93
|
+
|
94
|
+
Here's a list of more common methods:
|
95
|
+
|
96
|
+
Top-level and special fields:
|
97
|
+
|
98
|
+
* container
|
99
|
+
* containers
|
100
|
+
* matchLabels
|
101
|
+
* maxSurge
|
102
|
+
* maxUnavailable
|
103
|
+
* sidecar
|
104
|
+
* templateMetadata
|
105
|
+
* templateSpec
|
106
|
+
|
107
|
+
deployment.spec fields:
|
108
|
+
|
109
|
+
* minReadySeconds
|
110
|
+
* progressDeadlineSeconds
|
111
|
+
* replicas
|
112
|
+
* revisionHistoryLimit
|
113
|
+
* selector
|
114
|
+
* strategy
|
115
|
+
* template
|
116
|
+
|
117
|
+
deployment.spec.template.spec.containers fields:
|
118
|
+
|
119
|
+
* args
|
120
|
+
* command
|
121
|
+
* env
|
122
|
+
* envFrom
|
123
|
+
* image
|
124
|
+
* imagePullPolicy
|
125
|
+
* lifecycle
|
126
|
+
* livenessProbe
|
127
|
+
* containerName
|
128
|
+
* ports
|
129
|
+
* readinessProbe
|
130
|
+
* volumeDevices
|
131
|
+
* volumeMounts
|
132
|
+
* workingDir
|
133
|
+
|
134
|
+
deployment.spec.template.spec.containers.ports fields:
|
135
|
+
|
136
|
+
* containerPort
|
137
|
+
* hostIP
|
138
|
+
* hostPort
|
139
|
+
* portName: Note this field doesn't match the original field name. It's more qualified.
|
140
|
+
* protocol
|
141
|
+
|
142
|
+
{% include dsl/methods.md name="deployment" %}
|