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.
Files changed (384) hide show
  1. checksums.yaml +5 -5
  2. data/.dockerignore +4 -0
  3. data/.gitignore +15 -7
  4. data/.rspec +3 -0
  5. data/CHANGELOG.md +22 -0
  6. data/Dockerfile +14 -0
  7. data/Gemfile +3 -1
  8. data/Guardfile +19 -0
  9. data/LICENSE.txt +201 -0
  10. data/README.md +46 -18
  11. data/Rakefile +13 -1
  12. data/docs/.gitignore +5 -0
  13. data/docs/CNAME +1 -0
  14. data/docs/Gemfile +16 -0
  15. data/docs/LICENSE +201 -0
  16. data/docs/Procfile +2 -0
  17. data/docs/README.md +24 -0
  18. data/docs/Rakefile +38 -0
  19. data/docs/_config.yml +71 -0
  20. data/docs/_docs/auto-context.md +47 -0
  21. data/docs/_docs/ci/cloudbuild.md +69 -0
  22. data/docs/_docs/config.md +9 -0
  23. data/docs/_docs/config/docker.md +70 -0
  24. data/docs/_docs/config/env.md +58 -0
  25. data/docs/_docs/config/kubectl.md +61 -0
  26. data/docs/_docs/contributing.md +98 -0
  27. data/docs/_docs/dsl.md +66 -0
  28. data/docs/_docs/dsl/multiple-resources.md +114 -0
  29. data/docs/_docs/dsl/resources.md +12 -0
  30. data/docs/_docs/dsl/resources/backend_config.md +45 -0
  31. data/docs/_docs/dsl/resources/config_map.md +84 -0
  32. data/docs/_docs/dsl/resources/daemon_set.md +58 -0
  33. data/docs/_docs/dsl/resources/deployment.md +137 -0
  34. data/docs/_docs/dsl/resources/generic.md +58 -0
  35. data/docs/_docs/dsl/resources/ingress.md +103 -0
  36. data/docs/_docs/dsl/resources/managed_certificate.md +39 -0
  37. data/docs/_docs/dsl/resources/namespace.md +34 -0
  38. data/docs/_docs/dsl/resources/network_policy.md +111 -0
  39. data/docs/_docs/dsl/resources/pod.md +82 -0
  40. data/docs/_docs/dsl/resources/role.md +44 -0
  41. data/docs/_docs/dsl/resources/role_binding.md +55 -0
  42. data/docs/_docs/dsl/resources/secret.md +87 -0
  43. data/docs/_docs/dsl/resources/service.md +60 -0
  44. data/docs/_docs/dsl/resources/service_account.md +37 -0
  45. data/docs/_docs/extra-env.md +23 -0
  46. data/docs/_docs/extra-env/dsl.md +86 -0
  47. data/docs/_docs/extra-env/yaml.md +67 -0
  48. data/docs/_docs/helpers.md +19 -0
  49. data/docs/_docs/intro.md +15 -0
  50. data/docs/_docs/intro/concepts.md +37 -0
  51. data/docs/_docs/intro/how-kubes-works.md +29 -0
  52. data/docs/_docs/intro/install.md +6 -0
  53. data/docs/_docs/intro/ordering.md +63 -0
  54. data/docs/_docs/intro/ordering/custom.md +25 -0
  55. data/docs/_docs/intro/structure.md +43 -0
  56. data/docs/_docs/kustomize.md +54 -0
  57. data/docs/_docs/layering.md +8 -0
  58. data/docs/_docs/layering/dsl.md +5 -0
  59. data/docs/_docs/layering/merge.md +96 -0
  60. data/docs/_docs/layering/yaml.md +5 -0
  61. data/docs/_docs/learn/dsl.md +5 -0
  62. data/docs/_docs/learn/dsl/change.md +16 -0
  63. data/docs/_docs/learn/dsl/cluster.md +5 -0
  64. data/docs/_docs/learn/dsl/delete.md +32 -0
  65. data/docs/_docs/learn/dsl/deploy.md +66 -0
  66. data/docs/_docs/learn/dsl/install.md +5 -0
  67. data/docs/_docs/learn/dsl/new-project.md +34 -0
  68. data/docs/_docs/learn/dsl/next-steps.md +5 -0
  69. data/docs/_docs/learn/dsl/review-project.md +63 -0
  70. data/docs/_docs/learn/dsl/update.md +53 -0
  71. data/docs/_docs/learn/yaml.md +5 -0
  72. data/docs/_docs/learn/yaml/change.md +17 -0
  73. data/docs/_docs/learn/yaml/cluster.md +5 -0
  74. data/docs/_docs/learn/yaml/delete.md +32 -0
  75. data/docs/_docs/learn/yaml/deploy.md +67 -0
  76. data/docs/_docs/learn/yaml/install.md +5 -0
  77. data/docs/_docs/learn/yaml/new-project.md +37 -0
  78. data/docs/_docs/learn/yaml/next-steps.md +5 -0
  79. data/docs/_docs/learn/yaml/review-project.md +108 -0
  80. data/docs/_docs/learn/yaml/update.md +54 -0
  81. data/docs/_docs/next-steps.md +13 -0
  82. data/docs/_docs/patterns.md +7 -0
  83. data/docs/_docs/patterns/clock-web-worker.md +71 -0
  84. data/docs/_docs/resources.md +11 -0
  85. data/docs/_docs/resources/base.md +33 -0
  86. data/docs/_docs/resources/role.md +41 -0
  87. data/docs/_docs/resources/shared.md +36 -0
  88. data/docs/_docs/yaml.md +41 -0
  89. data/docs/_includes/commands.html +131 -0
  90. data/docs/_includes/content.html +25 -0
  91. data/docs/_includes/dsl/methods.md +1 -0
  92. data/docs/_includes/dsl/rolling_deployment.md +1 -0
  93. data/docs/_includes/dsl/suffix_hash.md +8 -0
  94. data/docs/_includes/example.html +12 -0
  95. data/docs/_includes/footer.html +37 -0
  96. data/docs/_includes/google_analytics.html +10 -0
  97. data/docs/_includes/header.html +31 -0
  98. data/docs/_includes/intro/install.md +15 -0
  99. data/docs/_includes/js.html +3 -0
  100. data/docs/_includes/kubes-steps.md +3 -0
  101. data/docs/_includes/layering/layers.md +64 -0
  102. data/docs/_includes/learn/cluster.md +22 -0
  103. data/docs/_includes/learn/next-steps.md +6 -0
  104. data/docs/_includes/learn/review.md +27 -0
  105. data/docs/_includes/learn/start.md +3 -0
  106. data/docs/_includes/reference.md +3 -0
  107. data/docs/_includes/sidebar.html +118 -0
  108. data/docs/_layouts/default.html +35 -0
  109. data/docs/_reference/kubes-apply.md +24 -0
  110. data/docs/_reference/kubes-clean.md +22 -0
  111. data/docs/_reference/kubes-compile.md +22 -0
  112. data/docs/_reference/kubes-completion.md +42 -0
  113. data/docs/_reference/kubes-completion_script.md +25 -0
  114. data/docs/_reference/kubes-delete.md +23 -0
  115. data/docs/_reference/kubes-deploy.md +35 -0
  116. data/docs/_reference/kubes-docker-build.md +20 -0
  117. data/docs/_reference/kubes-docker-help.md +15 -0
  118. data/docs/_reference/kubes-docker-push.md +20 -0
  119. data/docs/_reference/kubes-docker.md +25 -0
  120. data/docs/_reference/kubes-init.md +26 -0
  121. data/docs/_reference/kubes-version.md +21 -0
  122. data/docs/_sass/bootstrap-overrides.scss +17 -0
  123. data/docs/_sass/buttons.scss +62 -0
  124. data/docs/_sass/caret.scss +39 -0
  125. data/docs/_sass/content.scss +21 -0
  126. data/docs/_sass/cta.scss +39 -0
  127. data/docs/_sass/default.scss +103 -0
  128. data/docs/_sass/footer.scss +66 -0
  129. data/docs/_sass/masthead.scss +77 -0
  130. data/docs/_sass/mixins.scss +79 -0
  131. data/docs/_sass/sidebar.scss +107 -0
  132. data/docs/_sass/syntax.scss +89 -0
  133. data/docs/_sass/table.scss +30 -0
  134. data/docs/_sass/theme.scss +292 -0
  135. data/docs/_sass/variables.scss +24 -0
  136. data/docs/bin/build +4 -0
  137. data/docs/bin/rerun +2 -0
  138. data/docs/bin/web +8 -0
  139. data/docs/css/main.scss +24 -0
  140. data/docs/docs.md +7 -0
  141. data/docs/getting-started.md +12 -0
  142. data/docs/img/logos/boltops-logo-full.png +0 -0
  143. data/docs/img/logos/boltops-logo.png +0 -0
  144. data/docs/img/logos/filler-logo.png +0 -0
  145. data/docs/img/logos/kubes-black.png +0 -0
  146. data/docs/img/logos/kubes-sign.png +0 -0
  147. data/docs/index.html +34 -0
  148. data/docs/js/app.js +39414 -0
  149. data/docs/opal/app.rb +16 -0
  150. data/docs/opal/pager.rb +90 -0
  151. data/docs/opal/sidebar.rb +94 -0
  152. data/docs/opal/sidebar/expander.rb +51 -0
  153. data/docs/reference.md +15 -0
  154. data/docs/support.md +19 -0
  155. data/docs/vendor/bootstrap/css/bootstrap-grid.css +3719 -0
  156. data/docs/vendor/bootstrap/css/bootstrap-grid.css.map +1 -0
  157. data/docs/vendor/bootstrap/css/bootstrap-grid.min.css +7 -0
  158. data/docs/vendor/bootstrap/css/bootstrap-grid.min.css.map +1 -0
  159. data/docs/vendor/bootstrap/css/bootstrap-reboot.css +331 -0
  160. data/docs/vendor/bootstrap/css/bootstrap-reboot.css.map +1 -0
  161. data/docs/vendor/bootstrap/css/bootstrap-reboot.min.css +8 -0
  162. data/docs/vendor/bootstrap/css/bootstrap-reboot.min.css.map +1 -0
  163. data/docs/vendor/bootstrap/css/bootstrap.css +10038 -0
  164. data/docs/vendor/bootstrap/css/bootstrap.css.map +1 -0
  165. data/docs/vendor/bootstrap/css/bootstrap.min.css +7 -0
  166. data/docs/vendor/bootstrap/css/bootstrap.min.css.map +1 -0
  167. data/docs/vendor/bootstrap/js/bootstrap.bundle.js +7013 -0
  168. data/docs/vendor/bootstrap/js/bootstrap.bundle.js.map +1 -0
  169. data/docs/vendor/bootstrap/js/bootstrap.bundle.min.js +7 -0
  170. data/docs/vendor/bootstrap/js/bootstrap.bundle.min.js.map +1 -0
  171. data/docs/vendor/bootstrap/js/bootstrap.js +4435 -0
  172. data/docs/vendor/bootstrap/js/bootstrap.js.map +1 -0
  173. data/docs/vendor/bootstrap/js/bootstrap.min.js +7 -0
  174. data/docs/vendor/bootstrap/js/bootstrap.min.js.map +1 -0
  175. data/docs/vendor/font-awesome/css/font-awesome.css +2337 -0
  176. data/docs/vendor/font-awesome/css/font-awesome.min.css +4 -0
  177. data/docs/vendor/font-awesome/fonts/FontAwesome.otf +0 -0
  178. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  179. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
  180. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  181. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  182. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  183. data/docs/vendor/font-awesome/less/animated.less +34 -0
  184. data/docs/vendor/font-awesome/less/bordered-pulled.less +25 -0
  185. data/docs/vendor/font-awesome/less/core.less +12 -0
  186. data/docs/vendor/font-awesome/less/fixed-width.less +6 -0
  187. data/docs/vendor/font-awesome/less/font-awesome.less +18 -0
  188. data/docs/vendor/font-awesome/less/icons.less +789 -0
  189. data/docs/vendor/font-awesome/less/larger.less +13 -0
  190. data/docs/vendor/font-awesome/less/list.less +19 -0
  191. data/docs/vendor/font-awesome/less/mixins.less +60 -0
  192. data/docs/vendor/font-awesome/less/path.less +15 -0
  193. data/docs/vendor/font-awesome/less/rotated-flipped.less +20 -0
  194. data/docs/vendor/font-awesome/less/screen-reader.less +5 -0
  195. data/docs/vendor/font-awesome/less/stacked.less +20 -0
  196. data/docs/vendor/font-awesome/less/variables.less +799 -0
  197. data/docs/vendor/font-awesome/scss/_animated.scss +34 -0
  198. data/docs/vendor/font-awesome/scss/_bordered-pulled.scss +25 -0
  199. data/docs/vendor/font-awesome/scss/_core.scss +12 -0
  200. data/docs/vendor/font-awesome/scss/_fixed-width.scss +6 -0
  201. data/docs/vendor/font-awesome/scss/_icons.scss +789 -0
  202. data/docs/vendor/font-awesome/scss/_larger.scss +13 -0
  203. data/docs/vendor/font-awesome/scss/_list.scss +19 -0
  204. data/docs/vendor/font-awesome/scss/_mixins.scss +60 -0
  205. data/docs/vendor/font-awesome/scss/_path.scss +15 -0
  206. data/docs/vendor/font-awesome/scss/_rotated-flipped.scss +20 -0
  207. data/docs/vendor/font-awesome/scss/_screen-reader.scss +5 -0
  208. data/docs/vendor/font-awesome/scss/_stacked.scss +20 -0
  209. data/docs/vendor/font-awesome/scss/_variables.scss +799 -0
  210. data/docs/vendor/font-awesome/scss/font-awesome.scss +18 -0
  211. data/docs/vendor/jquery/jquery.js +10598 -0
  212. data/docs/vendor/jquery/jquery.min.js +2 -0
  213. data/docs/vendor/jquery/jquery.min.map +1 -0
  214. data/docs/vendor/jquery/jquery.slim.js +8495 -0
  215. data/docs/vendor/jquery/jquery.slim.min.js +2 -0
  216. data/docs/vendor/jquery/jquery.slim.min.map +1 -0
  217. data/docs/vendor/simple-line-icons/css/simple-line-icons.css +778 -0
  218. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.eot +0 -0
  219. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.svg +200 -0
  220. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.ttf +0 -0
  221. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.woff +0 -0
  222. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.woff2 +0 -0
  223. data/docs/vendor/simple-line-icons/less/simple-line-icons.less +982 -0
  224. data/docs/vendor/simple-line-icons/scss/simple-line-icons.scss +979 -0
  225. data/exe/kubes +14 -0
  226. data/kubes.gemspec +29 -19
  227. data/lib/kubes.rb +21 -1
  228. data/lib/kubes/args/custom.rb +30 -0
  229. data/lib/kubes/args/dsl.rb +14 -0
  230. data/lib/kubes/auth.rb +21 -0
  231. data/lib/kubes/auth/ecr.rb +55 -0
  232. data/lib/kubes/autoloader.rb +21 -0
  233. data/lib/kubes/aws_services.rb +14 -0
  234. data/lib/kubes/cli.rb +93 -0
  235. data/lib/kubes/cli/apply.rb +9 -0
  236. data/lib/kubes/cli/base.rb +9 -0
  237. data/lib/kubes/cli/build.rb +8 -0
  238. data/lib/kubes/cli/clean.rb +9 -0
  239. data/lib/kubes/cli/compile.rb +8 -0
  240. data/lib/kubes/cli/delete.rb +11 -0
  241. data/lib/kubes/cli/deploy.rb +13 -0
  242. data/lib/kubes/cli/describe.rb +8 -0
  243. data/lib/kubes/cli/docker.rb +20 -0
  244. data/lib/kubes/cli/get.rb +8 -0
  245. data/lib/kubes/cli/help.rb +11 -0
  246. data/lib/kubes/cli/help/completion.md +20 -0
  247. data/lib/kubes/cli/help/completion_script.md +3 -0
  248. data/lib/kubes/cli/help/deploy.md +10 -0
  249. data/lib/kubes/cli/init.rb +69 -0
  250. data/lib/kubes/cli/sequence.rb +27 -0
  251. data/lib/kubes/command.rb +100 -0
  252. data/lib/kubes/compiler.rb +71 -0
  253. data/lib/kubes/compiler/decorator.rb +17 -0
  254. data/lib/kubes/compiler/decorator/base.rb +16 -0
  255. data/lib/kubes/compiler/decorator/compile.rb +12 -0
  256. data/lib/kubes/compiler/decorator/resources/base.rb +13 -0
  257. data/lib/kubes/compiler/decorator/resources/container.rb +76 -0
  258. data/lib/kubes/compiler/decorator/resources/container/mapping.rb +28 -0
  259. data/lib/kubes/compiler/decorator/resources/deployment.rb +10 -0
  260. data/lib/kubes/compiler/decorator/resources/pod.rb +10 -0
  261. data/lib/kubes/compiler/decorator/resources/secret.rb +23 -0
  262. data/lib/kubes/compiler/decorator/write.rb +14 -0
  263. data/lib/kubes/compiler/dsl/core/base.rb +27 -0
  264. data/lib/kubes/compiler/dsl/core/blocks.rb +55 -0
  265. data/lib/kubes/compiler/dsl/core/fields.rb +78 -0
  266. data/lib/kubes/compiler/dsl/core/files.rb +28 -0
  267. data/lib/kubes/compiler/dsl/core/helpers.rb +19 -0
  268. data/lib/kubes/compiler/dsl/core/parser.rb +43 -0
  269. data/lib/kubes/compiler/dsl/syntax/backend_config.rb +10 -0
  270. data/lib/kubes/compiler/dsl/syntax/cluster_role.rb +4 -0
  271. data/lib/kubes/compiler/dsl/syntax/cluster_role_binding.rb +4 -0
  272. data/lib/kubes/compiler/dsl/syntax/config_map.rb +20 -0
  273. data/lib/kubes/compiler/dsl/syntax/daemon_set.rb +23 -0
  274. data/lib/kubes/compiler/dsl/syntax/deployment.rb +160 -0
  275. data/lib/kubes/compiler/dsl/syntax/ingress.rb +41 -0
  276. data/lib/kubes/compiler/dsl/syntax/managed_certificate.rb +18 -0
  277. data/lib/kubes/compiler/dsl/syntax/namespace.rb +13 -0
  278. data/lib/kubes/compiler/dsl/syntax/network_policy.rb +47 -0
  279. data/lib/kubes/compiler/dsl/syntax/pod.rb +81 -0
  280. data/lib/kubes/compiler/dsl/syntax/resource.rb +70 -0
  281. data/lib/kubes/compiler/dsl/syntax/role.rb +40 -0
  282. data/lib/kubes/compiler/dsl/syntax/role_binding.rb +43 -0
  283. data/lib/kubes/compiler/dsl/syntax/secret.rb +22 -0
  284. data/lib/kubes/compiler/dsl/syntax/service.rb +68 -0
  285. data/lib/kubes/compiler/dsl/syntax/service_account.rb +20 -0
  286. data/lib/kubes/compiler/layering.rb +39 -0
  287. data/lib/kubes/compiler/shared/helpers.rb +31 -0
  288. data/lib/kubes/compiler/strategy.rb +27 -0
  289. data/lib/kubes/compiler/strategy/base.rb +13 -0
  290. data/lib/kubes/compiler/strategy/dsl.rb +32 -0
  291. data/lib/kubes/compiler/strategy/erb.rb +42 -0
  292. data/lib/kubes/compiler/strategy/pass.rb +9 -0
  293. data/lib/kubes/compiler/strategy/result.rb +26 -0
  294. data/lib/kubes/compiler/util/normalize.rb +11 -0
  295. data/lib/kubes/compiler/util/yaml_dump.rb +23 -0
  296. data/lib/kubes/completer.rb +159 -0
  297. data/lib/kubes/completer/script.rb +6 -0
  298. data/lib/kubes/completer/script.sh +10 -0
  299. data/lib/kubes/config.rb +82 -0
  300. data/lib/kubes/core.rb +32 -0
  301. data/lib/kubes/docker/args/default.rb +39 -0
  302. data/lib/kubes/docker/base.rb +88 -0
  303. data/lib/kubes/docker/build.rb +22 -0
  304. data/lib/kubes/docker/push.rb +33 -0
  305. data/lib/kubes/hooks/builder.rb +41 -0
  306. data/lib/kubes/hooks/dsl.rb +19 -0
  307. data/lib/kubes/kubectl.rb +87 -0
  308. data/lib/kubes/kubectl/args/base.rb +12 -0
  309. data/lib/kubes/kubectl/args/kustomize.rb +28 -0
  310. data/lib/kubes/kubectl/args/standard.rb +32 -0
  311. data/lib/kubes/kubectl/batch.rb +49 -0
  312. data/lib/kubes/kubectl/decider.rb +15 -0
  313. data/lib/kubes/kubectl/kustomize.rb +13 -0
  314. data/lib/kubes/kubectl/ordering.rb +27 -0
  315. data/lib/kubes/logger.rb +26 -0
  316. data/lib/kubes/logging.rb +7 -0
  317. data/lib/kubes/util/consider.rb +9 -0
  318. data/lib/kubes/util/sh.rb +43 -0
  319. data/lib/kubes/util/sure.rb +17 -0
  320. data/lib/kubes/util/time.rb +14 -0
  321. data/lib/kubes/version.rb +1 -1
  322. data/lib/templates/base/.kubes/config.rb.tt +9 -0
  323. data/lib/templates/base/.kubes/config/env/dev.rb +6 -0
  324. data/lib/templates/base/.kubes/config/env/prod.rb +6 -0
  325. data/lib/templates/docker/Dockerfile +4 -0
  326. data/lib/templates/dsl/.kubes/resources/base/all.rb.tt +2 -0
  327. data/lib/templates/dsl/.kubes/resources/shared/namespace.rb.tt +2 -0
  328. data/lib/templates/dsl/.kubes/resources/web/deployment.rb +10 -0
  329. data/lib/templates/dsl/.kubes/resources/web/deployment/dev.rb +1 -0
  330. data/lib/templates/dsl/.kubes/resources/web/deployment/prod.rb +1 -0
  331. data/lib/templates/dsl/.kubes/resources/web/service.rb +8 -0
  332. data/lib/templates/yaml/.kubes/resources/base/all.yaml.tt +2 -0
  333. data/lib/templates/yaml/.kubes/resources/base/deployment.yaml.tt +11 -0
  334. data/lib/templates/yaml/.kubes/resources/shared/namespace.yaml.tt +6 -0
  335. data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +19 -0
  336. data/lib/templates/yaml/.kubes/resources/web/deployment/dev.yaml +2 -0
  337. data/lib/templates/yaml/.kubes/resources/web/deployment/prod.yaml +2 -0
  338. data/lib/templates/yaml/.kubes/resources/web/service.yaml.tt +14 -0
  339. data/spec/cli_spec.rb +8 -0
  340. data/spec/fixtures/artifacts/demo-web/deployment.yaml +26 -0
  341. data/spec/fixtures/artifacts/demo-web/service.yaml +16 -0
  342. data/spec/fixtures/blocks/deployments.rb +9 -0
  343. data/spec/fixtures/decorators/deployment/configMap/envFrom.yaml +27 -0
  344. data/spec/fixtures/decorators/deployment/configMap/valueFrom.yaml +30 -0
  345. data/spec/fixtures/decorators/deployment/configMap/volumes.yaml +34 -0
  346. data/spec/fixtures/decorators/deployment/secret/envFrom.yaml +27 -0
  347. data/spec/fixtures/decorators/deployment/secret/valueFrom.yaml +30 -0
  348. data/spec/fixtures/decorators/deployment/secret/volumes.yaml +34 -0
  349. data/spec/fixtures/decorators/pod/configMap/envFrom.yaml +12 -0
  350. data/spec/fixtures/decorators/pod/configMap/valueFrom.yaml +16 -0
  351. data/spec/fixtures/decorators/pod/configMap/volumes.yaml +19 -0
  352. data/spec/fixtures/decorators/pod/secret/envFrom.yaml +12 -0
  353. data/spec/fixtures/decorators/pod/secret/valueFrom.yaml +16 -0
  354. data/spec/fixtures/decorators/pod/secret/volumes.yaml +19 -0
  355. data/spec/fixtures/deployments/minimum.rb +5 -0
  356. data/spec/fixtures/deployments/props.rb +7 -0
  357. data/spec/fixtures/deployments/setter/container.rb +11 -0
  358. data/spec/fixtures/deployments/setter/containers.rb +14 -0
  359. data/spec/fixtures/deployments/setter/metadata.rb +15 -0
  360. data/spec/fixtures/deployments/setter/sidecar.rb +12 -0
  361. data/spec/fixtures/deployments/setter/spec.rb +10 -0
  362. data/spec/fixtures/multiple-files/deployment-1.rb +4 -0
  363. data/spec/fixtures/multiple-files/deployment-2.rb +4 -0
  364. data/spec/fixtures/project/.gitignore +1 -0
  365. data/spec/fixtures/project/.kubes/resources/deployment.rb +32 -0
  366. data/spec/fixtures/project/.kubes/resources/foobar.rb +0 -0
  367. data/spec/fixtures/project/.kubes/resources/service.rb +3 -0
  368. data/spec/fixtures/services/minimum.rb +3 -0
  369. data/spec/fixtures/syntax/network_policy.rb +3 -0
  370. data/spec/fixtures/syntax/pod.rb +1 -0
  371. data/spec/kubes/compiler/decorator/resources/deployment_spec.rb +92 -0
  372. data/spec/kubes/compiler/decorator/resources/pod_spec.rb +92 -0
  373. data/spec/kubes/compiler/strategy/dsl_spec.rb +36 -0
  374. data/spec/kubes/compiler_spec.rb +10 -0
  375. data/spec/kubes/dsl/daemon_set.rb +11 -0
  376. data/spec/kubes/dsl/deployment_spec.rb +60 -0
  377. data/spec/kubes/dsl/network_policy_spec.rb +14 -0
  378. data/spec/kubes/dsl/pod_spec.rb +11 -0
  379. data/spec/kubes/dsl/service_spec.rb +12 -0
  380. data/spec/kubes/kubectl/batch_spec.rb +24 -0
  381. data/spec/spec_helper.rb +34 -0
  382. metadata +607 -22
  383. data/bin/console +0 -14
  384. data/bin/setup +0 -8
@@ -0,0 +1,6 @@
1
+ class Kubes::Completer::Script
2
+ def self.generate
3
+ bash_script = File.expand_path("script.sh", File.dirname(__FILE__))
4
+ puts "source #{bash_script}"
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ _kubes() {
2
+ COMPREPLY=()
3
+ local word="${COMP_WORDS[COMP_CWORD]}"
4
+ local words=("${COMP_WORDS[@]}")
5
+ unset words[0]
6
+ local completion=$(kubes completion ${words[@]})
7
+ COMPREPLY=( $(compgen -W "$completion" -- "$word") )
8
+ }
9
+
10
+ complete -F _kubes kubes
@@ -0,0 +1,82 @@
1
+ module Kubes
2
+ class Config
3
+ include Singleton
4
+ include DslEvaluator
5
+
6
+ attr_reader :config
7
+ def initialize
8
+ @config = defaults
9
+ end
10
+
11
+ def defaults
12
+ config = ActiveSupport::OrderedOptions.new
13
+
14
+ config.state = ActiveSupport::OrderedOptions.new
15
+ config.state.docker_image_path = "#{Kubes.root}/.kubes/state/docker_image.txt"
16
+
17
+ config.logger = Logger.new($stdout)
18
+ config.logger.level = ENV['KUBES_LOG_LEVEL'] || :info
19
+
20
+ # Auto-switching options
21
+ config.kubectl = ActiveSupport::OrderedOptions.new
22
+ config.kubectl.context = nil
23
+ config.kubectl.context_keep = true # after switching context keep it
24
+ config.kubectl.exit_on_fail = nil # whether or not continue if the kubectl command fails
25
+
26
+ config.kubectl.exit_on_fail_for_apply = true # whether or not continue if the kubectl apply command fails
27
+ config.kubectl.exit_on_fail_for_delete = false # whether or not continue if the kubectl delete command fails
28
+ # Note: not using config.kubectl.delete.exit_on_fail because delete a method internal to ActiveSupport::OrderedOptions
29
+
30
+ config.kubectl.order = ActiveSupport::OrderedOptions.new
31
+ config.kubectl.order.roles = role_order
32
+ config.kubectl.order.kinds = kind_order
33
+
34
+ config.suffix_hash = true # append suffix has to ConfigMap and Secret
35
+
36
+ config.repo = nil # expected to be set by .kubes/config.rb
37
+
38
+ config
39
+ end
40
+
41
+ # Create shared resources first
42
+ def role_order
43
+ %w[
44
+ common
45
+ shared
46
+ ]
47
+ end
48
+
49
+ # Create resources in specific order so dependent resources are available
50
+ def kind_order
51
+ %w[
52
+ Namespace
53
+ StorageClass
54
+ CustomResourceDefinition
55
+ MutatingWebhookConfiguration
56
+ ServiceAccount
57
+ PodSecurityPolicy
58
+ Role
59
+ ClusterRole
60
+ RoleBinding
61
+ ClusterRoleBinding
62
+ ConfigMap
63
+ Secret
64
+ Service
65
+ LimitRange
66
+ Deployment
67
+ StatefulSet
68
+ CronJob
69
+ PodDisruptionBudget
70
+ ]
71
+ end
72
+
73
+ def configure
74
+ yield(@config)
75
+ end
76
+
77
+ def load_configs
78
+ evaluate_file(".kubes/config.rb")
79
+ evaluate_file(".kubes/config/env/#{Kubes.env}.rb")
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,32 @@
1
+ module Kubes
2
+ module Core
3
+ extend Memoist
4
+
5
+ def env
6
+ ENV['KUBES_ENV'] || "dev"
7
+ end
8
+
9
+ def root
10
+ ENV['KUBES_ROOT'] || Dir.pwd
11
+ end
12
+
13
+ def configure(&block)
14
+ Config.instance.configure(&block)
15
+ end
16
+
17
+ def config
18
+ Config.instance.load_configs
19
+ Config.instance.config
20
+ end
21
+ memoize :config
22
+
23
+ def logger
24
+ config.logger
25
+ end
26
+ memoize :logger
27
+
28
+ def kustomize?
29
+ Kubectl::Kustomize.detect?
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,39 @@
1
+ module Kubes::Docker::Args
2
+ class Default
3
+ def initialize(name, image_name, options={})
4
+ @name, @image_name, @options = name.to_s, image_name, options
5
+ @dockerfile = "Dockerfile"
6
+ end
7
+
8
+ def args
9
+ case @name
10
+ when "build"
11
+ build_args
12
+ when "push"
13
+ [@image_name]
14
+ else
15
+ []
16
+ end
17
+ end
18
+
19
+ def build_args
20
+ ["-t #{@image_name} -f #{@dockerfile} ."]
21
+ end
22
+
23
+
24
+ private
25
+ def common_args
26
+ %w[--recursive -f ]
27
+ end
28
+
29
+ def resource_path
30
+ [".kubes/output", @options[:role], resource].compact.join('/')
31
+ end
32
+
33
+ def resource
34
+ return unless r = @options[:resource] # intentional assignment
35
+ r.include?(".yaml") ? r : "#{r}.yaml"
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,88 @@
1
+ module Kubes::Docker
2
+ class Base
3
+ extend Memoist
4
+ include Kubes::Logging
5
+ include Kubes::Util::Sh
6
+
7
+ def initialize(options={})
8
+ @options = options
9
+ @name = self.class.name.split('::').last.underscore
10
+ end
11
+
12
+ def run_hooks(name, &block)
13
+ hooks = Kubes::Hooks::Builder.new(name, "#{Kubes.root}/.kubes/config/docker/hooks.rb")
14
+ hooks.build # build hooks
15
+ hooks.run_hooks(&block)
16
+ end
17
+
18
+ def args
19
+ # base at end in case of redirection. IE: command > /path
20
+ custom.args + default.args
21
+ end
22
+
23
+ def custom
24
+ custom = Kubes::Args::Custom.new(@name, "#{Kubes.root}/.kubes/config/docker/args.rb")
25
+ custom.build
26
+ custom
27
+ end
28
+ memoize :custom
29
+
30
+ def default
31
+ Args::Default.new(@name, image_name, @options)
32
+ end
33
+ memoize :default
34
+
35
+ @@image_name = nil
36
+ def reserve_image_name
37
+ @@image_name = generate_name
38
+ end
39
+
40
+ # Store this in a file because this name gets reference in other tasks later
41
+ # and we want the image name to stay the same when the commands are run separate
42
+ # in different processes. So we store the state in a file.
43
+ # Only when a new docker build command gets run will the image name state be updated.
44
+ def store_image_name
45
+ FileUtils.mkdir_p(File.dirname(image_state_path))
46
+ IO.write(image_state_path, @@image_name)
47
+ end
48
+
49
+ # output can get entirely wiped so dont use that folder
50
+ def image_state_path
51
+ Kubes.config.state.docker_image_path
52
+ end
53
+
54
+ # full_image - Includes the tag. Examples:
55
+ # 123456789.dkr.ecr.us-west-2.amazonaws.com/myapp:kubes-2018-04-20T09-29-08-b7d51df
56
+ # tongueroo/demo-kubes:kubes-2018-04-20T09-29-08-b7d51df
57
+ def image_name
58
+ return generate_name if @options[:generate]
59
+ return @@image_name if @@image_name
60
+ return "tongueroo/demo-kubes:kubes-12345678" if ENV['TEST']
61
+
62
+ unless File.exist?(image_state_path)
63
+ puts "Unable to find #{image_state_path} which contains the last docker image name built with kubes build. Please run `kubes docker build` first."
64
+ exit 1
65
+ end
66
+ IO.read(image_state_path).strip
67
+ end
68
+
69
+ @@timestamp = Time.now.strftime('%Y-%m-%dT%H-%M-%S')
70
+ def generate_name
71
+ # IE: tongueroo/demo:kubes-
72
+ ["#{repo}:kubes-#{@@timestamp}", git_sha].compact.join('-')
73
+ end
74
+
75
+ def repo
76
+ Kubes.config.repo
77
+ end
78
+
79
+ def git_sha
80
+ return @git_sha if @git_sha
81
+ # always call this and dont use the execute method because of the noop option
82
+ git_installed = system("type git > /dev/null 2>&1")
83
+ return unless git_installed && File.exist?("#{Kubes.root}/.git")
84
+ @git_sha = `cd #{Kubes.root} && git rev-parse --short HEAD`
85
+ @git_sha.strip!
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,22 @@
1
+ module Kubes::Docker
2
+ class Build < Base
3
+ def run
4
+ reserve_image_name
5
+ build
6
+ store_image_name
7
+ end
8
+
9
+ def build
10
+ # Dockerfile is also used in args/default.rb, will have to combine if Dockerfile is made configurable
11
+ unless File.exist?("Dockerfile")
12
+ logger.error "ERROR: The Dockerfile does not exist. Cannot build the docker image without a Dockerfile".color(:red)
13
+ exit 1
14
+ end
15
+ params = args.flatten.join(' ')
16
+ command = "docker build #{params}"
17
+ run_hooks "build" do
18
+ sh(command)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ module Kubes::Docker
2
+ class Push < Base
3
+ include Kubes::Logging
4
+ include Kubes::Util::Time
5
+
6
+ def run
7
+ update_auth_token
8
+ start_time = Time.now
9
+ message = "Pushed #{image_name} docker image."
10
+ if @options[:noop]
11
+ message = "NOOP #{message}"
12
+ else
13
+ push
14
+ end
15
+ took = Time.now - start_time
16
+ message << "\nDocker push took #{pretty_time(took)}.".color(:green)
17
+ logger.info message
18
+ end
19
+
20
+ def push
21
+ params = args.flatten.join(' ')
22
+ command = "docker push #{params}"
23
+ run_hooks "push" do
24
+ sh(command)
25
+ end
26
+ end
27
+
28
+ def update_auth_token
29
+ auth = Kubes::Auth.new(image_name)
30
+ auth.run
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,41 @@
1
+ module Kubes::Hooks
2
+ class Builder
3
+ extend Memoist
4
+ include Dsl
5
+ include DslEvaluator
6
+ include Kubes::Logging
7
+ include Kubes::Util::Sh
8
+
9
+ attr_accessor :name
10
+ def initialize(name, file)
11
+ @name = name.to_s
12
+ @file = file # IE: .kubes/config/kubectl/hooks.rb
13
+ @hooks = {before: {}, after: {}}
14
+ end
15
+
16
+ def build
17
+ return @hooks unless File.exist?(@file)
18
+ evaluate_file(@file)
19
+ @hooks.deep_stringify_keys!
20
+ end
21
+ memoize :build
22
+
23
+ def run_hooks
24
+ build
25
+ run_hook("before")
26
+ yield if block_given?
27
+ run_hook("after")
28
+ end
29
+
30
+ def run_hook(type)
31
+ execute = @hooks.dig(type, @name.to_s, "execute")
32
+ return unless execute
33
+
34
+ exit_on_fail = @hooks.dig(type, @name.to_s, "exit_on_fail")
35
+ exit_on_fail = exit_on_fail.nil? ? true : exit_on_fail
36
+
37
+ logger.info "Running #{type} hook"
38
+ sh(execute, exit_on_fail: exit_on_fail)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,19 @@
1
+ module Kubes::Hooks
2
+ module Dsl
3
+ def before(*commands, **props)
4
+ commands.each do |name|
5
+ each_hook(:before, name, props)
6
+ end
7
+ end
8
+
9
+ def after(*commands, **props)
10
+ commands.each do |name|
11
+ each_hook(:after, name, props)
12
+ end
13
+ end
14
+
15
+ def each_hook(type, name, props={})
16
+ @hooks[type][name] = props
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,87 @@
1
+ module Kubes
2
+ class Kubectl
3
+ extend Memoist
4
+ include Kubes::Util::Sh
5
+
6
+ def initialize(name, options={})
7
+ @name, @options = name, options
8
+ end
9
+
10
+ def run
11
+ validate!
12
+ params = args.flatten.join(' ')
13
+ command = "kubectl #{@name} #{params}" # @name: apply or delete
14
+ options = {}
15
+ options[:exit_on_fail] = exit_on_fail unless exit_on_fail.nil?
16
+ switch_context do
17
+ run_hooks(@name) do
18
+ sh(command, options)
19
+ end
20
+ end
21
+ end
22
+
23
+ # Useful for kustomize mode
24
+ def validate!
25
+ return true unless Kubes.kustomize?
26
+
27
+ unless @options[:role]
28
+ logger.error "Missing argument: A folder must be provided when using kustomization.yaml files".color(:red)
29
+ logger.info "Please provide a folder"
30
+ exit 1
31
+ end
32
+ end
33
+
34
+ def exit_on_fail
35
+ kubectl = Kubes.config.kubectl
36
+ exit_on_fail = kubectl.send("exit_on_fail_for_#{@name}")
37
+ exit_on_fail.nil? ? kubectl.exit_on_fail : exit_on_fail
38
+ end
39
+
40
+ def switch_context(&block)
41
+ kubectl = Kubes.config.kubectl
42
+ context = kubectl.context
43
+ if context
44
+ previous_context = capture("kubectl config current-context")
45
+ sh("kubectl config use-context #{context}", mute: true)
46
+ result = block.call
47
+ if !previous_context.blank? && !kubectl.context_keep
48
+ sh("kubectl config use-context #{previous_context}", mute: true)
49
+ end
50
+ result
51
+ else
52
+ block.call
53
+ end
54
+ end
55
+
56
+ def run_hooks(name, &block)
57
+ hooks = Kubes::Hooks::Builder.new(name, "#{Kubes.root}/.kubes/config/kubectl/hooks.rb")
58
+ hooks.build # build hooks
59
+ hooks.run_hooks(&block)
60
+ end
61
+
62
+ def args
63
+ # base at end in case of redirection. IE: command > /path
64
+ custom.args + default.args
65
+ end
66
+
67
+ def custom
68
+ custom = Kubes::Args::Custom.new(@name, "#{Kubes.root}/.kubes/config/kubectl/args.rb")
69
+ custom.build
70
+ custom
71
+ end
72
+ memoize :custom
73
+
74
+ def default
75
+ klass = Kubes.kustomize? ? Args::Kustomize : Args::Standard
76
+ klass.new(@name, @options)
77
+ end
78
+ memoize :default
79
+
80
+ class << self
81
+ def run(name, options={})
82
+ new(name, options).run
83
+ end
84
+ end
85
+ end
86
+ end
87
+