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
@@ -0,0 +1,354 @@
1
+ #!/usr/bin/python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # (c) 2014, 2015 YAEGASHI Takeshi <yaegashi@debian.org>
5
+ #
6
+ # This file is part of Ansible
7
+ #
8
+ # Ansible is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Ansible is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ import re
22
+ import os
23
+ import tempfile
24
+
25
+ from itertools import chain
26
+
27
+ import pprint
28
+
29
+ DOCUMENTATION = """
30
+ ---
31
+ module: blockinfile
32
+ author:
33
+ - 'YAEGASHI Takeshi (@yaegashi)'
34
+ extends_documentation_fragment:
35
+ - files
36
+ - validate
37
+ short_description: Insert/update/remove a text block
38
+ surrounded by marker lines.
39
+ version_added: '2.0'
40
+ description:
41
+ - This module will insert/update/remove a block of multi-line text
42
+ surrounded by customizable marker lines.
43
+ notes:
44
+ - This module supports check mode.
45
+ options:
46
+ dest:
47
+ aliases: [ name, destfile ]
48
+ required: true
49
+ description:
50
+ - The file to modify.
51
+ state:
52
+ required: false
53
+ choices: [ present, absent ]
54
+ default: present
55
+ description:
56
+ - Whether the block should be there or not.
57
+ marker:
58
+ required: false
59
+ default: '# {mark} ANSIBLE MANAGED BLOCK'
60
+ description:
61
+ - The marker line template.
62
+ "{mark}" will be replaced with "BEGIN" or "END".
63
+ block:
64
+ aliases: [ content ]
65
+ required: false
66
+ default: ''
67
+ description:
68
+ - The text to insert inside the marker lines.
69
+ If it's missing or an empty string,
70
+ the block will be removed as if C(state) were specified to C(absent).
71
+ insertafter:
72
+ required: false
73
+ default: EOF
74
+ description:
75
+ - If specified, the block will be inserted after the last match of
76
+ specified regular expression. A special value is available; C(EOF) for
77
+ inserting the block at the end of the file. If specified regular
78
+ expresion has no matches, C(EOF) will be used instead.
79
+ choices: [ 'EOF', '*regex*' ]
80
+ insertbefore:
81
+ required: false
82
+ default: None
83
+ description:
84
+ - If specified, the block will be inserted before the last match of
85
+ specified regular expression. A special value is available; C(BOF) for
86
+ inserting the block at the beginning of the file. If specified regular
87
+ expresion has no matches, the block will be inserted at the end of the
88
+ file.
89
+ choices: [ 'BOF', '*regex*' ]
90
+ create:
91
+ required: false
92
+ default: 'no'
93
+ choices: [ 'yes', 'no' ]
94
+ description:
95
+ - Create a new file if it doesn't exist.
96
+ backup:
97
+ required: false
98
+ default: 'no'
99
+ choices: [ 'yes', 'no' ]
100
+ description:
101
+ - Create a backup file including the timestamp information so you can
102
+ get the original file back if you somehow clobbered it incorrectly.
103
+ """
104
+
105
+ EXAMPLES = r"""
106
+ - name: insert/update "Match User" configuation block in /etc/ssh/sshd_config
107
+ blockinfile:
108
+ dest: /etc/ssh/sshd_config
109
+ block: |
110
+ Match User ansible-agent
111
+ PasswordAuthentication no
112
+
113
+ - name: insert/update eth0 configuration stanza in /etc/network/interfaces
114
+ (it might be better to copy files into /etc/network/interfaces.d/)
115
+ blockinfile:
116
+ dest: /etc/network/interfaces
117
+ block: |
118
+ iface eth0 inet static
119
+ address 192.168.0.1
120
+ netmask 255.255.255.0
121
+
122
+ - name: insert/update HTML surrounded by custom markers after <body> line
123
+ blockinfile:
124
+ dest: /var/www/html/index.html
125
+ marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
126
+ insertafter: "<body>"
127
+ content: |
128
+ <h1>Welcome to {{ansible_hostname}}</h1>
129
+ <p>Last updated on {{ansible_date_time.iso8601}}</p>
130
+
131
+ - name: remove HTML as well as surrounding markers
132
+ blockinfile:
133
+ dest: /var/www/html/index.html
134
+ marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
135
+ content: ""
136
+ """
137
+
138
+
139
+ def write_changes(module, contents, dest):
140
+
141
+ tmpfd, tmpfile = tempfile.mkstemp()
142
+ f = os.fdopen(tmpfd, 'wb')
143
+ f.write(contents)
144
+ f.close()
145
+
146
+ validate = module.params.get('validate', None)
147
+ valid = not validate
148
+ if validate:
149
+ if "%s" not in validate:
150
+ module.fail_json(msg="validate must contain %%s: %s" % (validate))
151
+ (rc, out, err) = module.run_command(validate % tmpfile)
152
+ valid = rc == 0
153
+ if rc != 0:
154
+ module.fail_json(msg='failed to validate: '
155
+ 'rc:%s error:%s' % (rc, err))
156
+ if valid:
157
+ module.atomic_move(tmpfile, dest)
158
+
159
+
160
+ def check_file_attrs(module, changed, message):
161
+
162
+ file_args = module.load_file_common_arguments(module.params)
163
+ if module.set_file_attributes_if_different(file_args, False):
164
+
165
+ if changed:
166
+ message += " and "
167
+ changed = True
168
+ message += "ownership, perms or SE linux context changed"
169
+
170
+ return message, changed
171
+
172
+
173
+ def startswith_lines(marker, lines, index):
174
+ for i in range(0, len(marker)):
175
+ if lines[i] == marker[0 + index]:
176
+ pass
177
+ else:
178
+ return False
179
+ return True
180
+
181
+
182
+ def main():
183
+ module = AnsibleModule(
184
+ argument_spec=dict(
185
+ dest=dict(required=True, aliases=['name', 'destfile']),
186
+ state=dict(default='present', choices=['absent', 'present']),
187
+ marker=dict(default='# {mark} ANSIBLE MANAGED BLOCK', type='str'),
188
+ block=dict(default='', type='str', aliases=['content']),
189
+ insertafter=dict(default=None),
190
+ insertbefore=dict(default=None),
191
+ create=dict(default=False, type='bool'),
192
+ backup=dict(default=False, type='bool'),
193
+ validate=dict(default=None, type='str'),
194
+ beginmarker=dict(default=None, type='str'),
195
+ endmarker=dict(default=None, type='str'),
196
+ ),
197
+ mutually_exclusive=[['insertbefore', 'insertafter']],
198
+ add_file_common_args=True,
199
+ supports_check_mode=True
200
+ )
201
+
202
+ params = module.params
203
+ dest = os.path.expanduser(params['dest'])
204
+ if module.boolean(params.get('follow', None)):
205
+ dest = os.path.realpath(dest)
206
+
207
+ if os.path.isdir(dest):
208
+ module.fail_json(rc=256,
209
+ msg='Destination %s is a directory !' % dest)
210
+
211
+ if not os.path.exists(dest):
212
+ if not module.boolean(params['create']):
213
+ module.fail_json(rc=257,
214
+ msg='Destination %s does not exist !' % dest)
215
+ original = ''
216
+ lines = []
217
+ else:
218
+ f = open(dest, 'rb')
219
+ original = f.read()
220
+ f.close()
221
+ lines = original.splitlines()
222
+
223
+ insertbefore = params['insertbefore']
224
+ insertafter = params['insertafter']
225
+ block = params['block']
226
+ marker = params['marker']
227
+ present = params['state'] == 'present'
228
+
229
+ if insertbefore is None and insertafter is None:
230
+ insertafter = 'EOF'
231
+
232
+ if insertafter not in (None, 'EOF'):
233
+ insertre = re.compile(insertafter)
234
+ elif insertbefore not in (None, 'BOF'):
235
+ insertre = re.compile(insertbefore)
236
+ else:
237
+ insertre = None
238
+
239
+ if params['beginmarker']:
240
+ marker0 = params['beginmarker']
241
+ else:
242
+ marker0 = re.sub(r'{mark}', 'BEGIN', marker)
243
+
244
+ if params['endmarker']:
245
+ marker1 = params['endmarker']
246
+ else:
247
+ marker1 = re.sub(r'{mark}', 'END', marker)
248
+
249
+ if present and block:
250
+ # Escape seqeuences like '\n' need to be handled in Ansible 1.x
251
+ if module.ansible_version.startswith('1.'):
252
+ block = re.sub('', block, '')
253
+ marker0 = re.sub('', marker0, '')
254
+ marker1 = re.sub('', marker1, '')
255
+ else:
256
+ # blocklines = []
257
+ pass
258
+
259
+ # make sure each chunk ends with a newline if it doens't already
260
+ if block != '' and not block.endswith("\n"):
261
+ block = block + "\n"
262
+
263
+ if not marker0.endswith("\n"):
264
+ marker0 = marker0 + "\n"
265
+
266
+ if not marker1.endswith("\n"):
267
+ marker1 = marker1 + "\n"
268
+
269
+ replacement = marker0 + block + marker1
270
+
271
+ # module.fail_json(msg=pprint.pformat(replacement))
272
+
273
+ exact_re = re.compile(
274
+ (re.escape(marker0) + re.escape(block) + re.escape(marker1)),
275
+ (re.MULTILINE | re.DOTALL)
276
+ )
277
+
278
+ # this regex will match if the markers are present but the contents is
279
+ # different
280
+ different_re = re.compile(
281
+ "%s.*%s" % (re.escape(marker0), re.escape(marker1)),
282
+ (re.MULTILINE | re.DOTALL)
283
+ )
284
+
285
+ result = original
286
+
287
+ # there are four cases:
288
+ #
289
+ # 1. removal - this is it's own case because the markers are
290
+ # removed along with the content.
291
+ #
292
+ if not present or block == '':
293
+ result = different_re.sub('', original)
294
+
295
+ # 2. no-op - the exact text is already present
296
+ elif exact_re.search(original):
297
+ pass
298
+
299
+ # 3. replace - the markers are present but the content is different
300
+ elif different_re.search(original):
301
+ result = different_re.sub(replacement, original)
302
+
303
+ # 4. insert - the markers
304
+ else:
305
+ lines = original.splitlines()
306
+ blocklines = replacement.splitlines()
307
+
308
+ n0 = None
309
+ if insertre is not None:
310
+ for i, line in enumerate(lines):
311
+ if insertre.search(line):
312
+ n0 = i
313
+ if n0 is None:
314
+ n0 = len(lines)
315
+ elif insertafter is not None:
316
+ n0 += 1
317
+ elif insertbefore is not None:
318
+ n0 = 0 # insertbefore=BOF
319
+ else:
320
+ n0 = len(lines) # insertafter=EOF
321
+
322
+ lines[n0:n0] = blocklines
323
+
324
+ if lines:
325
+ result = '\n'.join(lines)+'\n'
326
+ else:
327
+ result = ''
328
+
329
+ if original == result:
330
+ msg = ''
331
+ changed = False
332
+ elif original == '':
333
+ msg = 'File created'
334
+ changed = True
335
+ elif not block:
336
+ msg = 'Block removed'
337
+ changed = True
338
+ else:
339
+ msg = 'Block inserted'
340
+ changed = True
341
+
342
+ if changed and not module.check_mode:
343
+ if module.boolean(params['backup']) and os.path.exists(dest):
344
+ module.backup_local(dest)
345
+ write_changes(module, result, dest)
346
+
347
+ msg, changed = check_file_attrs(module, changed, msg)
348
+ module.exit_json(changed=changed, msg=msg)
349
+
350
+ # import module snippets
351
+ from ansible.module_utils.basic import *
352
+ from ansible.module_utils.splitter import *
353
+ if __name__ == '__main__':
354
+ main()
@@ -0,0 +1,10 @@
1
+ ---
2
+ galaxy_info:
3
+ author: YAEGASHI Takeshi
4
+ description: Contains blockinfile module
5
+ to insert/update/remove a text block surrounded by marker lines
6
+ license: GPLv3+
7
+ min_ansible_version: 1.2
8
+ categories:
9
+ - system
10
+ dependencies: []
@@ -0,0 +1 @@
1
+ /testing
@@ -0,0 +1,5 @@
1
+ # BEGIN ANSIBLE MANAGED BLOCK
2
+ iface eth0 inet static
3
+ address 192.168.0.1
4
+ netmask 255.255.255.0
5
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,6 @@
1
+ 111 222 333
2
+ !!! @@@ ###
3
+ # BEGIN ANSIBLE MANAGED BLOCK
4
+ aaa bbb ccc
5
+ AAA BBB CCC
6
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,5 @@
1
+ <h1>111 222 333</h1>
2
+ <!-- BEGIN ANSIBLE MANAGED BLOCK -->
3
+ <h2>aaa bbb ccc</h2>
4
+ <h2>AAA BBB CCC</h2>
5
+ <!-- END ANSIBLE MANAGED BLOCK -->
@@ -0,0 +1,2 @@
1
+ 111 222 333
2
+ !!! @@@ ###
@@ -0,0 +1,6 @@
1
+ 111 222 333
2
+ # BEGIN ANSIBLE MANAGED BLOCK
3
+ aaa bbb ccc
4
+ AAA BBB CCC
5
+ # END ANSIBLE MANAGED BLOCK
6
+ !!! @@@ ###
@@ -0,0 +1,4 @@
1
+ AAA BBB CCC
2
+ # BEGIN ANSIBLE MANAGED BLOCK
3
+ aaa bbb ccc
4
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,4 @@
1
+ AAA BBB CCC
2
+ # BEGIN ANSIBLE MANAGED BLOCK
3
+ aaa bbb ccc
4
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,6 @@
1
+ 111 222 333
2
+ !!! @@@ ###
3
+ # BEGIN ANSIBLE MANAGED BLOCK
4
+ aaa bbb ccc
5
+ AAA BBB CCC
6
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,6 @@
1
+ 111 222 333
2
+ !!! @@@ ###
3
+ # BEGIN ANSIBLE MANAGED BLOCK
4
+ aaa bbb ccc
5
+ AAA BBB CCC
6
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,2 @@
1
+ 111 222 333
2
+ !!! @@@ ###
@@ -0,0 +1,2 @@
1
+ 111 222 333
2
+ !!! @@@ ###
@@ -0,0 +1,6 @@
1
+ 111 222 333
2
+ !!! @@@ ###
3
+ # BEGIN ANSIBLE MANAGED BLOCK
4
+ aaa bbb ccc
5
+ AAA BBB CCC
6
+ # END ANSIBLE MANAGED BLOCK
@@ -0,0 +1,8 @@
1
+ 111 222 333
2
+ !!! @@@ ###
3
+ 111 222 333
4
+ # BEGIN ANSIBLE MANAGED BLOCK
5
+ aaa bbb ccc
6
+ AAA BBB CCC
7
+ # END ANSIBLE MANAGED BLOCK
8
+ !!! @@@ ###