qb 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +12 -0
  3. data/.qb-options.yml +2 -0
  4. data/bin/qb +2 -0
  5. data/{scratch → dev/scratch}/case.rb +0 -0
  6. data/dev/setup.yml +4 -0
  7. data/exe/qb +65 -18
  8. data/lib/qb/version.rb +7 -1
  9. data/qb.gemspec +26 -1
  10. data/roles/nrser.blockinfile/CONTRIBUTING.md +19 -0
  11. data/roles/nrser.blockinfile/README.md +262 -0
  12. data/roles/nrser.blockinfile/library/blockinfile.py +354 -0
  13. data/roles/nrser.blockinfile/meta/main.yml +10 -0
  14. data/roles/nrser.blockinfile/tests/.gitignore +1 -0
  15. data/roles/nrser.blockinfile/tests/expected/test-basic/create.txt +5 -0
  16. data/roles/nrser.blockinfile/tests/expected/test-basic/insert.txt +6 -0
  17. data/roles/nrser.blockinfile/tests/expected/test-basic/marker.txt +5 -0
  18. data/roles/nrser.blockinfile/tests/expected/test-basic/remove.txt +2 -0
  19. data/roles/nrser.blockinfile/tests/expected/test-basic/update.txt +6 -0
  20. data/roles/nrser.blockinfile/tests/expected/test-block/block.txt +4 -0
  21. data/roles/nrser.blockinfile/tests/expected/test-block/content.txt +4 -0
  22. data/roles/nrser.blockinfile/tests/expected/test-follow/link0.txt +6 -0
  23. data/roles/nrser.blockinfile/tests/expected/test-follow/link1.txt +6 -0
  24. data/roles/nrser.blockinfile/tests/expected/test-follow/link2.txt +1 -0
  25. data/roles/nrser.blockinfile/tests/expected/test-follow/real0.txt +2 -0
  26. data/roles/nrser.blockinfile/tests/expected/test-follow/real1.txt +2 -0
  27. data/roles/nrser.blockinfile/tests/expected/test-follow/real2.txt +6 -0
  28. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertafter.txt +8 -0
  29. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertbefore.txt +8 -0
  30. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertbof.txt +8 -0
  31. data/roles/nrser.blockinfile/tests/expected/test-insertab/inserteof.txt +8 -0
  32. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertunmatched.txt +8 -0
  33. data/roles/nrser.blockinfile/tests/expected/test-insertab/updateafter.txt +8 -0
  34. data/roles/nrser.blockinfile/tests/expected/test-insertab/updatebefore.txt +8 -0
  35. data/roles/nrser.blockinfile/tests/expected/test-multiline/insert.txt +11 -0
  36. data/roles/nrser.blockinfile/tests/expected/test-multiline/remove.txt +2 -0
  37. data/roles/nrser.blockinfile/tests/expected/test-multiline/update.txt +12 -0
  38. data/roles/nrser.blockinfile/tests/expected/test-replace/index.html +6 -0
  39. data/roles/nrser.blockinfile/tests/expected/test-state/insert-present.txt +5 -0
  40. data/roles/nrser.blockinfile/tests/expected/test-state/insert.txt +5 -0
  41. data/roles/nrser.blockinfile/tests/expected/test-state/remove-absent.txt +2 -0
  42. data/roles/nrser.blockinfile/tests/expected/test-state/remove-present.txt +2 -0
  43. data/roles/nrser.blockinfile/tests/expected/test-state/remove.txt +2 -0
  44. data/roles/nrser.blockinfile/tests/fixtures/test-basic/insert.txt +2 -0
  45. data/roles/nrser.blockinfile/tests/fixtures/test-basic/marker.txt +1 -0
  46. data/roles/nrser.blockinfile/tests/fixtures/test-basic/remove.txt +6 -0
  47. data/roles/nrser.blockinfile/tests/fixtures/test-basic/update.txt +6 -0
  48. data/roles/nrser.blockinfile/tests/fixtures/test-block/block.txt +1 -0
  49. data/roles/nrser.blockinfile/tests/fixtures/test-block/content.txt +1 -0
  50. data/roles/nrser.blockinfile/tests/fixtures/test-follow/link0.txt +1 -0
  51. data/roles/nrser.blockinfile/tests/fixtures/test-follow/link1.txt +1 -0
  52. data/roles/nrser.blockinfile/tests/fixtures/test-follow/link2.txt +1 -0
  53. data/roles/nrser.blockinfile/tests/fixtures/test-follow/real0.txt +2 -0
  54. data/roles/nrser.blockinfile/tests/fixtures/test-follow/real1.txt +2 -0
  55. data/roles/nrser.blockinfile/tests/fixtures/test-follow/real2.txt +2 -0
  56. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertafter.txt +4 -0
  57. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertbefore.txt +4 -0
  58. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertbof.txt +4 -0
  59. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/inserteof.txt +4 -0
  60. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertunmatched.txt +4 -0
  61. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/updateafter.txt +8 -0
  62. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/updatebefore.txt +8 -0
  63. data/roles/nrser.blockinfile/tests/fixtures/test-multiline/insert.txt +2 -0
  64. data/roles/nrser.blockinfile/tests/fixtures/test-multiline/remove.txt +11 -0
  65. data/roles/nrser.blockinfile/tests/fixtures/test-multiline/update.txt +12 -0
  66. data/roles/nrser.blockinfile/tests/fixtures/test-replace/index.html +1 -0
  67. data/roles/nrser.blockinfile/tests/fixtures/test-state/insert-present.txt +2 -0
  68. data/roles/nrser.blockinfile/tests/fixtures/test-state/insert.txt +2 -0
  69. data/roles/nrser.blockinfile/tests/fixtures/test-state/remove-absent.txt +6 -0
  70. data/roles/nrser.blockinfile/tests/fixtures/test-state/remove-present.txt +6 -0
  71. data/roles/nrser.blockinfile/tests/fixtures/test-state/remove.txt +6 -0
  72. data/roles/nrser.blockinfile/tests/hosts +1 -0
  73. data/roles/nrser.blockinfile/tests/roles/yaegashi.blockinfile +1 -0
  74. data/roles/nrser.blockinfile/tests/run.sh +64 -0
  75. data/roles/nrser.blockinfile/tests/test-basic.yml +31 -0
  76. data/roles/nrser.blockinfile/tests/test-block.yml +16 -0
  77. data/roles/nrser.blockinfile/tests/test-follow.yml +21 -0
  78. data/roles/nrser.blockinfile/tests/test-insertab.yml +34 -0
  79. data/roles/nrser.blockinfile/tests/test-multiline.yml +51 -0
  80. data/roles/nrser.blockinfile/tests/test-replace.yml +21 -0
  81. data/roles/nrser.blockinfile/tests/test-state.yml +32 -0
  82. data/roles/nrser.rb/.gitignore +31 -0
  83. data/roles/nrser.rb/library/sync.rb +52 -0
  84. data/roles/nrser.rb/library/vars.rb +63 -0
  85. data/roles/{qb.meteor_react_component → nrser.rb}/meta/main.yml +1 -1
  86. data/roles/nrser.rbenv_gem/README.md +38 -0
  87. data/roles/nrser.rbenv_gem/VERSION +1 -0
  88. data/roles/nrser.rbenv_gem/defaults/main.yml +5 -0
  89. data/roles/nrser.rbenv_gem/handlers/main.yml +2 -0
  90. data/roles/nrser.rbenv_gem/meta/main.yml +9 -0
  91. data/roles/nrser.rbenv_gem/tasks/clone-repo.yml +24 -0
  92. data/roles/nrser.rbenv_gem/tasks/main.yml +46 -0
  93. data/roles/nrser.rbenv_gem/tasks/manage-source.yml +48 -0
  94. data/roles/nrser.rbenv_gem/tasks/manage-version.yml +45 -0
  95. data/roles/nrser.rbenv_gem/vars/main.yml +2 -0
  96. data/roles/qb.build_gem/tasks/main.yml +2 -1
  97. data/roles/qb.gitignore/defaults/main.yml +1 -1
  98. data/roles/qb.gitignore/files/gitignore/.github/PULL_REQUEST_TEMPLATE.md +11 -0
  99. data/roles/qb.gitignore/files/gitignore/Actionscript.gitignore +11 -0
  100. data/roles/qb.gitignore/files/gitignore/Ada.gitignore +5 -0
  101. data/roles/qb.gitignore/files/gitignore/Agda.gitignore +1 -0
  102. data/roles/qb.gitignore/files/gitignore/Android.gitignore +39 -0
  103. data/roles/qb.gitignore/files/gitignore/AppEngine.gitignore +2 -0
  104. data/roles/qb.gitignore/files/gitignore/AppceleratorTitanium.gitignore +3 -0
  105. data/roles/qb.gitignore/files/gitignore/ArchLinuxPackages.gitignore +13 -0
  106. data/roles/qb.gitignore/files/gitignore/Autotools.gitignore +18 -0
  107. data/roles/qb.gitignore/files/gitignore/C++.gitignore +28 -0
  108. data/roles/qb.gitignore/files/gitignore/C.gitignore +32 -0
  109. data/roles/qb.gitignore/files/gitignore/CFWheels.gitignore +12 -0
  110. data/roles/qb.gitignore/files/gitignore/CMake.gitignore +6 -0
  111. data/roles/qb.gitignore/files/gitignore/CONTRIBUTING.md +34 -0
  112. data/roles/qb.gitignore/files/gitignore/CUDA.gitignore +6 -0
  113. data/roles/qb.gitignore/files/gitignore/CakePHP.gitignore +25 -0
  114. data/roles/qb.gitignore/files/gitignore/ChefCookbook.gitignore +9 -0
  115. data/roles/qb.gitignore/files/gitignore/Clojure.gitignore +1 -0
  116. data/roles/qb.gitignore/files/gitignore/CodeIgniter.gitignore +6 -0
  117. data/roles/qb.gitignore/files/gitignore/CommonLisp.gitignore +3 -0
  118. data/roles/qb.gitignore/files/gitignore/Composer.gitignore +6 -0
  119. data/roles/qb.gitignore/files/gitignore/Concrete5.gitignore +4 -0
  120. data/roles/qb.gitignore/files/gitignore/Coq.gitignore +3 -0
  121. data/roles/qb.gitignore/files/gitignore/CraftCMS.gitignore +3 -0
  122. data/roles/qb.gitignore/files/gitignore/D.gitignore +20 -0
  123. data/roles/qb.gitignore/files/gitignore/DM.gitignore +5 -0
  124. data/roles/qb.gitignore/files/gitignore/Dart.gitignore +27 -0
  125. data/roles/qb.gitignore/files/gitignore/Delphi.gitignore +66 -0
  126. data/roles/qb.gitignore/files/gitignore/Drupal.gitignore +36 -0
  127. data/roles/qb.gitignore/files/gitignore/EPiServer.gitignore +4 -0
  128. data/roles/qb.gitignore/files/gitignore/Eagle.gitignore +44 -0
  129. data/roles/qb.gitignore/files/gitignore/Elisp.gitignore +5 -0
  130. data/roles/qb.gitignore/files/gitignore/Elixir.gitignore +5 -0
  131. data/roles/qb.gitignore/files/gitignore/Elm.gitignore +4 -0
  132. data/roles/qb.gitignore/files/gitignore/Erlang.gitignore +10 -0
  133. data/roles/qb.gitignore/files/gitignore/ExpressionEngine.gitignore +19 -0
  134. data/roles/qb.gitignore/files/gitignore/ExtJs.gitignore +4 -0
  135. data/roles/qb.gitignore/files/gitignore/Fancy.gitignore +2 -0
  136. data/roles/qb.gitignore/files/gitignore/Finale.gitignore +13 -0
  137. data/roles/qb.gitignore/files/gitignore/ForceDotCom.gitignore +4 -0
  138. data/roles/qb.gitignore/files/gitignore/Fortran.gitignore +1 -0
  139. data/roles/qb.gitignore/files/gitignore/FuelPHP.gitignore +21 -0
  140. data/roles/qb.gitignore/files/gitignore/GWT.gitignore +28 -0
  141. data/roles/qb.gitignore/files/gitignore/Gcov.gitignore +5 -0
  142. data/roles/qb.gitignore/files/gitignore/Gem.gitignore +3 -0
  143. data/roles/qb.gitignore/files/gitignore/GitBook.gitignore +16 -0
  144. data/roles/qb.gitignore/files/gitignore/Global/Anjuta.gitignore +3 -0
  145. data/roles/qb.gitignore/files/gitignore/Global/Archives.gitignore +27 -0
  146. data/roles/qb.gitignore/files/gitignore/Global/BricxCC.gitignore +4 -0
  147. data/roles/qb.gitignore/files/gitignore/Global/CVS.gitignore +4 -0
  148. data/roles/qb.gitignore/files/gitignore/Global/Calabash.gitignore +10 -0
  149. data/roles/qb.gitignore/files/gitignore/Global/Cloud9.gitignore +3 -0
  150. data/roles/qb.gitignore/files/gitignore/Global/CodeKit.gitignore +3 -0
  151. data/roles/qb.gitignore/files/gitignore/Global/DartEditor.gitignore +2 -0
  152. data/roles/qb.gitignore/files/gitignore/Global/Dreamweaver.gitignore +7 -0
  153. data/roles/qb.gitignore/files/gitignore/Global/Dropbox.gitignore +4 -0
  154. data/roles/qb.gitignore/files/gitignore/Global/Eclipse.gitignore +51 -0
  155. data/roles/qb.gitignore/files/gitignore/Global/EiffelStudio.gitignore +2 -0
  156. data/roles/qb.gitignore/files/gitignore/Global/Emacs.gitignore +41 -0
  157. data/roles/qb.gitignore/files/gitignore/Global/Ensime.gitignore +4 -0
  158. data/roles/qb.gitignore/files/gitignore/Global/Espresso.gitignore +1 -0
  159. data/roles/qb.gitignore/files/gitignore/Global/FlexBuilder.gitignore +3 -0
  160. data/roles/qb.gitignore/files/gitignore/Global/GPG.gitignore +2 -0
  161. data/roles/qb.gitignore/files/gitignore/Global/IPythonNotebook.gitignore +2 -0
  162. data/roles/qb.gitignore/files/gitignore/Global/JDeveloper.gitignore +13 -0
  163. data/roles/qb.gitignore/files/gitignore/Global/JetBrains.gitignore +44 -0
  164. data/roles/qb.gitignore/files/gitignore/Global/KDevelop4.gitignore +2 -0
  165. data/roles/qb.gitignore/files/gitignore/Global/Kate.gitignore +3 -0
  166. data/roles/qb.gitignore/files/gitignore/Global/Lazarus.gitignore +30 -0
  167. data/roles/qb.gitignore/files/gitignore/Global/LibreOffice.gitignore +2 -0
  168. data/roles/qb.gitignore/files/gitignore/Global/Linux.gitignore +10 -0
  169. data/roles/qb.gitignore/files/gitignore/Global/LyX.gitignore +4 -0
  170. data/roles/qb.gitignore/files/gitignore/Global/Matlab.gitignore +19 -0
  171. data/roles/qb.gitignore/files/gitignore/Global/Mercurial.gitignore +6 -0
  172. data/roles/qb.gitignore/files/gitignore/Global/MicrosoftOffice.gitignore +13 -0
  173. data/roles/qb.gitignore/files/gitignore/Global/ModelSim.gitignore +23 -0
  174. data/roles/qb.gitignore/files/gitignore/Global/Momentics.gitignore +8 -0
  175. data/roles/qb.gitignore/files/gitignore/Global/MonoDevelop.gitignore +8 -0
  176. data/roles/qb.gitignore/files/gitignore/Global/NetBeans.gitignore +7 -0
  177. data/roles/qb.gitignore/files/gitignore/Global/Ninja.gitignore +2 -0
  178. data/roles/qb.gitignore/files/gitignore/Global/NotepadPP.gitignore +2 -0
  179. data/roles/qb.gitignore/files/gitignore/Global/OSX.gitignore +24 -0
  180. data/roles/qb.gitignore/files/gitignore/Global/Otto.gitignore +1 -0
  181. data/roles/qb.gitignore/files/gitignore/Global/README.md +10 -0
  182. data/roles/qb.gitignore/files/gitignore/Global/Redcar.gitignore +1 -0
  183. data/roles/qb.gitignore/files/gitignore/Global/Redis.gitignore +3 -0
  184. data/roles/qb.gitignore/files/gitignore/Global/SBT.gitignore +9 -0
  185. data/roles/qb.gitignore/files/gitignore/Global/SVN.gitignore +1 -0
  186. data/roles/qb.gitignore/files/gitignore/Global/SlickEdit.gitignore +11 -0
  187. data/roles/qb.gitignore/files/gitignore/Global/SublimeText.gitignore +14 -0
  188. data/roles/qb.gitignore/files/gitignore/Global/SynopsysVCS.gitignore +36 -0
  189. data/roles/qb.gitignore/files/gitignore/Global/Tags.gitignore +16 -0
  190. data/roles/qb.gitignore/files/gitignore/Global/TextMate.gitignore +3 -0
  191. data/roles/qb.gitignore/files/gitignore/Global/TortoiseGit.gitignore +2 -0
  192. data/roles/qb.gitignore/files/gitignore/Global/Vagrant.gitignore +1 -0
  193. data/roles/qb.gitignore/files/gitignore/Global/Vim.gitignore +10 -0
  194. data/roles/qb.gitignore/files/gitignore/Global/VirtualEnv.gitignore +12 -0
  195. data/roles/qb.gitignore/files/gitignore/Global/VisualStudioCode.gitignore +2 -0
  196. data/roles/qb.gitignore/files/gitignore/Global/WebMethods.gitignore +14 -0
  197. data/roles/qb.gitignore/files/gitignore/Global/Windows.gitignore +18 -0
  198. data/roles/qb.gitignore/files/gitignore/Global/Xcode.gitignore +23 -0
  199. data/roles/qb.gitignore/files/gitignore/Global/XilinxISE.gitignore +67 -0
  200. data/roles/qb.gitignore/files/gitignore/Go.gitignore +24 -0
  201. data/roles/qb.gitignore/files/gitignore/Gradle.gitignore +14 -0
  202. data/roles/qb.gitignore/files/gitignore/Grails.gitignore +33 -0
  203. data/roles/qb.gitignore/files/gitignore/Haskell.gitignore +17 -0
  204. data/roles/qb.gitignore/files/gitignore/IGORPro.gitignore +5 -0
  205. data/roles/qb.gitignore/files/gitignore/Idris.gitignore +2 -0
  206. data/roles/qb.gitignore/files/gitignore/Java.gitignore +12 -0
  207. data/roles/qb.gitignore/files/gitignore/Jboss.gitignore +19 -0
  208. data/roles/qb.gitignore/files/gitignore/Jekyll.gitignore +3 -0
  209. data/roles/qb.gitignore/files/gitignore/Joomla.gitignore +546 -0
  210. data/roles/qb.gitignore/files/gitignore/KiCad.gitignore +20 -0
  211. data/roles/qb.gitignore/files/gitignore/Kohana.gitignore +2 -0
  212. data/roles/qb.gitignore/files/gitignore/LICENSE +19 -0
  213. data/roles/qb.gitignore/files/gitignore/LabVIEW.gitignore +16 -0
  214. data/roles/qb.gitignore/files/gitignore/Laravel.gitignore +16 -0
  215. data/roles/qb.gitignore/files/gitignore/Leiningen.gitignore +12 -0
  216. data/roles/qb.gitignore/files/gitignore/LemonStand.gitignore +21 -0
  217. data/roles/qb.gitignore/files/gitignore/Lilypond.gitignore +6 -0
  218. data/roles/qb.gitignore/files/gitignore/Lithium.gitignore +2 -0
  219. data/roles/qb.gitignore/files/gitignore/Lua.gitignore +41 -0
  220. data/roles/qb.gitignore/files/gitignore/Magento.gitignore +104 -0
  221. data/roles/qb.gitignore/files/gitignore/Maven.gitignore +9 -0
  222. data/roles/qb.gitignore/files/gitignore/Mercury.gitignore +13 -0
  223. data/roles/qb.gitignore/files/gitignore/MetaProgrammingSystem.gitignore +16 -0
  224. data/roles/qb.gitignore/files/gitignore/Nanoc.gitignore +10 -0
  225. data/roles/qb.gitignore/files/gitignore/Nim.gitignore +1 -0
  226. data/roles/qb.gitignore/files/gitignore/Node.gitignore +34 -0
  227. data/roles/qb.gitignore/files/gitignore/OCaml.gitignore +20 -0
  228. data/roles/qb.gitignore/files/gitignore/Objective-C.gitignore +51 -0
  229. data/roles/qb.gitignore/files/gitignore/Opa.gitignore +13 -0
  230. data/roles/qb.gitignore/files/gitignore/OpenCart.gitignore +13 -0
  231. data/roles/qb.gitignore/files/gitignore/OracleForms.gitignore +8 -0
  232. data/roles/qb.gitignore/files/gitignore/Packer.gitignore +5 -0
  233. data/roles/qb.gitignore/files/gitignore/Perl.gitignore +20 -0
  234. data/roles/qb.gitignore/files/gitignore/Phalcon.gitignore +2 -0
  235. data/roles/qb.gitignore/files/gitignore/PlayFramework.gitignore +15 -0
  236. data/roles/qb.gitignore/files/gitignore/Plone.gitignore +18 -0
  237. data/roles/qb.gitignore/files/gitignore/Prestashop.gitignore +32 -0
  238. data/roles/qb.gitignore/files/gitignore/Processing.gitignore +7 -0
  239. data/roles/qb.gitignore/files/gitignore/Python.gitignore +85 -0
  240. data/roles/qb.gitignore/files/gitignore/Qooxdoo.gitignore +5 -0
  241. data/roles/qb.gitignore/files/gitignore/Qt.gitignore +38 -0
  242. data/roles/qb.gitignore/files/gitignore/R.gitignore +25 -0
  243. data/roles/qb.gitignore/files/gitignore/README.md +79 -0
  244. data/roles/qb.gitignore/files/gitignore/ROS.gitignore +47 -0
  245. data/roles/qb.gitignore/files/gitignore/Rails.gitignore +38 -0
  246. data/roles/qb.gitignore/files/gitignore/RhodesRhomobile.gitignore +9 -0
  247. data/roles/qb.gitignore/files/gitignore/Ruby.gitignore +47 -0
  248. data/roles/qb.gitignore/files/gitignore/Rust.gitignore +15 -0
  249. data/roles/qb.gitignore/files/gitignore/SCons.gitignore +2 -0
  250. data/roles/qb.gitignore/files/gitignore/Sass.gitignore +2 -0
  251. data/roles/qb.gitignore/files/gitignore/Scala.gitignore +17 -0
  252. data/roles/qb.gitignore/files/gitignore/Scheme.gitignore +7 -0
  253. data/roles/qb.gitignore/files/gitignore/Scrivener.gitignore +7 -0
  254. data/roles/qb.gitignore/files/gitignore/Sdcc.gitignore +8 -0
  255. data/roles/qb.gitignore/files/gitignore/SeamGen.gitignore +26 -0
  256. data/roles/qb.gitignore/files/gitignore/SketchUp.gitignore +1 -0
  257. data/roles/qb.gitignore/files/gitignore/Smalltalk.gitignore +18 -0
  258. data/roles/qb.gitignore/files/gitignore/Stella.gitignore +12 -0
  259. data/roles/qb.gitignore/files/gitignore/SugarCRM.gitignore +25 -0
  260. data/roles/qb.gitignore/files/gitignore/Swift.gitignore +63 -0
  261. data/roles/qb.gitignore/files/gitignore/Symfony.gitignore +43 -0
  262. data/roles/qb.gitignore/files/gitignore/SymphonyCMS.gitignore +6 -0
  263. data/roles/qb.gitignore/files/gitignore/TeX.gitignore +177 -0
  264. data/roles/qb.gitignore/files/gitignore/Terraform.gitignore +3 -0
  265. data/roles/qb.gitignore/files/gitignore/Textpattern.gitignore +11 -0
  266. data/roles/qb.gitignore/files/gitignore/TurboGears2.gitignore +20 -0
  267. data/roles/qb.gitignore/files/gitignore/Typo3.gitignore +20 -0
  268. data/roles/qb.gitignore/files/gitignore/Umbraco.gitignore +19 -0
  269. data/roles/qb.gitignore/files/gitignore/Unity.gitignore +30 -0
  270. data/roles/qb.gitignore/files/gitignore/UnrealEngine.gitignore +59 -0
  271. data/roles/qb.gitignore/files/gitignore/VVVV.gitignore +6 -0
  272. data/roles/qb.gitignore/files/gitignore/VisualStudio.gitignore +245 -0
  273. data/roles/qb.gitignore/files/gitignore/Waf.gitignore +4 -0
  274. data/roles/qb.gitignore/files/gitignore/WordPress.gitignore +18 -0
  275. data/roles/qb.gitignore/files/gitignore/Xojo.gitignore +11 -0
  276. data/roles/qb.gitignore/files/gitignore/Yeoman.gitignore +6 -0
  277. data/roles/qb.gitignore/files/gitignore/Yii.gitignore +6 -0
  278. data/roles/qb.gitignore/files/gitignore/ZendFramework.gitignore +25 -0
  279. data/roles/qb.gitignore/files/gitignore/Zephir.gitignore +26 -0
  280. data/roles/qb.gitignore/meta/qb +28 -0
  281. data/roles/qb.gitignore/tasks/main.yml +4 -15
  282. data/roles/qb.install_gem/meta/qb.yml +4 -0
  283. data/roles/qb.project/defaults/main.yml +3 -2
  284. data/roles/qb.project/files/ansible.cfg +3 -1
  285. data/roles/qb.project/meta/main.yml +1 -0
  286. data/roles/qb.project/meta/qb.yml +10 -2
  287. data/roles/qb.project/tasks/dev.yml +36 -0
  288. data/roles/qb.project/tasks/main.yml +9 -29
  289. data/roles/qb.project/tasks/setup.yml +24 -23
  290. data/roles/qb.project/templates/bootstrap.yml.j2 +20 -0
  291. data/roles/qb.project/templates/setup.yml.j2 +3 -1
  292. data/roles/qb.release_gem/defaults/main.yml +2 -0
  293. data/roles/qb.release_gem/meta/main.yml +7 -0
  294. data/roles/qb.release_gem/meta/qb.yml +21 -0
  295. data/roles/qb.release_gem/tasks/main.yml +84 -0
  296. metadata +280 -15
  297. data/requirements.yml +0 -7
  298. data/roles/qb.gitignore/.qb-options.yml +0 -3
  299. data/roles/qb.gitignore/meta/qb.yml +0 -8
  300. data/roles/qb.gitignore/vars/main.yml +0 -3
  301. data/roles/qb.meteor_react_component/defaults/main.yml +0 -8
  302. data/roles/qb.meteor_react_component/meta/qb.yml +0 -68
  303. data/roles/qb.meteor_react_component/tasks/main.yml +0 -44
  304. data/roles/qb.meteor_react_component/templates/component.jsx.j2 +0 -75
  305. data/roles/qb.meteor_react_component/templates/style.import.less.j2 +0 -4
  306. data/roles/qb.project/files/requirements.yml +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 352d78a052f07a71c9e99e5cbfdc58024d720fce
4
- data.tar.gz: 68a8aef9f041c5670c580a962d3961f9147d106b
3
+ metadata.gz: b467ba91d8b3b0749fc18e96dd7ef662e7e5b4ba
4
+ data.tar.gz: a1f902cab87c9bf6f3da4987229ece3938dcc2ad
5
5
  SHA512:
6
- metadata.gz: 7813746292a10f1a1d710379a4c7e524b92b295b6c8ce5d84d4c777a8f6e0a7f32838b2eb68691172314f4e8ad596f9ce4061e7fbc7833ceb990a047e4d6ddb1
7
- data.tar.gz: 053bda3ec3198f7dd15d7b237560f0adf085568b7e6925f2e65ebe8670d981fcf7e4cde14d9683d84a2b5c352248ebd54cb4e512e0f418c4dfb23d06ae3acc15
6
+ metadata.gz: 2a8bf457e98e65e95dc121bd64e202a90e29991f3576686ec25d8426ccaaaf3d2e3ebcb3af4230a14de1f883678ba99571b39e381eb20a9652196b508d932141
7
+ data.tar.gz: 3b6a1a2a5773d60d0e3a16d87325a627ebf8138521bc5e4f5a99306aa1a0d818148621c985e03237b3fc7a798adef03769f63edba5c0a9a0a0be230d774ff261
@@ -0,0 +1,12 @@
1
+ [submodule "roles/nrser.blockinfile"]
2
+ path = roles/nrser.blockinfile
3
+ url = git@github.com:nrser/ansible-role-blockinfile
4
+ [submodule "roles/nrser.rbenv_gem"]
5
+ path = roles/nrser.rbenv_gem
6
+ url = git@github.com:nrser/ansible-nrser.rbenv_gem.git
7
+ [submodule "roles/qb.gitignore/files/gitignore"]
8
+ path = roles/qb.gitignore/files/gitignore
9
+ url = git@github.com:nrser/gitignore.git
10
+ [submodule "roles/nrser.rb"]
11
+ path = roles/nrser.rb
12
+ url = git@github.com:nrser/ansible-nrser.rb.git
@@ -4,3 +4,5 @@ qb.gem:
4
4
  license: MIT
5
5
  qb.project:
6
6
  dev_bin: false
7
+ qb.install_gem:
8
+ rubies: global
data/bin/qb CHANGED
@@ -6,6 +6,8 @@ puts "*** LOADING REPO VERSION ***\n\n"
6
6
 
7
7
  root = File.dirname(File.realpath(File.join(__FILE__, '..')))
8
8
 
9
+ puts "source: #{ root }"
10
+
9
11
  Dir.chdir root do
10
12
  require 'bundler/setup'
11
13
  end
File without changes
@@ -51,3 +51,7 @@
51
51
  archive: []
52
52
 
53
53
  tasks:
54
+ - name: install gems
55
+ bundler:
56
+ chdir: "{{ dev_setup_project_root }}"
57
+ gem_path: ./.bundle
data/exe/qb CHANGED
@@ -17,7 +17,7 @@ require 'qb'
17
17
  ROOT = QB::ROOT
18
18
  ROLES_DIR = QB::ROLES_DIR
19
19
  ROLES = Pathname.glob(ROLES_DIR + 'qb.*').map {|path| path.basename.to_s}
20
- DEBUG_ARGS = ['-d', '--debug']
20
+ DEBUG_ARGS = ['-D', '--debug']
21
21
  TMP_DIR = ROOT + 'tmp'
22
22
 
23
23
  # globals
@@ -38,7 +38,8 @@ def format msg, dump = {}
38
38
  end
39
39
 
40
40
  def role? pathname
41
- pathname.directory? && pathname.join('meta', 'qb.yml').file?
41
+ pathname.directory? &&
42
+ ['qb.yml', 'qb'].any? {|fn| pathname.join('meta', fn).file?}
42
43
  end
43
44
 
44
45
  def role_matches
@@ -57,7 +58,7 @@ def set_debug! args
57
58
  end
58
59
  end
59
60
 
60
- def parse! role_arg, var_prefix, vars, defaults, args
61
+ def parse! role, var_prefix, vars, defaults, args
61
62
  positional = vars.select do |var|
62
63
  var['positional'] == true
63
64
  end
@@ -73,8 +74,8 @@ def parse! role_arg, var_prefix, vars, defaults, args
73
74
  options = {}
74
75
 
75
76
  opt_parser = OptionParser.new do |opts|
76
- # opts.banner = "qb #{ role_arg } [OPTIONS]#{ positional_banner }"
77
- opts.banner = "qb #{ role_arg } [OPTIONS] DIRECTORY"
77
+ # opts.banner = "qb #{ role.name } [OPTIONS]#{ positional_banner }"
78
+ opts.banner = "qb #{ role.name } [OPTIONS] DIRECTORY"
78
79
 
79
80
  vars.each do |var|
80
81
  arg_name = var.fetch 'name'
@@ -96,6 +97,21 @@ def parse! role_arg, var_prefix, vars, defaults, args
96
97
  ruby_type = case var['type']
97
98
  when 'string'
98
99
  String
100
+ when Hash
101
+ if var['type'].key? 'one_of'
102
+ klass = Class.new
103
+ opts.accept(klass) {|value|
104
+ if var['type']['one_of'].include? value
105
+ value
106
+ else
107
+ raise ArgumentError, "argument '#{ var['name'] }' must be " +
108
+ "one of: #{ var['type']['one_of'].join(', ') }"
109
+ end
110
+ }
111
+ klass
112
+ else
113
+ raise ArgumentError, "bad type: #{ var['type'].inspect }"
114
+ end
99
115
  else
100
116
  raise ArgumentError, "bad type: #{ var['type'].inspect }"
101
117
  end
@@ -110,14 +126,30 @@ def parse! role_arg, var_prefix, vars, defaults, args
110
126
  end
111
127
 
112
128
  # description
113
- if var.key? 'description'
114
- on_args << var['description']
129
+ description = if var.key? 'description'
130
+ var['description']
115
131
  else
116
- on_args << "set the #{ var_name } variable"
132
+ "set the #{ var_name } variable"
117
133
  end
118
134
 
135
+ if var['type'].is_a?(Hash) && var['type'].key?('one_of')
136
+ lb = "\n" + "\t" * 5
137
+ description += " options:" +
138
+ "#{ lb }#{ var['type']['one_of'].join(lb) }"
139
+ end
140
+
141
+ on_args << description
142
+
119
143
  if defaults.key? var_name
120
- on_args << "(defaults to #{ defaults[var_name] })"
144
+ on_args << if var['type'] == 'boolean'
145
+ if defaults[var_name]
146
+ "default --#{ var['name'] }"
147
+ else
148
+ "default --no-#{ var['name'] }"
149
+ end
150
+ else
151
+ "default = #{ defaults[var_name] }"
152
+ end
121
153
  end
122
154
 
123
155
  debug "adding option", name: arg_name, on_args: on_args
@@ -158,9 +190,18 @@ def with_clean_env &block
158
190
  end
159
191
  end
160
192
 
193
+ def metadata
194
+ if QB.gemspec.metadata
195
+ "metadata:\n" + QB.gemspec.metadata.map {|key, value|
196
+ " #{ key }: #{ value }"
197
+ }.join("\n")
198
+ end
199
+ end
200
+
161
201
  def help
162
202
  puts <<-END
163
203
  version: #{ QB::VERSION }
204
+ #{ metadata }
164
205
 
165
206
  syntax:
166
207
 
@@ -209,12 +250,18 @@ def main args
209
250
  {}
210
251
  end
211
252
 
212
- qb_meta = YAML.load((role.path + 'meta' + 'qb.yml').read) || {}
253
+ qb_meta = if (role.path + 'meta' + 'qb').exist?
254
+ YAML.load Cmds.out! (role.path + 'meta' + 'qb').realpath.to_s
255
+ elsif (role.path + 'meta' + 'qb.yml').exist?
256
+ YAML.load (role.path + 'meta' + 'qb.yml').read
257
+ else
258
+ {}
259
+ end
213
260
 
214
261
  vars = qb_meta['vars'] || []
215
262
  var_prefix = qb_meta['var_prefix'] || role.namespaceless
216
263
 
217
- options = parse! role_arg, var_prefix, vars, defaults, args
264
+ options = parse! role, var_prefix, vars, defaults, args
218
265
 
219
266
  debug options: options
220
267
 
@@ -313,13 +360,13 @@ def main args
313
360
 
314
361
  Dir.chdir ROOT do
315
362
  # install requirements
316
- unless (TMP_DIR + 'roles').directory?
317
- with_clean_env do
318
- Cmds.stream! "ANSIBLE_ROLES_PATH=<%= roles_path %> ansible-galaxy install --ignore-errors -r <%= req_path%>",
319
- req_path: (ROOT + 'requirements.yml'),
320
- roles_path: tmp_roles_path.to_s
321
- end
322
- end
363
+ # unless (TMP_DIR + 'roles').directory?
364
+ # with_clean_env do
365
+ # Cmds.stream! "ANSIBLE_ROLES_PATH=<%= roles_path %> ansible-galaxy install --ignore-errors -r <%= req_path%>",
366
+ # req_path: (ROOT + 'requirements.yml'),
367
+ # roles_path: tmp_roles_path.to_s
368
+ # end
369
+ # end
323
370
  with_clean_env do
324
371
  Cmds.stream! "ANSIBLE_ROLES_PATH=<%= roles_path %> ansible-playbook <%= playbook_path %>",
325
372
  roles_path: ansible_roles_path,
@@ -1,3 +1,9 @@
1
1
  module QB
2
- VERSION = "0.1.10"
2
+ GEM_NAME = 'qb'
3
+
4
+ VERSION = "0.1.11"
5
+
6
+ def self.gemspec
7
+ Gem.loaded_specs[GEM_NAME]
8
+ end
3
9
  end
data/qb.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'qb/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "qb"
7
+ spec.name = QB::GEM_NAME
8
8
  spec.version = QB::VERSION
9
9
  spec.authors = ["nrser"]
10
10
  spec.email = ["neil@ztkae.com"]
@@ -15,6 +15,20 @@ Gem::Specification.new do |spec|
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+
19
+ # get an array of submodule dirs by executing 'pwd' inside each submodule
20
+ gem_dir = File.expand_path(File.dirname(__FILE__)) + "/"
21
+ `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
22
+ Dir.chdir(submodule_path) do
23
+ submodule_relative_path = submodule_path.sub gem_dir, ""
24
+ # issue git ls-files in submodule's directory and
25
+ # prepend the submodule path to create absolute file paths
26
+ `git ls-files`.split($\).each do |filename|
27
+ spec.files << "#{submodule_relative_path}/#{filename}"
28
+ end
29
+ end
30
+ end
31
+
18
32
  spec.bindir = "exe"
19
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
34
  spec.require_paths = ["lib"]
@@ -25,4 +39,15 @@ Gem::Specification.new do |spec|
25
39
 
26
40
  spec.add_dependency "cmds", ">= 0.0.9"
27
41
  spec.add_dependency "nrser-extras", ">= 0.0.3"
42
+
43
+ if QB::VERSION.end_with? '.dev'
44
+ commit = `git rev-parse HEAD`.strip
45
+
46
+ spec.metadata = {
47
+ "built" => Time.now.to_s,
48
+ "branch" => `git rev-parse --abbrev-ref HEAD`.strip,
49
+ "commit" => commit,
50
+ "browse" => "https://github.com/nrser/qb/tree/#{ commit }",
51
+ }
52
+ end
28
53
  end
@@ -0,0 +1,19 @@
1
+ # Contributing to blockinfile role/module
2
+
3
+ If you're going to contribute and make a pull request in the GitHub project,
4
+ please consider including some tests for features/fixes
5
+ you want to add in the PR.
6
+
7
+ # Module testing infrastructure
8
+
9
+ Run `bash run.sh` in tests dir.
10
+ It copies fixtures dir to testing (working) dir,
11
+ then for each of tests (tests/*.yml) it runs ansible-playbook twice
12
+ (the second run is for idempotency check)
13
+ and see difference between files in testing dir and ones in expected dir.
14
+
15
+ You can add your own tests by adding the following files and dirs:
16
+ - tests/test-the-feature.yml - A playbook to test "the feature."
17
+ - tests/fixtures/test-the-feature/... - Put fixtures to be tested.
18
+ - tests/expected/test-the-feature/... - Put expected results after running playbook.
19
+
@@ -0,0 +1,262 @@
1
+ # Ansible Role: blockinfile
2
+
3
+ This role contains no tasks, but provides blockinfile module
4
+ which might be useful when you want to maintain multi-line snippets
5
+ in config files in /etc.
6
+
7
+ Ansible Galaxy Page: [https://galaxy.ansible.com/list#/roles/1475](https://galaxy.ansible.com/list#/roles/1475)
8
+
9
+ **Request for review:**
10
+ [The pull request to ansible-modules-extras](https://github.com/ansible/ansible-modules-extras/pull/832)
11
+ has been made to include blockinfile module
12
+ in the official distribution of Ansible,
13
+ which enables you to use blockinfile as a standard module without this role!
14
+
15
+ If you use this module and feel it's useful,
16
+ please leave some endorsement comments on the PR.
17
+ I greatly appreciate if you're
18
+ [an eligible reviewer (existing module author)](https://github.com/ansible/ansible-modules-extras/blob/devel/REVIEWERS.md)
19
+ and could take some time to review the PR,
20
+ otherwise if you could ask reviewers of your acquiaintance for the review.
21
+ It needs two +1 votes from reviewers in order to be nominated for inclusion.
22
+
23
+ ## blockinfile Module
24
+
25
+ This module will insert/update/remove a block of multi-line text
26
+ surrounded by the marker lines.
27
+
28
+ Example task:
29
+
30
+ ```yaml
31
+ - blockinfile:
32
+ dest: /etc/network/interfaces
33
+ block: |
34
+ iface eth0 inet static
35
+ address 192.168.0.1
36
+ netmask 255.255.255.0
37
+ ```
38
+
39
+ Text inserted/updated by the task in /etc/network/interfaces:
40
+
41
+ ```
42
+ # BEGIN ANSIBLE MANAGED BLOCK
43
+ iface eth0 inet static
44
+ address 192.168.0.1
45
+ netmask 255.255.255.0
46
+ # END ANSIBLE MANAGED BLOCK
47
+ ```
48
+
49
+ It uses marker lines `# {BEGIN/END} ANSIBLE MANAGED BLOCK` as default.
50
+ You can specify alternative marker lines by `marker` option
51
+ when you need to update files in other formats like HTML,
52
+ or run multiple blockinfile tasks on the same file.
53
+
54
+ ### Options
55
+
56
+ If this section doesn't show nicely in Ansible Galaxy Page,
57
+ please refer to equivalent in
58
+ [GitHub Page](https://github.com/yaegashi/ansible-role-blockinfile#options).
59
+
60
+ > <table border=1 cellpadding=4>
61
+ <tr>
62
+ <th class="head">parameter</th>
63
+ <th class="head">required</th>
64
+ <th class="head">default</th>
65
+ <th class="head">choices</th>
66
+ <th class="head">comments</th>
67
+ </tr>
68
+ <tr>
69
+ <td>backup<br/><div style="font-size: small;"></div></td>
70
+ <td>no</td>
71
+ <td>no</td>
72
+ <td><ul><li>yes</li><li>no</li></ul></td>
73
+ <td><div>Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.</div></td></tr>
74
+ <tr>
75
+ <td>block<br/><div style="font-size: small;"></div></td>
76
+ <td>no</td>
77
+ <td></td>
78
+ <td><ul></ul></td>
79
+ <td><div>The text to insert inside the marker lines. If it's missing or an empty string, the block will be removed as if <code>state</code> were specified to <code>absent</code>.</div></br>
80
+ <div style="font-size: small;">aliases: content<div></td></tr>
81
+ <tr>
82
+ <td>create<br/><div style="font-size: small;"></div></td>
83
+ <td>no</td>
84
+ <td>no</td>
85
+ <td><ul><li>yes</li><li>no</li></ul></td>
86
+ <td><div>Create a new file if it doesn't exist.</div></td></tr>
87
+ <tr>
88
+ <td>dest<br/><div style="font-size: small;"></div></td>
89
+ <td>yes</td>
90
+ <td></td>
91
+ <td><ul></ul></td>
92
+ <td><div>The file to modify.</div></br>
93
+ <div style="font-size: small;">aliases: name, destfile<div></td></tr>
94
+ <tr>
95
+ <td>follow<br/><div style="font-size: small;"> (added in 1.8)</div></td>
96
+ <td>no</td>
97
+ <td>no</td>
98
+ <td><ul><li>yes</li><li>no</li></ul></td>
99
+ <td><div>This flag indicates that filesystem links, if they exist, should be followed.</div></td></tr>
100
+ <tr>
101
+ <td>group<br/><div style="font-size: small;"></div></td>
102
+ <td>no</td>
103
+ <td></td>
104
+ <td><ul></ul></td>
105
+ <td><div>name of the group that should own the file/directory, as would be fed to <em>chown</em></div></td></tr>
106
+ <tr>
107
+ <td>insertafter<br/><div style="font-size: small;"></div></td>
108
+ <td>no</td>
109
+ <td>EOF</td>
110
+ <td><ul><li>EOF</li><li>*regex*</li></ul></td>
111
+ <td><div>If specified, the block will be inserted after the last match of specified regular expression. A special value is available; <code>EOF</code> for inserting the block at the end of the file. If specified regular expresion has no matches, <code>EOF</code> will be used instead.</div></td></tr>
112
+ <tr>
113
+ <td>insertbefore<br/><div style="font-size: small;"></div></td>
114
+ <td>no</td>
115
+ <td></td>
116
+ <td><ul><li>BOF</li><li>*regex*</li></ul></td>
117
+ <td><div>If specified, the block will be inserted before the last match of specified regular expression. A special value is available; <code>BOF</code> for inserting the block at the beginning of the file. If specified regular expresion has no matches, the block will be inserted at the end of the file.</div></td></tr>
118
+ <tr>
119
+ <td>marker<br/><div style="font-size: small;"></div></td>
120
+ <td>no</td>
121
+ <td># {mark} ANSIBLE MANAGED BLOCK</td>
122
+ <td><ul></ul></td>
123
+ <td><div>The marker line template. "{mark}" will be replaced with "BEGIN" or "END".</div></td></tr>
124
+ <tr>
125
+ <td>mode<br/><div style="font-size: small;"></div></td>
126
+ <td>no</td>
127
+ <td></td>
128
+ <td><ul></ul></td>
129
+ <td><div>mode the file or directory should be. For those used to <em>/usr/bin/chmod</em> remember that modes are actually octal numbers (like 0644). Leaving off the leading zero will likely have unexpected results. As of version 1.8, the mode may be specified as a symbolic mode (for example, <code>u+rwx</code> or <code>u=rw,g=r,o=r</code>).</div></td></tr>
130
+ <tr>
131
+ <td>owner<br/><div style="font-size: small;"></div></td>
132
+ <td>no</td>
133
+ <td></td>
134
+ <td><ul></ul></td>
135
+ <td><div>name of the user that should own the file/directory, as would be fed to <em>chown</em></div></td></tr>
136
+ <tr>
137
+ <td>selevel<br/><div style="font-size: small;"></div></td>
138
+ <td>no</td>
139
+ <td>s0</td>
140
+ <td><ul></ul></td>
141
+ <td><div>level part of the SELinux file context. This is the MLS/MCS attribute, sometimes known as the <code>range</code>. <code>_default</code> feature works as for <em>seuser</em>.</div></td></tr>
142
+ <tr>
143
+ <td>serole<br/><div style="font-size: small;"></div></td>
144
+ <td>no</td>
145
+ <td></td>
146
+ <td><ul></ul></td>
147
+ <td><div>role part of SELinux file context, <code>_default</code> feature works as for <em>seuser</em>.</div></td></tr>
148
+ <tr>
149
+ <td>setype<br/><div style="font-size: small;"></div></td>
150
+ <td>no</td>
151
+ <td></td>
152
+ <td><ul></ul></td>
153
+ <td><div>type part of SELinux file context, <code>_default</code> feature works as for <em>seuser</em>.</div></td></tr>
154
+ <tr>
155
+ <td>seuser<br/><div style="font-size: small;"></div></td>
156
+ <td>no</td>
157
+ <td></td>
158
+ <td><ul></ul></td>
159
+ <td><div>user part of SELinux file context. Will default to system policy, if applicable. If set to <code>_default</code>, it will use the <code>user</code> portion of the policy if available</div></td></tr>
160
+ <tr>
161
+ <td>state<br/><div style="font-size: small;"></div></td>
162
+ <td>no</td>
163
+ <td>present</td>
164
+ <td><ul><li>present</li><li>absent</li></ul></td>
165
+ <td><div>Whether the block should be there or not.</div></td></tr>
166
+ <tr>
167
+ <td>validate<br/><div style="font-size: small;"></div></td>
168
+ <td>no</td>
169
+ <td>None</td>
170
+ <td><ul></ul></td>
171
+ <td><div>The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the example below. The command is passed securely so shell features like expansion and pipes won't work.</div></td></tr>
172
+ </table>
173
+
174
+ ### Examples
175
+
176
+ ```yaml
177
+ - name: insert/update "Match User" configuation block in /etc/ssh/sshd_config
178
+ blockinfile:
179
+ dest: /etc/ssh/sshd_config
180
+ block: |
181
+ Match User ansible-agent
182
+ PasswordAuthentication no
183
+ ```
184
+
185
+ ```yaml
186
+ - name: insert/update eth0 configuration stanza in /etc/network/interfaces
187
+ (it might be better to copy files into /etc/network/interfaces.d/)
188
+ blockinfile:
189
+ dest: /etc/network/interfaces
190
+ block: |
191
+ iface eth0 inet static
192
+ address 192.168.0.1
193
+ netmask 255.255.255.0
194
+ ```
195
+
196
+ ```yaml
197
+ - name: insert/update HTML surrounded by custom markers after <body> line
198
+ blockinfile:
199
+ dest: /var/www/html/index.html
200
+ marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
201
+ insertafter: "<body>"
202
+ content: |
203
+ <h1>Welcome to {{ansible_hostname}}</h1>
204
+ <p>Last updated on {{ansible_date_time.iso8601}}</p>
205
+ ```
206
+
207
+ ```yaml
208
+ - name: remove HTML as well as surrounding markers
209
+ blockinfile:
210
+ dest: /var/www/html/index.html
211
+ marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
212
+ content: ""
213
+ ```
214
+
215
+ ## Requirements
216
+
217
+ None.
218
+
219
+ ## Role Variables
220
+
221
+ None.
222
+
223
+ ## Dependencies
224
+
225
+ None.
226
+
227
+ ## Example Playbook
228
+
229
+ Complete playbook
230
+ that makes SSH password authentication for specific user prohibited,
231
+ then restarts sshd if needed.
232
+
233
+ ```yaml
234
+ ---
235
+ - hosts: all
236
+ remote_user: ansible-agent
237
+ sudo: yes
238
+ roles:
239
+ - yaegashi.blockinfile
240
+ tasks:
241
+ - name: Prohibit SSH password authentication for $SUDO_USER
242
+ blockinfile:
243
+ dest: /etc/ssh/sshd_config
244
+ backup: yes
245
+ content: |
246
+ Match User {{ansible_env.SUDO_USER}}
247
+ PasswordAuthentication no
248
+ notify: Restart sshd
249
+ handlers:
250
+ - name: Restart sshd
251
+ service
252
+ name: ssh
253
+ state: restarted
254
+ ```
255
+
256
+ ## License
257
+
258
+ GPLv3+
259
+
260
+ ## Author Information
261
+
262
+ [YAEGASHI Takeshi](https://github.com/yaegashi)