kubes 0.1.0 → 0.2.4
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.
- checksums.yaml +5 -5
- data/.dockerignore +4 -0
- data/.gitignore +15 -7
- data/.rspec +3 -0
- data/CHANGELOG.md +22 -0
- data/Dockerfile +14 -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/ci/cloudbuild.md +69 -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 +137 -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 +111 -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 +19 -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 +32 -0
- data/docs/_docs/learn/dsl/deploy.md +66 -0
- data/docs/_docs/learn/dsl/install.md +5 -0
- data/docs/_docs/learn/dsl/new-project.md +34 -0
- data/docs/_docs/learn/dsl/next-steps.md +5 -0
- data/docs/_docs/learn/dsl/review-project.md +63 -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 +32 -0
- data/docs/_docs/learn/yaml/deploy.md +67 -0
- data/docs/_docs/learn/yaml/install.md +5 -0
- data/docs/_docs/learn/yaml/new-project.md +37 -0
- data/docs/_docs/learn/yaml/next-steps.md +5 -0
- data/docs/_docs/learn/yaml/review-project.md +108 -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 +41 -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 +27 -0
- data/docs/_includes/learn/start.md +3 -0
- data/docs/_includes/reference.md +3 -0
- data/docs/_includes/sidebar.html +118 -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 +19 -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 +160 -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 +47 -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 +31 -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 +22 -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/shared/namespace.rb.tt +2 -0
- data/lib/templates/dsl/.kubes/resources/web/deployment.rb +10 -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 +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/shared/namespace.yaml.tt +6 -0
- data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +19 -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 +607 -22
- data/bin/console +0 -14
- data/bin/setup +0 -8
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: New Project
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
If you already a project with an existing Dockerfile, you can use that. If you do not, kubes generates a starter Dockerfile that runs nginx. For this tutorial, we'll start with an empty folder.
|
|
6
|
+
|
|
7
|
+
mkdir demo
|
|
8
|
+
cd demo
|
|
9
|
+
|
|
10
|
+
For this tutorial, we'll use an ECR repo, though any repo will work.
|
|
11
|
+
|
|
12
|
+
Let's generate a starter project:
|
|
13
|
+
|
|
14
|
+
$ REPO=$(aws ecr describe-repositories --repository-name demo | jq -r '.repositories[].repositoryUri')
|
|
15
|
+
$ kubes init --app demo --repo $REPO
|
|
16
|
+
create Dockerfile
|
|
17
|
+
create .kubes/config.rb
|
|
18
|
+
create .kubes/config/env/dev.rb
|
|
19
|
+
create .kubes/config/env/prod.rb
|
|
20
|
+
create .kubes/resources/base/all.yaml
|
|
21
|
+
create .kubes/resources/base/deployment.yaml
|
|
22
|
+
create .kubes/resources/shared/namespace.yaml
|
|
23
|
+
create .kubes/resources/web/deployment.yaml
|
|
24
|
+
create .kubes/resources/web/deployment/dev.yaml
|
|
25
|
+
create .kubes/resources/web/deployment/prod.yaml
|
|
26
|
+
create .kubes/resources/web/service.yaml
|
|
27
|
+
Initialized .kubes folder
|
|
28
|
+
Updated .gitignore
|
|
29
|
+
$
|
|
30
|
+
|
|
31
|
+
To learn more about the generated structure, here are the [Structure Docs]({% link _docs/intro/structure.md %}).
|
|
32
|
+
|
|
33
|
+
Let's explore some of the generated files.
|
|
34
|
+
|
|
35
|
+
{% include learn/review.md %}
|
|
36
|
+
|
|
37
|
+
Next, we'll review the resources.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Review Project
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Let's review the resources.
|
|
6
|
+
|
|
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
|
|
23
|
+
|
|
24
|
+
The `web/deployment.yaml` file is a little more interesting:
|
|
25
|
+
|
|
26
|
+
.kubes/resources/web/deployment.yaml
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
apiVersion: apps/v1
|
|
30
|
+
kind: Deployment
|
|
31
|
+
metadata:
|
|
32
|
+
name: web
|
|
33
|
+
labels:
|
|
34
|
+
role: web
|
|
35
|
+
spec:
|
|
36
|
+
replicas: 1
|
|
37
|
+
selector:
|
|
38
|
+
matchLabels:
|
|
39
|
+
role: web
|
|
40
|
+
template:
|
|
41
|
+
metadata:
|
|
42
|
+
labels:
|
|
43
|
+
role: web
|
|
44
|
+
spec:
|
|
45
|
+
containers:
|
|
46
|
+
- name: web
|
|
47
|
+
image: <%= built_image %>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
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.
|
|
51
|
+
|
|
52
|
+
## Base Folder
|
|
53
|
+
|
|
54
|
+
Also let's check the files in the base folder.
|
|
55
|
+
|
|
56
|
+
.kubes/resources/base/all.yaml
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
metadata:
|
|
60
|
+
namespace: demo
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
.kubes/resources/base/deployment.yaml
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
metadata:
|
|
67
|
+
labels:
|
|
68
|
+
app: demo
|
|
69
|
+
spec:
|
|
70
|
+
selector:
|
|
71
|
+
matchLabels:
|
|
72
|
+
app: demo
|
|
73
|
+
template:
|
|
74
|
+
metadata:
|
|
75
|
+
labels:
|
|
76
|
+
app: demo
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
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.
|
|
80
|
+
|
|
81
|
+
The `all.yaml` means all resources will use the demo namespace. The `deployment.yaml` adds common labels to all deployment resource kinds.
|
|
82
|
+
|
|
83
|
+
## Service Resource
|
|
84
|
+
|
|
85
|
+
Next, let's look at `service.yaml`
|
|
86
|
+
|
|
87
|
+
.kubes/resources/web/service.yaml
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
apiVersion: v1
|
|
91
|
+
kind: Service
|
|
92
|
+
metadata:
|
|
93
|
+
name: web
|
|
94
|
+
labels:
|
|
95
|
+
role: web
|
|
96
|
+
spec:
|
|
97
|
+
ports:
|
|
98
|
+
- port: 80
|
|
99
|
+
protocol: TCP
|
|
100
|
+
targetPort: <%= dockerfile_port %>
|
|
101
|
+
selector:
|
|
102
|
+
role: web
|
|
103
|
+
type: ClusterIP
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The `dockerfile_port` helper returns the EXPOSE port in the Dockerfile. This spares you updating this manually, you only have to update the Dockerfile.
|
|
107
|
+
|
|
108
|
+
Next, we'll deploy the app.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Update App
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Let's update the app. In this case, we don't need to update the Docker image, so we'll use the `apply` command, which does not run the Docker build phase.
|
|
6
|
+
|
|
7
|
+
kubes apply
|
|
8
|
+
|
|
9
|
+
Here's what the output looks like. Note, the namespace is not shown for conciseness.
|
|
10
|
+
|
|
11
|
+
$ kubes apply
|
|
12
|
+
Compiled .kubes/resources files
|
|
13
|
+
=> kubectl apply -f .kubes/output/web/service.yaml
|
|
14
|
+
service/demo-web unchanged
|
|
15
|
+
=> kubectl apply -f .kubes/output/web/deployment.yaml
|
|
16
|
+
deployment.apps/demo-web configured
|
|
17
|
+
$
|
|
18
|
+
|
|
19
|
+
The change has been deployed. Let's double check it:
|
|
20
|
+
|
|
21
|
+
kubes get
|
|
22
|
+
|
|
23
|
+
Example output:
|
|
24
|
+
|
|
25
|
+
$ kubes get
|
|
26
|
+
=> kubectl get --recursive -f .kubes/output
|
|
27
|
+
NAME READY UP-TO-DATE AVAILABLE AGE
|
|
28
|
+
deployment.apps/demo-web 3/3 3 3 6m5s
|
|
29
|
+
|
|
30
|
+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
31
|
+
service/demo-web ClusterIP 172.16.201.77 <none> 80/TCP 6m5s
|
|
32
|
+
$
|
|
33
|
+
|
|
34
|
+
Let's also use the `kubectl get` command:
|
|
35
|
+
|
|
36
|
+
$ kubectl get all
|
|
37
|
+
NAME READY STATUS RESTARTS AGE
|
|
38
|
+
pod/demo-web-5cb4f9fb77-6c7vc 1/1 Running 0 3s
|
|
39
|
+
pod/demo-web-5cb4f9fb77-lgczj 1/1 Running 0 5m25s
|
|
40
|
+
pod/demo-web-5cb4f9fb77-ls28f 1/1 Running 0 3s
|
|
41
|
+
|
|
42
|
+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
43
|
+
service/demo-web ClusterIP 172.16.201.77 <none> 80/TCP 5m26s
|
|
44
|
+
|
|
45
|
+
NAME READY UP-TO-DATE AVAILABLE AGE
|
|
46
|
+
deployment.apps/demo-web 3/3 3 3 5m26s
|
|
47
|
+
|
|
48
|
+
NAME DESIRED CURRENT READY AGE
|
|
49
|
+
replicaset.apps/demo-web-5cb4f9fb77 3 3 3 5m26s
|
|
50
|
+
$
|
|
51
|
+
|
|
52
|
+
We can see that there are now 3 replicas running.
|
|
53
|
+
|
|
54
|
+
Next, we'll delete the app.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Next Steps
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Hopefully, you have a good feel for how kubes works now. From here, there are a few resources that can help you continue along:
|
|
6
|
+
|
|
7
|
+
* Check out the [kubes](https://github.com/boltops-tools/kubes) repo on GitHub
|
|
8
|
+
* ⭐️ the kubes project on GitHub
|
|
9
|
+
* Write a blog post about kubes
|
|
10
|
+
* Post on your favorite discussion about kubes
|
|
11
|
+
* Contribute a pull request
|
|
12
|
+
|
|
13
|
+
Everyone can contribute to making kubes better, including the documentation. These docs are the kubes repo located the [docs folder](https://github.com/boltops-tools/tree/master/docs). Please fork the project and open a pull request! We love your pull requests. Contributions are encouraged and welcomed!
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Clock Web Worker Pattern
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A common pattern is to use the same code to run different types of processes like clock, web, worker. Kubes is flexible enough to support this pattern.
|
|
6
|
+
|
|
7
|
+
Note, often the clock process is also called a scheduler.
|
|
8
|
+
|
|
9
|
+
## Structure
|
|
10
|
+
|
|
11
|
+
Here's a structure that achieves this pattern with Kubes:
|
|
12
|
+
|
|
13
|
+
.kubes/resources
|
|
14
|
+
├── clock
|
|
15
|
+
│ └── deployment.rb
|
|
16
|
+
├── web
|
|
17
|
+
│ ├── deployment.rb
|
|
18
|
+
│ └── service.rb
|
|
19
|
+
└── worker
|
|
20
|
+
└── deployment.rb
|
|
21
|
+
|
|
22
|
+
## Source Code
|
|
23
|
+
|
|
24
|
+
.kubes/resources/demo-clock/deployment.rb
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
name "demo-clock"
|
|
28
|
+
namespace "default"
|
|
29
|
+
labels(role: "web")
|
|
30
|
+
|
|
31
|
+
replicas 1
|
|
32
|
+
image built_image # IE: user/demo-clock:kubes-2020-06-13T19-55-16-43afc6e
|
|
33
|
+
command "bin/clock"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
.kubes/resources/web/deployment.rb
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
name "demo-web"
|
|
40
|
+
namespace "default"
|
|
41
|
+
labels(role: "web")
|
|
42
|
+
|
|
43
|
+
replicas 1
|
|
44
|
+
image built_image # IE: user/demo-clock:kubes-2020-06-13T19-55-16-43afc6e
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
.kubes/resources/demo-worker/deployment.rb
|
|
48
|
+
|
|
49
|
+
```ruby
|
|
50
|
+
name "demo-worker"
|
|
51
|
+
namespace "default"
|
|
52
|
+
labels(role: "web")
|
|
53
|
+
|
|
54
|
+
replicas 2
|
|
55
|
+
image built_image # IE: user/demo-clock:kubes-2020-06-13T19-55-16-43afc6e
|
|
56
|
+
command "bin/worker"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Deploy All-At-Once
|
|
60
|
+
|
|
61
|
+
To deploy all 3 process types:
|
|
62
|
+
|
|
63
|
+
kubes deploy
|
|
64
|
+
|
|
65
|
+
## Deploy Selectively
|
|
66
|
+
|
|
67
|
+
To deploy selectively:
|
|
68
|
+
|
|
69
|
+
kubes deploy clock
|
|
70
|
+
kubes deploy web
|
|
71
|
+
kubes deploy worker
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Resources
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
You define your Kubernetes resources in the `.kubes/resources` folder. Kubes categories items within this folder in 3 main buckets:
|
|
6
|
+
|
|
7
|
+
* [Role-Based Resource]({% link _docs/resources/role.md %}): Role-based resources. This is your main project resources group in roles.
|
|
8
|
+
* [Base Folder]({% link _docs/resources/base.md %}): The base folder contains definitions for common fields that is used for [Layering]({% link _docs/layering.md %}).
|
|
9
|
+
* [Shared Resources]({% link _docs/resources/shared.md %}): Shared resources that are meant to be created first and shared by other resources.
|
|
10
|
+
|
|
11
|
+
In the next sections, we'll cover how these resources are used.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Base
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The base folder is used for purely layering.
|
|
6
|
+
|
|
7
|
+
## Structure
|
|
8
|
+
|
|
9
|
+
Here's an example structure, so we can understand how layering works with the base folder.
|
|
10
|
+
|
|
11
|
+
.kubes/resources/
|
|
12
|
+
├── base
|
|
13
|
+
│ ├── all.rb
|
|
14
|
+
│ └── deployment.rb
|
|
15
|
+
└── web
|
|
16
|
+
├── deployment.rb
|
|
17
|
+
└── service.rb
|
|
18
|
+
|
|
19
|
+
## Layering
|
|
20
|
+
|
|
21
|
+
Kubes process the files in the `base` folder first, then it process your [role-based resources]({% link _docs/resources/role.md %}) like web. So:
|
|
22
|
+
|
|
23
|
+
kubes deploy web deployment
|
|
24
|
+
|
|
25
|
+
Will layer:
|
|
26
|
+
|
|
27
|
+
1. .kubes/resources/base/all.rb
|
|
28
|
+
2. .kubes/resources/base/deployment.rb
|
|
29
|
+
3. .kubes/resources/web/deployment.rb
|
|
30
|
+
|
|
31
|
+
More details on layering can be found in the [Layering Docs]({% link _docs/layering.md %}).
|
|
32
|
+
|
|
33
|
+
Remember files in the base are used just for layering.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Role-Based Resources
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Role-based resources are your main project's resources. Kubes groups resources together under a "role".
|
|
6
|
+
|
|
7
|
+
## Example Structure
|
|
8
|
+
|
|
9
|
+
Here's an example structure to help explain how role-based resources work.
|
|
10
|
+
|
|
11
|
+
.kubes
|
|
12
|
+
└── resources
|
|
13
|
+
├── clock
|
|
14
|
+
│ └── deployment.yaml
|
|
15
|
+
├── web
|
|
16
|
+
│ ├── deployment.yaml
|
|
17
|
+
│ └── service.yaml
|
|
18
|
+
└── worker
|
|
19
|
+
└── deployment.yaml
|
|
20
|
+
|
|
21
|
+
## Resource Roles
|
|
22
|
+
|
|
23
|
+
Here the resource roles are:
|
|
24
|
+
|
|
25
|
+
1. clock
|
|
26
|
+
2. web
|
|
27
|
+
3. worker
|
|
28
|
+
|
|
29
|
+
You can freely add more roles if needed. This structure is flexible enough to account for most use-cases.
|
|
30
|
+
|
|
31
|
+
## Deploy
|
|
32
|
+
|
|
33
|
+
You can deploy specific roles like so:
|
|
34
|
+
|
|
35
|
+
kubes deploy clock
|
|
36
|
+
kubes deploy web
|
|
37
|
+
kubes deploy worker
|
|
38
|
+
|
|
39
|
+
Or you can deploy all roles at once:
|
|
40
|
+
|
|
41
|
+
kubes deploy
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Shared
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The `shared` folder purpose is to provide a place for Kubernetes resources that are shared between roles.
|
|
6
|
+
|
|
7
|
+
## Example Structure
|
|
8
|
+
|
|
9
|
+
Here's an example structure to help explain how shared resources work.
|
|
10
|
+
|
|
11
|
+
.kubes/resources
|
|
12
|
+
├── clock
|
|
13
|
+
│ └── deployment.rb
|
|
14
|
+
├── shared
|
|
15
|
+
│ └── secret.rb
|
|
16
|
+
└── web
|
|
17
|
+
├── deployment.rb
|
|
18
|
+
└── service.rb
|
|
19
|
+
|
|
20
|
+
## Deploy
|
|
21
|
+
|
|
22
|
+
When you deploy with Kubes, it will run `kubectl apply` on the shared resources first and then your [role-based resources]({% link _docs/resources/role.md %}) like clock and web. Example:
|
|
23
|
+
|
|
24
|
+
$ kubes apply
|
|
25
|
+
Deploying kubes resources
|
|
26
|
+
=> kubectl apply -f .kubes/output/shared/secret.yaml
|
|
27
|
+
secret/demo-secret created
|
|
28
|
+
=> kubectl apply -f .kubes/output/clock/deployment.yaml
|
|
29
|
+
deployment.apps/demo-clock created
|
|
30
|
+
=> kubectl apply -f .kubes/output/web/service.yaml
|
|
31
|
+
service/demo-web created
|
|
32
|
+
=> kubectl apply -f .kubes/output/web/deployment.yaml
|
|
33
|
+
deployment.apps/demo-web created
|
|
34
|
+
$
|
|
35
|
+
|
|
36
|
+
Kubes will order the creation of shared resources first. You can override the default ordering with an [Order config]({% link _docs/intro/ordering/custom.md %}).
|
data/docs/_docs/yaml.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Kubes YAML
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
You can write your Kubernetes resources in YAML format.
|
|
6
|
+
|
|
7
|
+
.kubes
|
|
8
|
+
└── resources
|
|
9
|
+
└── web
|
|
10
|
+
├── deployment.yaml
|
|
11
|
+
└── service.yaml
|
|
12
|
+
|
|
13
|
+
## YAML and Templating
|
|
14
|
+
|
|
15
|
+
Kubes provides a little extra power for the YAML format. The YAML files are processed through an ERB templating language. So you have dynamic control. Here's an example with `Kubes.env` and the `built_image` helper.
|
|
16
|
+
|
|
17
|
+
.kubes/resources/web/deployment.yaml
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
---
|
|
21
|
+
apiVersion: apps/v1
|
|
22
|
+
kind: Deployment
|
|
23
|
+
metadata:
|
|
24
|
+
name: demo-web
|
|
25
|
+
labels:
|
|
26
|
+
app: demo
|
|
27
|
+
namespace: default
|
|
28
|
+
spec:
|
|
29
|
+
replicas: <%= Kubes.env == "prod" ? 2 : 1 %>
|
|
30
|
+
selector:
|
|
31
|
+
matchLabels:
|
|
32
|
+
app: demo
|
|
33
|
+
template:
|
|
34
|
+
metadata:
|
|
35
|
+
labels:
|
|
36
|
+
app: demo
|
|
37
|
+
spec:
|
|
38
|
+
containers:
|
|
39
|
+
- name: demo-web
|
|
40
|
+
image: <%= built_image %>
|
|
41
|
+
```
|