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.
Files changed (379) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +15 -7
  3. data/.rspec +3 -0
  4. data/CHANGELOG.md +10 -0
  5. data/Gemfile +3 -1
  6. data/Guardfile +19 -0
  7. data/LICENSE.txt +201 -0
  8. data/README.md +46 -18
  9. data/Rakefile +13 -1
  10. data/docs/.gitignore +5 -0
  11. data/docs/CNAME +1 -0
  12. data/docs/Gemfile +16 -0
  13. data/docs/LICENSE +201 -0
  14. data/docs/Procfile +2 -0
  15. data/docs/README.md +24 -0
  16. data/docs/Rakefile +38 -0
  17. data/docs/_config.yml +71 -0
  18. data/docs/_docs/auto-context.md +47 -0
  19. data/docs/_docs/config.md +9 -0
  20. data/docs/_docs/config/docker.md +70 -0
  21. data/docs/_docs/config/env.md +58 -0
  22. data/docs/_docs/config/kubectl.md +61 -0
  23. data/docs/_docs/contributing.md +98 -0
  24. data/docs/_docs/dsl.md +66 -0
  25. data/docs/_docs/dsl/multiple-resources.md +114 -0
  26. data/docs/_docs/dsl/resources.md +12 -0
  27. data/docs/_docs/dsl/resources/backend_config.md +45 -0
  28. data/docs/_docs/dsl/resources/config_map.md +84 -0
  29. data/docs/_docs/dsl/resources/daemon_set.md +58 -0
  30. data/docs/_docs/dsl/resources/deployment.md +142 -0
  31. data/docs/_docs/dsl/resources/generic.md +58 -0
  32. data/docs/_docs/dsl/resources/ingress.md +103 -0
  33. data/docs/_docs/dsl/resources/managed_certificate.md +39 -0
  34. data/docs/_docs/dsl/resources/namespace.md +34 -0
  35. data/docs/_docs/dsl/resources/network_policy.md +45 -0
  36. data/docs/_docs/dsl/resources/pod.md +82 -0
  37. data/docs/_docs/dsl/resources/role.md +44 -0
  38. data/docs/_docs/dsl/resources/role_binding.md +55 -0
  39. data/docs/_docs/dsl/resources/secret.md +87 -0
  40. data/docs/_docs/dsl/resources/service.md +60 -0
  41. data/docs/_docs/dsl/resources/service_account.md +37 -0
  42. data/docs/_docs/extra-env.md +23 -0
  43. data/docs/_docs/extra-env/dsl.md +86 -0
  44. data/docs/_docs/extra-env/yaml.md +67 -0
  45. data/docs/_docs/helpers.md +18 -0
  46. data/docs/_docs/intro.md +15 -0
  47. data/docs/_docs/intro/concepts.md +37 -0
  48. data/docs/_docs/intro/how-kubes-works.md +29 -0
  49. data/docs/_docs/intro/install.md +6 -0
  50. data/docs/_docs/intro/ordering.md +63 -0
  51. data/docs/_docs/intro/ordering/custom.md +25 -0
  52. data/docs/_docs/intro/structure.md +43 -0
  53. data/docs/_docs/kustomize.md +54 -0
  54. data/docs/_docs/layering.md +8 -0
  55. data/docs/_docs/layering/dsl.md +5 -0
  56. data/docs/_docs/layering/merge.md +96 -0
  57. data/docs/_docs/layering/yaml.md +5 -0
  58. data/docs/_docs/learn/dsl.md +5 -0
  59. data/docs/_docs/learn/dsl/change.md +16 -0
  60. data/docs/_docs/learn/dsl/cluster.md +5 -0
  61. data/docs/_docs/learn/dsl/delete.md +30 -0
  62. data/docs/_docs/learn/dsl/deploy.md +61 -0
  63. data/docs/_docs/learn/dsl/install.md +5 -0
  64. data/docs/_docs/learn/dsl/new-project.md +33 -0
  65. data/docs/_docs/learn/dsl/next-steps.md +5 -0
  66. data/docs/_docs/learn/dsl/review-project.md +52 -0
  67. data/docs/_docs/learn/dsl/update.md +53 -0
  68. data/docs/_docs/learn/yaml.md +5 -0
  69. data/docs/_docs/learn/yaml/change.md +17 -0
  70. data/docs/_docs/learn/yaml/cluster.md +5 -0
  71. data/docs/_docs/learn/yaml/delete.md +30 -0
  72. data/docs/_docs/learn/yaml/deploy.md +62 -0
  73. data/docs/_docs/learn/yaml/install.md +5 -0
  74. data/docs/_docs/learn/yaml/new-project.md +36 -0
  75. data/docs/_docs/learn/yaml/next-steps.md +5 -0
  76. data/docs/_docs/learn/yaml/review-project.md +97 -0
  77. data/docs/_docs/learn/yaml/update.md +54 -0
  78. data/docs/_docs/next-steps.md +13 -0
  79. data/docs/_docs/patterns.md +7 -0
  80. data/docs/_docs/patterns/clock-web-worker.md +71 -0
  81. data/docs/_docs/resources.md +11 -0
  82. data/docs/_docs/resources/base.md +33 -0
  83. data/docs/_docs/resources/role.md +41 -0
  84. data/docs/_docs/resources/shared.md +36 -0
  85. data/docs/_docs/yaml.md +46 -0
  86. data/docs/_includes/commands.html +131 -0
  87. data/docs/_includes/content.html +25 -0
  88. data/docs/_includes/dsl/methods.md +1 -0
  89. data/docs/_includes/dsl/rolling_deployment.md +1 -0
  90. data/docs/_includes/dsl/suffix_hash.md +8 -0
  91. data/docs/_includes/example.html +12 -0
  92. data/docs/_includes/footer.html +37 -0
  93. data/docs/_includes/google_analytics.html +10 -0
  94. data/docs/_includes/header.html +31 -0
  95. data/docs/_includes/intro/install.md +15 -0
  96. data/docs/_includes/js.html +3 -0
  97. data/docs/_includes/kubes-steps.md +3 -0
  98. data/docs/_includes/layering/layers.md +64 -0
  99. data/docs/_includes/learn/cluster.md +22 -0
  100. data/docs/_includes/learn/next-steps.md +6 -0
  101. data/docs/_includes/learn/review.md +25 -0
  102. data/docs/_includes/learn/start.md +3 -0
  103. data/docs/_includes/reference.md +3 -0
  104. data/docs/_includes/sidebar.html +113 -0
  105. data/docs/_layouts/default.html +35 -0
  106. data/docs/_reference/kubes-apply.md +24 -0
  107. data/docs/_reference/kubes-clean.md +22 -0
  108. data/docs/_reference/kubes-compile.md +22 -0
  109. data/docs/_reference/kubes-completion.md +42 -0
  110. data/docs/_reference/kubes-completion_script.md +25 -0
  111. data/docs/_reference/kubes-delete.md +23 -0
  112. data/docs/_reference/kubes-deploy.md +35 -0
  113. data/docs/_reference/kubes-docker-build.md +20 -0
  114. data/docs/_reference/kubes-docker-help.md +15 -0
  115. data/docs/_reference/kubes-docker-push.md +20 -0
  116. data/docs/_reference/kubes-docker.md +25 -0
  117. data/docs/_reference/kubes-init.md +26 -0
  118. data/docs/_reference/kubes-version.md +21 -0
  119. data/docs/_sass/bootstrap-overrides.scss +17 -0
  120. data/docs/_sass/buttons.scss +62 -0
  121. data/docs/_sass/caret.scss +39 -0
  122. data/docs/_sass/content.scss +21 -0
  123. data/docs/_sass/cta.scss +39 -0
  124. data/docs/_sass/default.scss +103 -0
  125. data/docs/_sass/footer.scss +66 -0
  126. data/docs/_sass/masthead.scss +77 -0
  127. data/docs/_sass/mixins.scss +79 -0
  128. data/docs/_sass/sidebar.scss +107 -0
  129. data/docs/_sass/syntax.scss +89 -0
  130. data/docs/_sass/table.scss +30 -0
  131. data/docs/_sass/theme.scss +292 -0
  132. data/docs/_sass/variables.scss +24 -0
  133. data/docs/bin/build +4 -0
  134. data/docs/bin/rerun +2 -0
  135. data/docs/bin/web +8 -0
  136. data/docs/css/main.scss +24 -0
  137. data/docs/docs.md +7 -0
  138. data/docs/getting-started.md +12 -0
  139. data/docs/img/logos/boltops-logo-full.png +0 -0
  140. data/docs/img/logos/boltops-logo.png +0 -0
  141. data/docs/img/logos/filler-logo.png +0 -0
  142. data/docs/img/logos/kubes-black.png +0 -0
  143. data/docs/img/logos/kubes-sign.png +0 -0
  144. data/docs/index.html +34 -0
  145. data/docs/js/app.js +39414 -0
  146. data/docs/opal/app.rb +16 -0
  147. data/docs/opal/pager.rb +90 -0
  148. data/docs/opal/sidebar.rb +94 -0
  149. data/docs/opal/sidebar/expander.rb +51 -0
  150. data/docs/reference.md +15 -0
  151. data/docs/support.md +19 -0
  152. data/docs/vendor/bootstrap/css/bootstrap-grid.css +3719 -0
  153. data/docs/vendor/bootstrap/css/bootstrap-grid.css.map +1 -0
  154. data/docs/vendor/bootstrap/css/bootstrap-grid.min.css +7 -0
  155. data/docs/vendor/bootstrap/css/bootstrap-grid.min.css.map +1 -0
  156. data/docs/vendor/bootstrap/css/bootstrap-reboot.css +331 -0
  157. data/docs/vendor/bootstrap/css/bootstrap-reboot.css.map +1 -0
  158. data/docs/vendor/bootstrap/css/bootstrap-reboot.min.css +8 -0
  159. data/docs/vendor/bootstrap/css/bootstrap-reboot.min.css.map +1 -0
  160. data/docs/vendor/bootstrap/css/bootstrap.css +10038 -0
  161. data/docs/vendor/bootstrap/css/bootstrap.css.map +1 -0
  162. data/docs/vendor/bootstrap/css/bootstrap.min.css +7 -0
  163. data/docs/vendor/bootstrap/css/bootstrap.min.css.map +1 -0
  164. data/docs/vendor/bootstrap/js/bootstrap.bundle.js +7013 -0
  165. data/docs/vendor/bootstrap/js/bootstrap.bundle.js.map +1 -0
  166. data/docs/vendor/bootstrap/js/bootstrap.bundle.min.js +7 -0
  167. data/docs/vendor/bootstrap/js/bootstrap.bundle.min.js.map +1 -0
  168. data/docs/vendor/bootstrap/js/bootstrap.js +4435 -0
  169. data/docs/vendor/bootstrap/js/bootstrap.js.map +1 -0
  170. data/docs/vendor/bootstrap/js/bootstrap.min.js +7 -0
  171. data/docs/vendor/bootstrap/js/bootstrap.min.js.map +1 -0
  172. data/docs/vendor/font-awesome/css/font-awesome.css +2337 -0
  173. data/docs/vendor/font-awesome/css/font-awesome.min.css +4 -0
  174. data/docs/vendor/font-awesome/fonts/FontAwesome.otf +0 -0
  175. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  176. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
  177. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  178. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  179. data/docs/vendor/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  180. data/docs/vendor/font-awesome/less/animated.less +34 -0
  181. data/docs/vendor/font-awesome/less/bordered-pulled.less +25 -0
  182. data/docs/vendor/font-awesome/less/core.less +12 -0
  183. data/docs/vendor/font-awesome/less/fixed-width.less +6 -0
  184. data/docs/vendor/font-awesome/less/font-awesome.less +18 -0
  185. data/docs/vendor/font-awesome/less/icons.less +789 -0
  186. data/docs/vendor/font-awesome/less/larger.less +13 -0
  187. data/docs/vendor/font-awesome/less/list.less +19 -0
  188. data/docs/vendor/font-awesome/less/mixins.less +60 -0
  189. data/docs/vendor/font-awesome/less/path.less +15 -0
  190. data/docs/vendor/font-awesome/less/rotated-flipped.less +20 -0
  191. data/docs/vendor/font-awesome/less/screen-reader.less +5 -0
  192. data/docs/vendor/font-awesome/less/stacked.less +20 -0
  193. data/docs/vendor/font-awesome/less/variables.less +799 -0
  194. data/docs/vendor/font-awesome/scss/_animated.scss +34 -0
  195. data/docs/vendor/font-awesome/scss/_bordered-pulled.scss +25 -0
  196. data/docs/vendor/font-awesome/scss/_core.scss +12 -0
  197. data/docs/vendor/font-awesome/scss/_fixed-width.scss +6 -0
  198. data/docs/vendor/font-awesome/scss/_icons.scss +789 -0
  199. data/docs/vendor/font-awesome/scss/_larger.scss +13 -0
  200. data/docs/vendor/font-awesome/scss/_list.scss +19 -0
  201. data/docs/vendor/font-awesome/scss/_mixins.scss +60 -0
  202. data/docs/vendor/font-awesome/scss/_path.scss +15 -0
  203. data/docs/vendor/font-awesome/scss/_rotated-flipped.scss +20 -0
  204. data/docs/vendor/font-awesome/scss/_screen-reader.scss +5 -0
  205. data/docs/vendor/font-awesome/scss/_stacked.scss +20 -0
  206. data/docs/vendor/font-awesome/scss/_variables.scss +799 -0
  207. data/docs/vendor/font-awesome/scss/font-awesome.scss +18 -0
  208. data/docs/vendor/jquery/jquery.js +10598 -0
  209. data/docs/vendor/jquery/jquery.min.js +2 -0
  210. data/docs/vendor/jquery/jquery.min.map +1 -0
  211. data/docs/vendor/jquery/jquery.slim.js +8495 -0
  212. data/docs/vendor/jquery/jquery.slim.min.js +2 -0
  213. data/docs/vendor/jquery/jquery.slim.min.map +1 -0
  214. data/docs/vendor/simple-line-icons/css/simple-line-icons.css +778 -0
  215. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.eot +0 -0
  216. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.svg +200 -0
  217. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.ttf +0 -0
  218. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.woff +0 -0
  219. data/docs/vendor/simple-line-icons/fonts/Simple-Line-Icons.woff2 +0 -0
  220. data/docs/vendor/simple-line-icons/less/simple-line-icons.less +982 -0
  221. data/docs/vendor/simple-line-icons/scss/simple-line-icons.scss +979 -0
  222. data/exe/kubes +14 -0
  223. data/kubes.gemspec +29 -19
  224. data/lib/kubes.rb +21 -1
  225. data/lib/kubes/args/custom.rb +30 -0
  226. data/lib/kubes/args/dsl.rb +14 -0
  227. data/lib/kubes/auth.rb +21 -0
  228. data/lib/kubes/auth/ecr.rb +55 -0
  229. data/lib/kubes/autoloader.rb +21 -0
  230. data/lib/kubes/aws_services.rb +14 -0
  231. data/lib/kubes/cli.rb +93 -0
  232. data/lib/kubes/cli/apply.rb +9 -0
  233. data/lib/kubes/cli/base.rb +9 -0
  234. data/lib/kubes/cli/build.rb +8 -0
  235. data/lib/kubes/cli/clean.rb +9 -0
  236. data/lib/kubes/cli/compile.rb +8 -0
  237. data/lib/kubes/cli/delete.rb +11 -0
  238. data/lib/kubes/cli/deploy.rb +13 -0
  239. data/lib/kubes/cli/describe.rb +8 -0
  240. data/lib/kubes/cli/docker.rb +20 -0
  241. data/lib/kubes/cli/get.rb +8 -0
  242. data/lib/kubes/cli/help.rb +11 -0
  243. data/lib/kubes/cli/help/completion.md +20 -0
  244. data/lib/kubes/cli/help/completion_script.md +3 -0
  245. data/lib/kubes/cli/help/deploy.md +10 -0
  246. data/lib/kubes/cli/init.rb +69 -0
  247. data/lib/kubes/cli/sequence.rb +27 -0
  248. data/lib/kubes/command.rb +100 -0
  249. data/lib/kubes/compiler.rb +71 -0
  250. data/lib/kubes/compiler/decorator.rb +17 -0
  251. data/lib/kubes/compiler/decorator/base.rb +16 -0
  252. data/lib/kubes/compiler/decorator/compile.rb +12 -0
  253. data/lib/kubes/compiler/decorator/resources/base.rb +13 -0
  254. data/lib/kubes/compiler/decorator/resources/container.rb +76 -0
  255. data/lib/kubes/compiler/decorator/resources/container/mapping.rb +28 -0
  256. data/lib/kubes/compiler/decorator/resources/deployment.rb +10 -0
  257. data/lib/kubes/compiler/decorator/resources/pod.rb +10 -0
  258. data/lib/kubes/compiler/decorator/resources/secret.rb +23 -0
  259. data/lib/kubes/compiler/decorator/write.rb +14 -0
  260. data/lib/kubes/compiler/dsl/core/base.rb +27 -0
  261. data/lib/kubes/compiler/dsl/core/blocks.rb +55 -0
  262. data/lib/kubes/compiler/dsl/core/fields.rb +78 -0
  263. data/lib/kubes/compiler/dsl/core/files.rb +28 -0
  264. data/lib/kubes/compiler/dsl/core/helpers.rb +4 -0
  265. data/lib/kubes/compiler/dsl/core/parser.rb +43 -0
  266. data/lib/kubes/compiler/dsl/syntax/backend_config.rb +10 -0
  267. data/lib/kubes/compiler/dsl/syntax/cluster_role.rb +4 -0
  268. data/lib/kubes/compiler/dsl/syntax/cluster_role_binding.rb +4 -0
  269. data/lib/kubes/compiler/dsl/syntax/config_map.rb +20 -0
  270. data/lib/kubes/compiler/dsl/syntax/daemon_set.rb +23 -0
  271. data/lib/kubes/compiler/dsl/syntax/deployment.rb +163 -0
  272. data/lib/kubes/compiler/dsl/syntax/ingress.rb +41 -0
  273. data/lib/kubes/compiler/dsl/syntax/managed_certificate.rb +18 -0
  274. data/lib/kubes/compiler/dsl/syntax/namespace.rb +13 -0
  275. data/lib/kubes/compiler/dsl/syntax/network_policy.rb +30 -0
  276. data/lib/kubes/compiler/dsl/syntax/pod.rb +81 -0
  277. data/lib/kubes/compiler/dsl/syntax/resource.rb +70 -0
  278. data/lib/kubes/compiler/dsl/syntax/role.rb +40 -0
  279. data/lib/kubes/compiler/dsl/syntax/role_binding.rb +43 -0
  280. data/lib/kubes/compiler/dsl/syntax/secret.rb +22 -0
  281. data/lib/kubes/compiler/dsl/syntax/service.rb +68 -0
  282. data/lib/kubes/compiler/dsl/syntax/service_account.rb +20 -0
  283. data/lib/kubes/compiler/layering.rb +39 -0
  284. data/lib/kubes/compiler/shared/helpers.rb +30 -0
  285. data/lib/kubes/compiler/strategy.rb +27 -0
  286. data/lib/kubes/compiler/strategy/base.rb +13 -0
  287. data/lib/kubes/compiler/strategy/dsl.rb +32 -0
  288. data/lib/kubes/compiler/strategy/erb.rb +42 -0
  289. data/lib/kubes/compiler/strategy/pass.rb +9 -0
  290. data/lib/kubes/compiler/strategy/result.rb +26 -0
  291. data/lib/kubes/compiler/util/normalize.rb +11 -0
  292. data/lib/kubes/compiler/util/yaml_dump.rb +23 -0
  293. data/lib/kubes/completer.rb +159 -0
  294. data/lib/kubes/completer/script.rb +6 -0
  295. data/lib/kubes/completer/script.sh +10 -0
  296. data/lib/kubes/config.rb +82 -0
  297. data/lib/kubes/core.rb +32 -0
  298. data/lib/kubes/docker/args/default.rb +39 -0
  299. data/lib/kubes/docker/base.rb +88 -0
  300. data/lib/kubes/docker/build.rb +33 -0
  301. data/lib/kubes/docker/push.rb +33 -0
  302. data/lib/kubes/hooks/builder.rb +41 -0
  303. data/lib/kubes/hooks/dsl.rb +19 -0
  304. data/lib/kubes/kubectl.rb +87 -0
  305. data/lib/kubes/kubectl/args/base.rb +12 -0
  306. data/lib/kubes/kubectl/args/kustomize.rb +28 -0
  307. data/lib/kubes/kubectl/args/standard.rb +32 -0
  308. data/lib/kubes/kubectl/batch.rb +49 -0
  309. data/lib/kubes/kubectl/decider.rb +15 -0
  310. data/lib/kubes/kubectl/kustomize.rb +13 -0
  311. data/lib/kubes/kubectl/ordering.rb +27 -0
  312. data/lib/kubes/logger.rb +26 -0
  313. data/lib/kubes/logging.rb +7 -0
  314. data/lib/kubes/util/consider.rb +9 -0
  315. data/lib/kubes/util/sh.rb +43 -0
  316. data/lib/kubes/util/sure.rb +17 -0
  317. data/lib/kubes/util/time.rb +14 -0
  318. data/lib/kubes/version.rb +1 -1
  319. data/lib/templates/base/.kubes/config.rb.tt +9 -0
  320. data/lib/templates/base/.kubes/config/env/dev.rb +6 -0
  321. data/lib/templates/base/.kubes/config/env/prod.rb +6 -0
  322. data/lib/templates/docker/Dockerfile +4 -0
  323. data/lib/templates/dsl/.kubes/resources/base/all.rb.tt +2 -0
  324. data/lib/templates/dsl/.kubes/resources/web/deployment.rb.tt +7 -0
  325. data/lib/templates/dsl/.kubes/resources/web/deployment/dev.rb +1 -0
  326. data/lib/templates/dsl/.kubes/resources/web/deployment/prod.rb +1 -0
  327. data/lib/templates/dsl/.kubes/resources/web/service.rb.tt +8 -0
  328. data/lib/templates/yaml/.kubes/resources/base/all.yaml.tt +2 -0
  329. data/lib/templates/yaml/.kubes/resources/base/deployment.yaml.tt +11 -0
  330. data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +24 -0
  331. data/lib/templates/yaml/.kubes/resources/web/deployment/dev.yaml +2 -0
  332. data/lib/templates/yaml/.kubes/resources/web/deployment/prod.yaml +2 -0
  333. data/lib/templates/yaml/.kubes/resources/web/service.yaml.tt +14 -0
  334. data/spec/cli_spec.rb +8 -0
  335. data/spec/fixtures/artifacts/demo-web/deployment.yaml +26 -0
  336. data/spec/fixtures/artifacts/demo-web/service.yaml +16 -0
  337. data/spec/fixtures/blocks/deployments.rb +9 -0
  338. data/spec/fixtures/decorators/deployment/configMap/envFrom.yaml +27 -0
  339. data/spec/fixtures/decorators/deployment/configMap/valueFrom.yaml +30 -0
  340. data/spec/fixtures/decorators/deployment/configMap/volumes.yaml +34 -0
  341. data/spec/fixtures/decorators/deployment/secret/envFrom.yaml +27 -0
  342. data/spec/fixtures/decorators/deployment/secret/valueFrom.yaml +30 -0
  343. data/spec/fixtures/decorators/deployment/secret/volumes.yaml +34 -0
  344. data/spec/fixtures/decorators/pod/configMap/envFrom.yaml +12 -0
  345. data/spec/fixtures/decorators/pod/configMap/valueFrom.yaml +16 -0
  346. data/spec/fixtures/decorators/pod/configMap/volumes.yaml +19 -0
  347. data/spec/fixtures/decorators/pod/secret/envFrom.yaml +12 -0
  348. data/spec/fixtures/decorators/pod/secret/valueFrom.yaml +16 -0
  349. data/spec/fixtures/decorators/pod/secret/volumes.yaml +19 -0
  350. data/spec/fixtures/deployments/minimum.rb +5 -0
  351. data/spec/fixtures/deployments/props.rb +7 -0
  352. data/spec/fixtures/deployments/setter/container.rb +11 -0
  353. data/spec/fixtures/deployments/setter/containers.rb +14 -0
  354. data/spec/fixtures/deployments/setter/metadata.rb +15 -0
  355. data/spec/fixtures/deployments/setter/sidecar.rb +12 -0
  356. data/spec/fixtures/deployments/setter/spec.rb +10 -0
  357. data/spec/fixtures/multiple-files/deployment-1.rb +4 -0
  358. data/spec/fixtures/multiple-files/deployment-2.rb +4 -0
  359. data/spec/fixtures/project/.gitignore +1 -0
  360. data/spec/fixtures/project/.kubes/resources/deployment.rb +32 -0
  361. data/spec/fixtures/project/.kubes/resources/foobar.rb +0 -0
  362. data/spec/fixtures/project/.kubes/resources/service.rb +3 -0
  363. data/spec/fixtures/services/minimum.rb +3 -0
  364. data/spec/fixtures/syntax/network_policy.rb +3 -0
  365. data/spec/fixtures/syntax/pod.rb +1 -0
  366. data/spec/kubes/compiler/decorator/resources/deployment_spec.rb +92 -0
  367. data/spec/kubes/compiler/decorator/resources/pod_spec.rb +92 -0
  368. data/spec/kubes/compiler/strategy/dsl_spec.rb +36 -0
  369. data/spec/kubes/compiler_spec.rb +10 -0
  370. data/spec/kubes/dsl/daemon_set.rb +11 -0
  371. data/spec/kubes/dsl/deployment_spec.rb +60 -0
  372. data/spec/kubes/dsl/network_policy_spec.rb +14 -0
  373. data/spec/kubes/dsl/pod_spec.rb +11 -0
  374. data/spec/kubes/dsl/service_spec.rb +12 -0
  375. data/spec/kubes/kubectl/batch_spec.rb +24 -0
  376. data/spec/spec_helper.rb +34 -0
  377. metadata +602 -22
  378. data/bin/console +0 -14
  379. data/bin/setup +0 -8
@@ -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,33 @@
1
+ require 'open4'
2
+
3
+ module Kubes::Docker
4
+ class Build < Base
5
+ def run
6
+ reserve_image_name
7
+ build
8
+ store_image_name
9
+ end
10
+
11
+ def build
12
+ # Dockerfile is also used in args/default.rb, will have to combine if Dockerfile is made configurable
13
+ unless File.exist?("Dockerfile")
14
+ logger.error "ERROR: The Dockerfile does not exist. Cannot build the docker image without a Dockerfile".color(:red)
15
+ exit 1
16
+ end
17
+ params = args.flatten.join(' ')
18
+ command = "docker build #{params}"
19
+ run_hooks "build" do
20
+ # sh(command)
21
+ spawn(command)
22
+ end
23
+ end
24
+
25
+ def spawn(command, stdin: '', stdout: STDOUT, stderr: STDERR)
26
+ Open4::spawn(
27
+ command,
28
+ stdin: stdin,
29
+ stdout: stdout,
30
+ stderr: stderr)
31
+ end
32
+ end
33
+ 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
+
@@ -0,0 +1,12 @@
1
+ module Kubes::Kubectl::Args
2
+ class Base
3
+ def initialize(name, options={})
4
+ @name, @options = name.to_s, options
5
+ end
6
+
7
+ def args
8
+ meth = "#{@name}_args" # IE: apply_args
9
+ send(meth)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ module Kubes::Kubectl::Args
2
+ class Kustomize < Base
3
+ def apply_args
4
+ args = ["-k"]
5
+ args << resource_path
6
+ args
7
+ end
8
+ alias_method :delete_args, :apply_args
9
+
10
+ def get_args
11
+ args = ["-k"]
12
+ args << resource_path
13
+ args += ["-o #{@options[:output]}"] if @options[:output]
14
+ args
15
+ end
16
+ alias_method :describe_args, :get_args
17
+
18
+ private
19
+ def resource_path
20
+ [".kubes/output", @options[:role], resource].compact.join('/')
21
+ end
22
+
23
+ def resource
24
+ return unless r = @options[:resource] # intentional assignment
25
+ r.include?(".yaml") ? r : "#{r}.yaml"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ module Kubes::Kubectl::Args
2
+ class Standard < Base
3
+ def apply_args
4
+ args = ["-f"]
5
+ args << resource_path
6
+ args
7
+ end
8
+ alias_method :delete_args, :apply_args
9
+
10
+ def get_args
11
+ args = ["--recursive -f"]
12
+ args << resource_path
13
+ args += ["-o #{@options[:output]}"] if @options[:output]
14
+ args
15
+ end
16
+ alias_method :describe_args, :get_args
17
+
18
+ private
19
+ def resource_path
20
+ if @options[:file] # batch: apply and delete
21
+ @options[:file]
22
+ else # get
23
+ [".kubes/output", @options[:role], resource].compact.join('/')
24
+ end
25
+ end
26
+
27
+ def resource
28
+ return unless r = @options[:resource] # intentional assignment
29
+ r.include?(".yaml") ? r : "#{r}.yaml"
30
+ end
31
+ end
32
+ end