kubes 0.1.0 → 0.2.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.
- 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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Kubes::CLI
|
|
2
|
+
class Docker < Kubes::Command
|
|
3
|
+
desc "build", "Build docker image."
|
|
4
|
+
long_desc Help.text("docker:build")
|
|
5
|
+
option :push, type: :boolean, default: false
|
|
6
|
+
def build
|
|
7
|
+
builder = Kubes::Docker::Build.new(options)
|
|
8
|
+
builder.run
|
|
9
|
+
push if options[:push]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
desc "push IMAGE", "Push the docker image."
|
|
13
|
+
long_desc Help.text("docker:push")
|
|
14
|
+
option :push, type: :boolean, default: false
|
|
15
|
+
def push
|
|
16
|
+
pusher = Kubes::Docker::Push.new(options)
|
|
17
|
+
pusher.run
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Examples
|
|
2
|
+
|
|
3
|
+
kubes completion
|
|
4
|
+
|
|
5
|
+
Prints words for TAB auto-completion.
|
|
6
|
+
|
|
7
|
+
kubes completion
|
|
8
|
+
kubes completion hello
|
|
9
|
+
kubes completion hello name
|
|
10
|
+
|
|
11
|
+
To enable, TAB auto-completion add the following to your profile:
|
|
12
|
+
|
|
13
|
+
eval $(kubes completion_script)
|
|
14
|
+
|
|
15
|
+
Auto-completion example usage:
|
|
16
|
+
|
|
17
|
+
kubes [TAB]
|
|
18
|
+
kubes hello [TAB]
|
|
19
|
+
kubes hello name [TAB]
|
|
20
|
+
kubes hello name --[TAB]
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
class Kubes::CLI
|
|
2
|
+
class Init < Sequence
|
|
3
|
+
def self.options
|
|
4
|
+
[
|
|
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"],
|
|
7
|
+
[:type, aliases: ["t"], default: "yaml", desc: "Type: dsl or yaml"],
|
|
8
|
+
[:repo, required: true, desc: "Docker repo name. Example: user/repo. Configures .kubes/config.rb"],
|
|
9
|
+
]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
options.each { |args| class_option(*args) }
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
# Needs to be a method to its available for templates/.kubes/resources/%app%
|
|
16
|
+
def app
|
|
17
|
+
@options[:app]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
public
|
|
21
|
+
def create_dockefile
|
|
22
|
+
return if File.exist?("Dockerfile")
|
|
23
|
+
set_source("docker")
|
|
24
|
+
directory ".", "."
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def create_base_files
|
|
28
|
+
set_source("base")
|
|
29
|
+
directory ".", "."
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def create_dsl_files
|
|
33
|
+
return unless @options[:type] == "dsl"
|
|
34
|
+
set_source("dsl")
|
|
35
|
+
directory ".", "."
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def create_yaml_files
|
|
39
|
+
return if @options[:type] == "dsl"
|
|
40
|
+
set_source("yaml")
|
|
41
|
+
directory ".", "."
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def message
|
|
45
|
+
logger.info "Initialized .kubes folder"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def adjust_gitignore
|
|
49
|
+
ignores = %w[
|
|
50
|
+
.kubes/output
|
|
51
|
+
.kubes/state
|
|
52
|
+
]
|
|
53
|
+
if File.exist?(".gitignore")
|
|
54
|
+
lines = IO.readlines(".gitignore")
|
|
55
|
+
if lines.detect { |l| l.include?('.kubes/output') }
|
|
56
|
+
return # early
|
|
57
|
+
else
|
|
58
|
+
lines += ignores
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
lines = ignores
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
text = lines.join("\n") + "\n"
|
|
65
|
+
IO.write(".gitignore", text)
|
|
66
|
+
puts "Updated .gitignore"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'thor'
|
|
2
|
+
|
|
3
|
+
class Kubes::CLI
|
|
4
|
+
class Sequence < Thor::Group
|
|
5
|
+
include Thor::Actions
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
def logger
|
|
9
|
+
Kubes.logger
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def set_source(type)
|
|
13
|
+
override_source_paths(File.expand_path("../../templates/#{type}", __dir__))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def override_source_paths(*paths)
|
|
17
|
+
# https://github.com/erikhuda/thor/blob/34df888d721ecaa8cf0cea97d51dc6c388002742/lib/thor/actions.rb#L128
|
|
18
|
+
instance_variable_set(:@source_paths, nil) # unset instance variable cache
|
|
19
|
+
# Using string with instance_eval because block doesnt have access to path at runtime.
|
|
20
|
+
self.class.instance_eval %{
|
|
21
|
+
def self.source_paths
|
|
22
|
+
#{paths.flatten.inspect}
|
|
23
|
+
end
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require "thor"
|
|
2
|
+
|
|
3
|
+
# Override thor's long_desc identation behavior
|
|
4
|
+
# https://github.com/erikhuda/thor/issues/398
|
|
5
|
+
class Thor
|
|
6
|
+
module Shell
|
|
7
|
+
class Basic
|
|
8
|
+
def print_wrapped(message, options = {})
|
|
9
|
+
message = "\n#{message}" unless message[0] == "\n"
|
|
10
|
+
stdout.puts message
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Gets rid of the c_l_i extra commands in the help menu. Seems like thor_classes_in is only used
|
|
17
|
+
# for this purpose. More details: https://gist.github.com/tongueroo/ee92ec28a4d3eed301d88e8ccdd2fe10
|
|
18
|
+
module ThorPrepend
|
|
19
|
+
module Util
|
|
20
|
+
def thor_classes_in(klass)
|
|
21
|
+
klass.name.include?("CLI") ? [] : super
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
Thor::Util.singleton_class.prepend(ThorPrepend::Util)
|
|
26
|
+
|
|
27
|
+
module Kubes
|
|
28
|
+
class Command < Thor
|
|
29
|
+
class << self
|
|
30
|
+
def dispatch(m, args, options, config)
|
|
31
|
+
# Allow calling for help via:
|
|
32
|
+
# kubes command help
|
|
33
|
+
# kubes command -h
|
|
34
|
+
# kubes command --help
|
|
35
|
+
# kubes command -D
|
|
36
|
+
#
|
|
37
|
+
# as well thor's normal way:
|
|
38
|
+
#
|
|
39
|
+
# kubes help command
|
|
40
|
+
help_flags = Thor::HELP_MAPPINGS + ["help"]
|
|
41
|
+
if args.length > 1 && !(args & help_flags).empty?
|
|
42
|
+
args -= help_flags
|
|
43
|
+
args.insert(-2, "help")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# kubes version
|
|
47
|
+
# kubes --version
|
|
48
|
+
# kubes -v
|
|
49
|
+
version_flags = ["--version", "-v"]
|
|
50
|
+
if args.length == 1 && !(args & version_flags).empty?
|
|
51
|
+
args = ["version"]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
super
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Override command_help to include the description at the top of the
|
|
58
|
+
# long_description.
|
|
59
|
+
def command_help(shell, command_name)
|
|
60
|
+
meth = normalize_command_name(command_name)
|
|
61
|
+
command = all_commands[meth]
|
|
62
|
+
alter_command_description(command)
|
|
63
|
+
super
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def alter_command_description(command)
|
|
67
|
+
return unless command
|
|
68
|
+
|
|
69
|
+
# Add description to beginning of long_description
|
|
70
|
+
long_desc = if command.long_description
|
|
71
|
+
"#{command.description}\n\n#{command.long_description}"
|
|
72
|
+
else
|
|
73
|
+
command.description
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# add reference url to end of the long_description
|
|
77
|
+
unless website.empty?
|
|
78
|
+
full_command = [command.ancestor_name, command.name].compact.join('-')
|
|
79
|
+
url = "#{website}/reference/kubes-#{full_command}"
|
|
80
|
+
long_desc += "\n\nHelp also available at: #{url}"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
command.long_description = long_desc
|
|
84
|
+
end
|
|
85
|
+
private :alter_command_description
|
|
86
|
+
|
|
87
|
+
# meant to be overriden
|
|
88
|
+
def website
|
|
89
|
+
""
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# https://github.com/erikhuda/thor/issues/244
|
|
93
|
+
# Deprecation warning: Thor exit with status 0 on errors. To keep this behavior, you must define `exit_on_failure?` in `Lono::CLI`
|
|
94
|
+
# You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION.
|
|
95
|
+
def exit_on_failure?
|
|
96
|
+
true
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module Kubes
|
|
2
|
+
class Compiler
|
|
3
|
+
include Kubes::Logging
|
|
4
|
+
include Kubes::Util::Consider
|
|
5
|
+
|
|
6
|
+
def initialize(options={})
|
|
7
|
+
@options = options
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def run
|
|
11
|
+
results = resources.map do |path|
|
|
12
|
+
strategy = Strategy.new(@options.merge(path: path))
|
|
13
|
+
strategy.compile
|
|
14
|
+
end.compact
|
|
15
|
+
|
|
16
|
+
results.each do |result|
|
|
17
|
+
write(result)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
puts "Compiled .kubes/resources files to .kubes/output" if show_compiled_message?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def resources
|
|
24
|
+
paths = []
|
|
25
|
+
expr = "#{Kubes.root}/.kubes/resources/**/*"
|
|
26
|
+
Dir.glob(expr).each do |path|
|
|
27
|
+
next unless process?(path)
|
|
28
|
+
paths << path
|
|
29
|
+
end
|
|
30
|
+
paths
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Only considering files 2 layers deep. So:
|
|
34
|
+
#
|
|
35
|
+
# Yes = web/deployment.yaml
|
|
36
|
+
# No = web/deployment/dev.yaml
|
|
37
|
+
#
|
|
38
|
+
def process?(path)
|
|
39
|
+
if Kubes.kustomize?
|
|
40
|
+
File.file?(path)
|
|
41
|
+
else
|
|
42
|
+
consider?(path) && two_levels_deep?(path)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def two_levels_deep?(path)
|
|
47
|
+
rel_path = path.sub(%r{.*\.kubes/resources/},'')
|
|
48
|
+
rel_path.split('/').size == 2
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def write(result)
|
|
52
|
+
result.write_decorate!
|
|
53
|
+
filename, content = result.filename, result.content
|
|
54
|
+
dest = "#{Kubes.root}/.kubes/output/#{filename}"
|
|
55
|
+
|
|
56
|
+
if result.io?
|
|
57
|
+
FileUtils.cp(filename, dest) # preserve permissions
|
|
58
|
+
else
|
|
59
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
60
|
+
IO.write(dest, content)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
pretty_dest = dest.sub("#{Kubes.root}/",'')
|
|
64
|
+
logger.debug "Compiled #{pretty_dest}"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def show_compiled_message?
|
|
68
|
+
!%w[g ge get].include?(ARGV.first)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Kubes::Compiler::Decorator
|
|
2
|
+
class Base
|
|
3
|
+
def initialize(data)
|
|
4
|
+
@data = data
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def result
|
|
8
|
+
if @data.is_a?(Kubes::Compiler::Dsl::Core::Blocks)
|
|
9
|
+
@data.results.each { |k,v| process(v) } # returns nil
|
|
10
|
+
else
|
|
11
|
+
process(@data) # returns Hash
|
|
12
|
+
end
|
|
13
|
+
@data # important to return @data so we keep the original @data structure: Blocks or Hash
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Kubes::Compiler::Decorator::Resources
|
|
2
|
+
class Container
|
|
3
|
+
include Mapping
|
|
4
|
+
|
|
5
|
+
def initialize(data, kind:, fields_for:)
|
|
6
|
+
@data = data
|
|
7
|
+
# These methods are defined in Mapping
|
|
8
|
+
kind == "Deployment" ? deployment_keys : pod_keys
|
|
9
|
+
fields_for == "Secret" ? secrets_fields : configMaps_fields
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
envFrom!
|
|
14
|
+
valueFrom!
|
|
15
|
+
volumes!
|
|
16
|
+
@data
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# spec.envFrom.configMapRef
|
|
20
|
+
# spec.envFrom.secretRef
|
|
21
|
+
def envFrom!
|
|
22
|
+
return @data unless containers
|
|
23
|
+
|
|
24
|
+
containers.each do |container|
|
|
25
|
+
next unless envFrom_list = container.dig('envFrom') # intentional assignment
|
|
26
|
+
|
|
27
|
+
envFrom_list.each do |envFrom|
|
|
28
|
+
next unless name = envFrom.dig(@envFrom_field, 'name') # intentional assignment
|
|
29
|
+
|
|
30
|
+
md5 = Kubes::Compiler::Decorator.fetch(name)
|
|
31
|
+
envFrom[@envFrom_field]['name'] = [name, md5].compact.join('-')
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# spec.valueFrom.configMapKeyRef
|
|
37
|
+
# spec.valueFrom.secretKeyRef
|
|
38
|
+
def valueFrom!
|
|
39
|
+
return @data unless containers
|
|
40
|
+
|
|
41
|
+
containers.each do |container|
|
|
42
|
+
next unless env_list = container.dig('env') # intentional assignment
|
|
43
|
+
|
|
44
|
+
env_list.each do |env|
|
|
45
|
+
next unless name = env.dig('valueFrom',@valueFrom_field,'name') # intentional assignment
|
|
46
|
+
|
|
47
|
+
md5 = Kubes::Compiler::Decorator.fetch(name)
|
|
48
|
+
env['valueFrom'][@valueFrom_field]['name'] = [name, md5].compact.join('-')
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# spec.volumes.configMap.name
|
|
54
|
+
# spec.volumes.secret.secretName
|
|
55
|
+
def volumes!
|
|
56
|
+
volumes = @data.dig(*@volumes_key.split('.'))
|
|
57
|
+
return @data unless volumes
|
|
58
|
+
|
|
59
|
+
volumes.each do |volume|
|
|
60
|
+
# Example:
|
|
61
|
+
# next unless field = volume.dig('secret') # intentional assignment
|
|
62
|
+
# next unless name = field['secretName'] # intentional assignment
|
|
63
|
+
next unless field = volume.dig(@volume_field) # intentional assignment
|
|
64
|
+
next unless name = field[@volume_field_name] # intentional assignment
|
|
65
|
+
|
|
66
|
+
md5 = Kubes::Compiler::Decorator.fetch(name)
|
|
67
|
+
field[@volume_field_name] = [name, md5].compact.join('-')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
def containers
|
|
73
|
+
@data.dig(*@containers_key.split('.'))
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|