specinfra-cisco 2.40.2

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 (390) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +19 -0
  5. data/Gemfile +4 -0
  6. data/Guardfile +12 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +29 -0
  9. data/Rakefile +43 -0
  10. data/appveyor.yml +56 -0
  11. data/examples/multiple_backends.rb +46 -0
  12. data/lib/specinfra.rb +45 -0
  13. data/lib/specinfra/backend.rb +12 -0
  14. data/lib/specinfra/backend/base.rb +55 -0
  15. data/lib/specinfra/backend/cmd.rb +68 -0
  16. data/lib/specinfra/backend/docker.rb +112 -0
  17. data/lib/specinfra/backend/dockerfile.rb +32 -0
  18. data/lib/specinfra/backend/exec.rb +152 -0
  19. data/lib/specinfra/backend/lxc.rb +45 -0
  20. data/lib/specinfra/backend/powershell/command.rb +40 -0
  21. data/lib/specinfra/backend/powershell/script_helper.rb +86 -0
  22. data/lib/specinfra/backend/powershell/support/check_file_access_rules.ps1 +8 -0
  23. data/lib/specinfra/backend/powershell/support/crop_text.ps1 +11 -0
  24. data/lib/specinfra/backend/powershell/support/find_group.ps1 +8 -0
  25. data/lib/specinfra/backend/powershell/support/find_iis_component.ps1 +90 -0
  26. data/lib/specinfra/backend/powershell/support/find_installed_application.ps1 +37 -0
  27. data/lib/specinfra/backend/powershell/support/find_installed_hot_fix.ps1 +18 -0
  28. data/lib/specinfra/backend/powershell/support/find_scheduled_task.ps1 +7 -0
  29. data/lib/specinfra/backend/powershell/support/find_service.ps1 +5 -0
  30. data/lib/specinfra/backend/powershell/support/find_user.ps1 +8 -0
  31. data/lib/specinfra/backend/powershell/support/find_usergroup.ps1 +9 -0
  32. data/lib/specinfra/backend/powershell/support/is_port_listening.ps1 +14 -0
  33. data/lib/specinfra/backend/powershell/support/is_remote_port_listening.ps1 +51 -0
  34. data/lib/specinfra/backend/powershell/support/list_windows_features.ps1 +68 -0
  35. data/lib/specinfra/backend/shell_script.rb +29 -0
  36. data/lib/specinfra/backend/ssh.rb +182 -0
  37. data/lib/specinfra/backend/telnet.rb +111 -0
  38. data/lib/specinfra/backend/winrm.rb +29 -0
  39. data/lib/specinfra/command.rb +304 -0
  40. data/lib/specinfra/command/aix.rb +1 -0
  41. data/lib/specinfra/command/aix/base.rb +2 -0
  42. data/lib/specinfra/command/aix/base/file.rb +21 -0
  43. data/lib/specinfra/command/aix/base/group.rb +8 -0
  44. data/lib/specinfra/command/aix/base/host.rb +17 -0
  45. data/lib/specinfra/command/aix/base/inventory.rb +38 -0
  46. data/lib/specinfra/command/aix/base/package.rb +11 -0
  47. data/lib/specinfra/command/aix/base/port.rb +8 -0
  48. data/lib/specinfra/command/aix/base/service.rb +11 -0
  49. data/lib/specinfra/command/aix/base/user.rb +15 -0
  50. data/lib/specinfra/command/alpine.rb +1 -0
  51. data/lib/specinfra/command/alpine/base.rb +2 -0
  52. data/lib/specinfra/command/alpine/base/package.rb +19 -0
  53. data/lib/specinfra/command/alpine/base/process.rb +20 -0
  54. data/lib/specinfra/command/alpine/base/service.rb +11 -0
  55. data/lib/specinfra/command/amazon.rb +2 -0
  56. data/lib/specinfra/command/amazon/base.rb +2 -0
  57. data/lib/specinfra/command/arch.rb +1 -0
  58. data/lib/specinfra/command/arch/base.rb +11 -0
  59. data/lib/specinfra/command/arch/base/file.rb +14 -0
  60. data/lib/specinfra/command/arch/base/package.rb +30 -0
  61. data/lib/specinfra/command/arch/base/service.rb +5 -0
  62. data/lib/specinfra/command/base.rb +21 -0
  63. data/lib/specinfra/command/base/bond.rb +2 -0
  64. data/lib/specinfra/command/base/bridge.rb +2 -0
  65. data/lib/specinfra/command/base/cron.rb +17 -0
  66. data/lib/specinfra/command/base/file.rb +179 -0
  67. data/lib/specinfra/command/base/fstab.rb +2 -0
  68. data/lib/specinfra/command/base/group.rb +26 -0
  69. data/lib/specinfra/command/base/host.rb +25 -0
  70. data/lib/specinfra/command/base/interface.rb +2 -0
  71. data/lib/specinfra/command/base/inventory.rb +2 -0
  72. data/lib/specinfra/command/base/ip6tables.rb +2 -0
  73. data/lib/specinfra/command/base/ipfilter.rb +2 -0
  74. data/lib/specinfra/command/base/ipnat.rb +2 -0
  75. data/lib/specinfra/command/base/iptables.rb +2 -0
  76. data/lib/specinfra/command/base/kernel_module.rb +2 -0
  77. data/lib/specinfra/command/base/localhost.rb +7 -0
  78. data/lib/specinfra/command/base/lxc_container.rb +2 -0
  79. data/lib/specinfra/command/base/mail_alias.rb +12 -0
  80. data/lib/specinfra/command/base/package.rb +51 -0
  81. data/lib/specinfra/command/base/port.rb +10 -0
  82. data/lib/specinfra/command/base/ppa.rb +2 -0
  83. data/lib/specinfra/command/base/process.rb +15 -0
  84. data/lib/specinfra/command/base/routing_table.rb +9 -0
  85. data/lib/specinfra/command/base/selinux.rb +2 -0
  86. data/lib/specinfra/command/base/selinux_module.rb +2 -0
  87. data/lib/specinfra/command/base/service.rb +15 -0
  88. data/lib/specinfra/command/base/user.rb +94 -0
  89. data/lib/specinfra/command/base/yumrepo.rb +3 -0
  90. data/lib/specinfra/command/base/zfs.rb +1 -0
  91. data/lib/specinfra/command/coreos.rb +1 -0
  92. data/lib/specinfra/command/coreos/base.rb +2 -0
  93. data/lib/specinfra/command/coreos/base/service.rb +5 -0
  94. data/lib/specinfra/command/cumulus.rb +11 -0
  95. data/lib/specinfra/command/cumulus/base.rb +2 -0
  96. data/lib/specinfra/command/cumulus/base/ppa.rb +17 -0
  97. data/lib/specinfra/command/cumulus/base/service.rb +7 -0
  98. data/lib/specinfra/command/darwin.rb +1 -0
  99. data/lib/specinfra/command/darwin/base.rb +2 -0
  100. data/lib/specinfra/command/darwin/base/file.rb +47 -0
  101. data/lib/specinfra/command/darwin/base/host.rb +11 -0
  102. data/lib/specinfra/command/darwin/base/inventory.rb +28 -0
  103. data/lib/specinfra/command/darwin/base/package.rb +41 -0
  104. data/lib/specinfra/command/darwin/base/port.rb +8 -0
  105. data/lib/specinfra/command/darwin/base/service.rb +11 -0
  106. data/lib/specinfra/command/darwin/base/user.rb +15 -0
  107. data/lib/specinfra/command/debian.rb +1 -0
  108. data/lib/specinfra/command/debian/base.rb +11 -0
  109. data/lib/specinfra/command/debian/base/package.rb +33 -0
  110. data/lib/specinfra/command/debian/base/ppa.rb +2 -0
  111. data/lib/specinfra/command/debian/base/service.rb +32 -0
  112. data/lib/specinfra/command/debian/v8.rb +2 -0
  113. data/lib/specinfra/command/debian/v8/service.rb +5 -0
  114. data/lib/specinfra/command/esxi.rb +1 -0
  115. data/lib/specinfra/command/esxi/base.rb +2 -0
  116. data/lib/specinfra/command/esxi/base/package.rb +7 -0
  117. data/lib/specinfra/command/fedora.rb +1 -0
  118. data/lib/specinfra/command/fedora/base.rb +2 -0
  119. data/lib/specinfra/command/fedora/base/service.rb +11 -0
  120. data/lib/specinfra/command/fedora/v15.rb +2 -0
  121. data/lib/specinfra/command/fedora/v15/service.rb +5 -0
  122. data/lib/specinfra/command/freebsd.rb +1 -0
  123. data/lib/specinfra/command/freebsd/base.rb +3 -0
  124. data/lib/specinfra/command/freebsd/base/file.rb +42 -0
  125. data/lib/specinfra/command/freebsd/base/interface.rb +35 -0
  126. data/lib/specinfra/command/freebsd/base/inventory.rb +28 -0
  127. data/lib/specinfra/command/freebsd/base/package.rb +19 -0
  128. data/lib/specinfra/command/freebsd/base/port.rb +8 -0
  129. data/lib/specinfra/command/freebsd/base/routing_table.rb +9 -0
  130. data/lib/specinfra/command/freebsd/base/service.rb +11 -0
  131. data/lib/specinfra/command/freebsd/base/user.rb +20 -0
  132. data/lib/specinfra/command/freebsd/v10.rb +2 -0
  133. data/lib/specinfra/command/freebsd/v10/package.rb +31 -0
  134. data/lib/specinfra/command/freebsd/v6.rb +2 -0
  135. data/lib/specinfra/command/freebsd/v6/user.rb +19 -0
  136. data/lib/specinfra/command/gentoo.rb +1 -0
  137. data/lib/specinfra/command/gentoo/base.rb +2 -0
  138. data/lib/specinfra/command/gentoo/base/package.rb +7 -0
  139. data/lib/specinfra/command/gentoo/base/service.rb +19 -0
  140. data/lib/specinfra/command/linux.rb +1 -0
  141. data/lib/specinfra/command/linux/base.rb +2 -0
  142. data/lib/specinfra/command/linux/base/bond.rb +11 -0
  143. data/lib/specinfra/command/linux/base/bridge.rb +11 -0
  144. data/lib/specinfra/command/linux/base/file.rb +20 -0
  145. data/lib/specinfra/command/linux/base/fstab.rb +9 -0
  146. data/lib/specinfra/command/linux/base/interface.rb +38 -0
  147. data/lib/specinfra/command/linux/base/inventory.rb +31 -0
  148. data/lib/specinfra/command/linux/base/ip6tables.rb +15 -0
  149. data/lib/specinfra/command/linux/base/iptables.rb +12 -0
  150. data/lib/specinfra/command/linux/base/kernel_module.rb +7 -0
  151. data/lib/specinfra/command/linux/base/lxc_container.rb +11 -0
  152. data/lib/specinfra/command/linux/base/package.rb +2 -0
  153. data/lib/specinfra/command/linux/base/ppa.rb +2 -0
  154. data/lib/specinfra/command/linux/base/selinux.rb +12 -0
  155. data/lib/specinfra/command/linux/base/selinux_module.rb +16 -0
  156. data/lib/specinfra/command/linux/base/service.rb +2 -0
  157. data/lib/specinfra/command/linux/base/yumrepo.rb +2 -0
  158. data/lib/specinfra/command/linux/base/zfs.rb +5 -0
  159. data/lib/specinfra/command/module.rb +7 -0
  160. data/lib/specinfra/command/module/service/daemontools.rb +46 -0
  161. data/lib/specinfra/command/module/service/delegator.rb +20 -0
  162. data/lib/specinfra/command/module/service/god.rb +13 -0
  163. data/lib/specinfra/command/module/service/init.rb +42 -0
  164. data/lib/specinfra/command/module/service/monit.rb +13 -0
  165. data/lib/specinfra/command/module/service/runit.rb +13 -0
  166. data/lib/specinfra/command/module/service/supervisor.rb +13 -0
  167. data/lib/specinfra/command/module/service/systemd.rb +41 -0
  168. data/lib/specinfra/command/module/service/upstart.rb +13 -0
  169. data/lib/specinfra/command/module/ss.rb +39 -0
  170. data/lib/specinfra/command/module/systemd.rb +12 -0
  171. data/lib/specinfra/command/module/zfs.rb +25 -0
  172. data/lib/specinfra/command/nexus.rb +1 -0
  173. data/lib/specinfra/command/nexus/base.rb +2 -0
  174. data/lib/specinfra/command/nexus/base/file.rb +8 -0
  175. data/lib/specinfra/command/nexus/base/host.rb +2 -0
  176. data/lib/specinfra/command/nexus/base/iptables.rb +11 -0
  177. data/lib/specinfra/command/nexus/base/package.rb +30 -0
  178. data/lib/specinfra/command/nexus/base/port.rb +5 -0
  179. data/lib/specinfra/command/nexus/base/service.rb +2 -0
  180. data/lib/specinfra/command/nexus/base/yumrepo.rb +11 -0
  181. data/lib/specinfra/command/nexus/v7.rb +3 -0
  182. data/lib/specinfra/command/nixos.rb +1 -0
  183. data/lib/specinfra/command/nixos/base.rb +2 -0
  184. data/lib/specinfra/command/nixos/base/package.rb +17 -0
  185. data/lib/specinfra/command/nixos/base/service.rb +5 -0
  186. data/lib/specinfra/command/openbsd.rb +1 -0
  187. data/lib/specinfra/command/openbsd/base.rb +4 -0
  188. data/lib/specinfra/command/openbsd/base/bond.rb +11 -0
  189. data/lib/specinfra/command/openbsd/base/bridge.rb +11 -0
  190. data/lib/specinfra/command/openbsd/base/file.rb +47 -0
  191. data/lib/specinfra/command/openbsd/base/fstab.rb +9 -0
  192. data/lib/specinfra/command/openbsd/base/interface.rb +40 -0
  193. data/lib/specinfra/command/openbsd/base/inventory.rb +28 -0
  194. data/lib/specinfra/command/openbsd/base/mail_alias.rb +7 -0
  195. data/lib/specinfra/command/openbsd/base/package.rb +15 -0
  196. data/lib/specinfra/command/openbsd/base/port.rb +7 -0
  197. data/lib/specinfra/command/openbsd/base/routing_table.rb +9 -0
  198. data/lib/specinfra/command/openbsd/base/service.rb +11 -0
  199. data/lib/specinfra/command/openbsd/base/user.rb +11 -0
  200. data/lib/specinfra/command/opensuse.rb +1 -0
  201. data/lib/specinfra/command/opensuse/base.rb +3 -0
  202. data/lib/specinfra/command/opensuse/base/service.rb +12 -0
  203. data/lib/specinfra/command/plamo.rb +1 -0
  204. data/lib/specinfra/command/plamo/base.rb +3 -0
  205. data/lib/specinfra/command/plamo/base/package.rb +11 -0
  206. data/lib/specinfra/command/plamo/base/service.rb +14 -0
  207. data/lib/specinfra/command/redhat.rb +1 -0
  208. data/lib/specinfra/command/redhat/base.rb +2 -0
  209. data/lib/specinfra/command/redhat/base/file.rb +8 -0
  210. data/lib/specinfra/command/redhat/base/host.rb +2 -0
  211. data/lib/specinfra/command/redhat/base/iptables.rb +11 -0
  212. data/lib/specinfra/command/redhat/base/package.rb +39 -0
  213. data/lib/specinfra/command/redhat/base/port.rb +2 -0
  214. data/lib/specinfra/command/redhat/base/service.rb +2 -0
  215. data/lib/specinfra/command/redhat/base/yumrepo.rb +13 -0
  216. data/lib/specinfra/command/redhat/v5.rb +3 -0
  217. data/lib/specinfra/command/redhat/v5/iptables.rb +10 -0
  218. data/lib/specinfra/command/redhat/v7.rb +3 -0
  219. data/lib/specinfra/command/redhat/v7/host.rb +15 -0
  220. data/lib/specinfra/command/redhat/v7/port.rb +5 -0
  221. data/lib/specinfra/command/redhat/v7/service.rb +5 -0
  222. data/lib/specinfra/command/smartos.rb +1 -0
  223. data/lib/specinfra/command/smartos/base.rb +3 -0
  224. data/lib/specinfra/command/smartos/base/file.rb +11 -0
  225. data/lib/specinfra/command/smartos/base/package.rb +15 -0
  226. data/lib/specinfra/command/smartos/base/service.rb +11 -0
  227. data/lib/specinfra/command/solaris.rb +1 -0
  228. data/lib/specinfra/command/solaris/base.rb +2 -0
  229. data/lib/specinfra/command/solaris/base/cron.rb +12 -0
  230. data/lib/specinfra/command/solaris/base/file.rb +20 -0
  231. data/lib/specinfra/command/solaris/base/group.rb +8 -0
  232. data/lib/specinfra/command/solaris/base/host.rb +14 -0
  233. data/lib/specinfra/command/solaris/base/inventory.rb +37 -0
  234. data/lib/specinfra/command/solaris/base/ipfilter.rb +7 -0
  235. data/lib/specinfra/command/solaris/base/ipnat.rb +14 -0
  236. data/lib/specinfra/command/solaris/base/package.rb +14 -0
  237. data/lib/specinfra/command/solaris/base/port.rb +13 -0
  238. data/lib/specinfra/command/solaris/base/service.rb +24 -0
  239. data/lib/specinfra/command/solaris/base/user.rb +15 -0
  240. data/lib/specinfra/command/solaris/base/zfs.rb +13 -0
  241. data/lib/specinfra/command/solaris/v10.rb +2 -0
  242. data/lib/specinfra/command/solaris/v10/file.rb +42 -0
  243. data/lib/specinfra/command/solaris/v10/group.rb +7 -0
  244. data/lib/specinfra/command/solaris/v10/host.rb +13 -0
  245. data/lib/specinfra/command/solaris/v10/package.rb +11 -0
  246. data/lib/specinfra/command/solaris/v10/user.rb +18 -0
  247. data/lib/specinfra/command/suse.rb +1 -0
  248. data/lib/specinfra/command/suse/base.rb +2 -0
  249. data/lib/specinfra/command/suse/base/package.rb +21 -0
  250. data/lib/specinfra/command/suse/base/service.rb +14 -0
  251. data/lib/specinfra/command/ubuntu.rb +11 -0
  252. data/lib/specinfra/command/ubuntu/base.rb +2 -0
  253. data/lib/specinfra/command/ubuntu/base/ppa.rb +17 -0
  254. data/lib/specinfra/command/ubuntu/base/service.rb +7 -0
  255. data/lib/specinfra/command/ubuntu/v15.rb +1 -0
  256. data/lib/specinfra/command/ubuntu/v15/service.rb +5 -0
  257. data/lib/specinfra/command/windows.rb +1 -0
  258. data/lib/specinfra/command/windows/base.rb +22 -0
  259. data/lib/specinfra/command/windows/base/feature.rb +17 -0
  260. data/lib/specinfra/command/windows/base/file.rb +113 -0
  261. data/lib/specinfra/command/windows/base/group.rb +11 -0
  262. data/lib/specinfra/command/windows/base/host.rb +25 -0
  263. data/lib/specinfra/command/windows/base/hot_fix.rb +19 -0
  264. data/lib/specinfra/command/windows/base/iis_app_pool.rb +66 -0
  265. data/lib/specinfra/command/windows/base/iis_website.rb +59 -0
  266. data/lib/specinfra/command/windows/base/package.rb +11 -0
  267. data/lib/specinfra/command/windows/base/port.rb +17 -0
  268. data/lib/specinfra/command/windows/base/process.rb +31 -0
  269. data/lib/specinfra/command/windows/base/registry_key.rb +53 -0
  270. data/lib/specinfra/command/windows/base/scheduled_task.rb +10 -0
  271. data/lib/specinfra/command/windows/base/service.rb +31 -0
  272. data/lib/specinfra/command/windows/base/user.rb +22 -0
  273. data/lib/specinfra/command_factory.rb +83 -0
  274. data/lib/specinfra/command_result.rb +28 -0
  275. data/lib/specinfra/configuration.rb +62 -0
  276. data/lib/specinfra/core.rb +18 -0
  277. data/lib/specinfra/ec2_metadata.rb +93 -0
  278. data/lib/specinfra/ext.rb +2 -0
  279. data/lib/specinfra/ext/class.rb +9 -0
  280. data/lib/specinfra/ext/string.rb +14 -0
  281. data/lib/specinfra/helper.rb +6 -0
  282. data/lib/specinfra/helper/configuration.rb +41 -0
  283. data/lib/specinfra/helper/detect_os.rb +38 -0
  284. data/lib/specinfra/helper/detect_os/aix.rb +12 -0
  285. data/lib/specinfra/helper/detect_os/alpine.rb +8 -0
  286. data/lib/specinfra/helper/detect_os/arch.rb +7 -0
  287. data/lib/specinfra/helper/detect_os/coreos.rb +18 -0
  288. data/lib/specinfra/helper/detect_os/darwin.rb +11 -0
  289. data/lib/specinfra/helper/detect_os/debian.rb +26 -0
  290. data/lib/specinfra/helper/detect_os/esxi.rb +10 -0
  291. data/lib/specinfra/helper/detect_os/freebsd.rb +11 -0
  292. data/lib/specinfra/helper/detect_os/gentoo.rb +7 -0
  293. data/lib/specinfra/helper/detect_os/nexus.rb +14 -0
  294. data/lib/specinfra/helper/detect_os/nixos.rb +7 -0
  295. data/lib/specinfra/helper/detect_os/openbsd.rb +11 -0
  296. data/lib/specinfra/helper/detect_os/plamo.rb +7 -0
  297. data/lib/specinfra/helper/detect_os/redhat.rb +31 -0
  298. data/lib/specinfra/helper/detect_os/solaris.rb +15 -0
  299. data/lib/specinfra/helper/detect_os/suse.rb +15 -0
  300. data/lib/specinfra/helper/docker.rb +11 -0
  301. data/lib/specinfra/helper/host_inventory.rb +12 -0
  302. data/lib/specinfra/helper/lxc.rb +11 -0
  303. data/lib/specinfra/helper/os.rb +35 -0
  304. data/lib/specinfra/helper/properties.rb +14 -0
  305. data/lib/specinfra/helper/set.rb +10 -0
  306. data/lib/specinfra/host_inventory.rb +68 -0
  307. data/lib/specinfra/host_inventory/base.rb +14 -0
  308. data/lib/specinfra/host_inventory/cpu.rb +77 -0
  309. data/lib/specinfra/host_inventory/domain.rb +16 -0
  310. data/lib/specinfra/host_inventory/ec2.rb +11 -0
  311. data/lib/specinfra/host_inventory/filesystem.rb +31 -0
  312. data/lib/specinfra/host_inventory/fqdn.rb +16 -0
  313. data/lib/specinfra/host_inventory/hostname.rb +16 -0
  314. data/lib/specinfra/host_inventory/kernel.rb +27 -0
  315. data/lib/specinfra/host_inventory/memory.rb +83 -0
  316. data/lib/specinfra/host_inventory/platform.rb +9 -0
  317. data/lib/specinfra/host_inventory/platform_version.rb +15 -0
  318. data/lib/specinfra/host_inventory/virtualization.rb +39 -0
  319. data/lib/specinfra/processor.rb +229 -0
  320. data/lib/specinfra/properties.rb +17 -0
  321. data/lib/specinfra/runner.rb +35 -0
  322. data/lib/specinfra/version.rb +3 -0
  323. data/spec/backend/exec/build_command_spec.rb +148 -0
  324. data/spec/backend/exec/child_process_spec.rb +18 -0
  325. data/spec/backend/exec/env_spec.rb +16 -0
  326. data/spec/backend/exec/read_noblock_spec.rb +50 -0
  327. data/spec/backend/exec/stdxxx_handler_spec.rb +25 -0
  328. data/spec/backend/ssh/build_command_spec.rb +115 -0
  329. data/spec/command/amazon/interface_spec.rb +9 -0
  330. data/spec/command/amazon/package_spec.rb +7 -0
  331. data/spec/command/amazon/service_spec.rb +28 -0
  332. data/spec/command/base/file_spec.rb +91 -0
  333. data/spec/command/base/group_spec.rb +16 -0
  334. data/spec/command/base/localhost_spec.rb +7 -0
  335. data/spec/command/base/package_spec.rb +11 -0
  336. data/spec/command/base/user_spec.rb +59 -0
  337. data/spec/command/darwin/file_spec.rb +16 -0
  338. data/spec/command/darwin/user_spec.rb +15 -0
  339. data/spec/command/debian/service_spec.rb +28 -0
  340. data/spec/command/esxi/package_spec.rb +8 -0
  341. data/spec/command/factory_spec.rb +30 -0
  342. data/spec/command/freebsd/file_spec.rb +12 -0
  343. data/spec/command/freebsd/interface_spec.rb +28 -0
  344. data/spec/command/linux/bond_spec.rb +12 -0
  345. data/spec/command/linux/bridge_spec.rb +12 -0
  346. data/spec/command/linux/file_spec.rb +12 -0
  347. data/spec/command/linux/interface_spec.rb +24 -0
  348. data/spec/command/linux/inventory_spec.rb +15 -0
  349. data/spec/command/linux/ip6tables_spec.rb +7 -0
  350. data/spec/command/linux/selinux_module_spec.rb +12 -0
  351. data/spec/command/linux/selinux_spec.rb +8 -0
  352. data/spec/command/module/service/daemontools_spec.rb +18 -0
  353. data/spec/command/module/service/init_spec.rb +18 -0
  354. data/spec/command/module/service/systemd_spec.rb +16 -0
  355. data/spec/command/module/ss_spec.rb +28 -0
  356. data/spec/command/module/systemd_spec.rb +19 -0
  357. data/spec/command/module/zfs_spec.rb +6 -0
  358. data/spec/command/openbsd/file_spec.rb +12 -0
  359. data/spec/command/openbsd/interface_spec.rb +28 -0
  360. data/spec/command/redhat/package_spec.rb +8 -0
  361. data/spec/command/redhat/service_spec.rb +28 -0
  362. data/spec/command/redhat7/host_spec.rb +13 -0
  363. data/spec/command/redhat7/interface_spec.rb +9 -0
  364. data/spec/command/redhat7/port_spec.rb +8 -0
  365. data/spec/command/redhat7/service_spec.rb +32 -0
  366. data/spec/command/ubuntu/ppa_spec.rb +12 -0
  367. data/spec/command/windows/registry_key_spec.rb +36 -0
  368. data/spec/configuration_spec.rb +14 -0
  369. data/spec/helper/detect_os/aix_spec.rb +58 -0
  370. data/spec/helper/detect_os/darwin_spec.rb +42 -0
  371. data/spec/helper/detect_os/esxi_spec.rb +22 -0
  372. data/spec/helper/detect_os/freebsd_spec.rb +42 -0
  373. data/spec/helper/detect_os/openbsd_spec.rb +42 -0
  374. data/spec/helper/os_spec.rb +58 -0
  375. data/spec/helper/properties_spec.rb +11 -0
  376. data/spec/helper/set_spec.rb +14 -0
  377. data/spec/host_inventory/aix/filesystem_spec.rb +107 -0
  378. data/spec/host_inventory/darwin/filesystem_spec.rb +63 -0
  379. data/spec/host_inventory/freebsd/filesystem_spec.rb +123 -0
  380. data/spec/host_inventory/linux/cpu_spec.rb +123 -0
  381. data/spec/host_inventory/linux/filesystem_spec.rb +53 -0
  382. data/spec/host_inventory/linux/kernel_spec.rb +33 -0
  383. data/spec/host_inventory/linux/memory_spec.rb +145 -0
  384. data/spec/host_inventory/linux/virtualization_docker_spec.rb +134 -0
  385. data/spec/host_inventory/linux/virtualization_kvm_spec.rb +132 -0
  386. data/spec/host_inventory/openbsd/filesystem_spec.rb +43 -0
  387. data/spec/host_inventory/solaris/filesystem_spec.rb +137 -0
  388. data/spec/spec_helper.rb +26 -0
  389. data/specinfra-cisco.gemspec +28 -0
  390. metadata +613 -0
@@ -0,0 +1,112 @@
1
+ module Specinfra
2
+ module Backend
3
+ class Docker < Exec
4
+ def initialize(config = {})
5
+ super
6
+
7
+ begin
8
+ require 'docker' unless defined?(::Docker)
9
+ rescue LoadError
10
+ fail "Docker client library is not available. Try installing `docker-api' gem."
11
+ end
12
+
13
+ ::Docker.url = get_config(:docker_url)
14
+
15
+ if image = get_config(:docker_image)
16
+ @images = []
17
+ @base_image = get_or_pull_image(image)
18
+
19
+ create_and_start_container
20
+ ObjectSpace.define_finalizer(self, proc { cleanup_container })
21
+ elsif container = get_config(:docker_container)
22
+ @container = ::Docker::Container.get(container)
23
+ else
24
+ fail 'Please specify docker_image or docker_container.'
25
+ end
26
+ end
27
+
28
+ def run_command(cmd, opts={})
29
+ cmd = build_command(cmd)
30
+ cmd = add_pre_command(cmd)
31
+ docker_run!(cmd)
32
+ end
33
+
34
+ def build_command(cmd)
35
+ cmd
36
+ end
37
+
38
+ def add_pre_command(cmd)
39
+ cmd
40
+ end
41
+
42
+ def send_file(from, to)
43
+ if @base_image.nil?
44
+ fail 'Cannot call send_file without docker_image.'
45
+ end
46
+
47
+ @images << current_image.insert_local('localPath' => from, 'outputPath' => to)
48
+ cleanup_container
49
+ create_and_start_container
50
+ end
51
+
52
+ def commit_container
53
+ @container.commit
54
+ end
55
+
56
+ private
57
+
58
+ def create_and_start_container
59
+ opts = { 'Image' => current_image.id }
60
+
61
+ if current_image.json["Config"]["Cmd"].nil? && current_image.json["Config"]["Entrypoint"].nil?
62
+ opts.merge!({'Cmd' => ['/bin/sh']})
63
+ end
64
+
65
+ opts.merge!({'OpenStdin' => true})
66
+
67
+ if path = get_config(:path)
68
+ (opts['Env'] ||= []) << "PATH=#{path}"
69
+ end
70
+
71
+ env = get_config(:env).to_a.map { |v| v.join('=') }
72
+ opts['Env'] = opts['Env'].to_a.concat(env)
73
+
74
+ opts.merge!(get_config(:docker_container_create_options) || {})
75
+
76
+ @container = ::Docker::Container.create(opts)
77
+ @container.start
78
+ end
79
+
80
+ def cleanup_container
81
+ @container.stop
82
+ @container.delete
83
+ end
84
+
85
+ def current_image
86
+ @images.last || @base_image
87
+ end
88
+
89
+ def docker_run!(cmd, opts={})
90
+ stdout, stderr, status = @container.exec(['/bin/sh', '-c', cmd])
91
+
92
+ CommandResult.new :stdout => stdout.join, :stderr => stderr.join,
93
+ :exit_status => status
94
+ rescue ::Docker::Error::DockerError => e
95
+ raise
96
+ rescue => e
97
+ @container.kill
98
+ err = stderr.nil? ? ([e.message] + e.backtrace) : stderr
99
+ CommandResult.new :stdout => [stdout].join, :stderr => err.join,
100
+ :exit_status => (status || 1)
101
+ end
102
+
103
+ def get_or_pull_image(name)
104
+ begin
105
+ ::Docker::Image.get(name)
106
+ rescue ::Docker::Error::NotFoundError
107
+ ::Docker::Image.create('fromImage' => name)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,32 @@
1
+ module Specinfra
2
+ module Backend
3
+ class Dockerfile < Specinfra::Backend::Base
4
+ def initialize(config = {})
5
+ super
6
+
7
+ @lines = []
8
+ ObjectSpace.define_finalizer(self) {
9
+ if get_config(:dockerfile_finalizer).nil?
10
+ puts @lines
11
+ else
12
+ get_config(:dockerfile_finalizer).call(@lines)
13
+ end
14
+ }
15
+ end
16
+
17
+ def run_command(cmd, opts={})
18
+ @lines << "RUN #{cmd}"
19
+ CommandResult.new
20
+ end
21
+
22
+ def send_file(from, to)
23
+ @lines << "ADD #{from} #{to}"
24
+ CommandResult.new
25
+ end
26
+
27
+ def from(base)
28
+ @lines << "FROM #{base}"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,152 @@
1
+ require 'singleton'
2
+ require 'fileutils'
3
+ require 'shellwords'
4
+ require 'sfl'
5
+
6
+ module Specinfra
7
+ module Backend
8
+ class Exec < Base
9
+ def run_command(cmd, opts={})
10
+ cmd = build_command(cmd)
11
+ cmd = add_pre_command(cmd)
12
+ stdout, stderr, exit_status = with_env do
13
+ spawn_command(cmd)
14
+ end
15
+
16
+ if @example
17
+ @example.metadata[:command] = cmd
18
+ @example.metadata[:stdout] = stdout
19
+ end
20
+
21
+ CommandResult.new :stdout => stdout, :stderr => stderr, :exit_status => exit_status
22
+ end
23
+
24
+ def send_file(from, to)
25
+ FileUtils.cp(from, to)
26
+ end
27
+
28
+ def send_directory(from, to)
29
+ FileUtils.cp_r(from, to)
30
+ end
31
+
32
+ def build_command(cmd)
33
+ shell = get_config(:shell) || '/bin/sh'
34
+ cmd = cmd.shelljoin if cmd.is_a?(Array)
35
+ cmd = "#{shell.shellescape} -c #{cmd.to_s.shellescape}"
36
+
37
+ path = get_config(:path)
38
+ if path
39
+ cmd = %Q{env PATH="#{path}" #{cmd}}
40
+ end
41
+
42
+ cmd
43
+ end
44
+
45
+ private
46
+ def spawn_command(cmd)
47
+ stdout, stderr = '', ''
48
+ begin
49
+ quit_r, quit_w = IO.pipe
50
+ out_r, out_w = IO.pipe
51
+ err_r, err_w = IO.pipe
52
+
53
+ th = Thread.new do
54
+ output = {
55
+ quit_r => "",
56
+ out_r => "",
57
+ err_r => ""
58
+ }
59
+
60
+ handlers = {
61
+ quit_r => nil,
62
+ out_r => @stdout_handler,
63
+ err_r => @stderr_handler
64
+ }
65
+
66
+ begin
67
+ loop do
68
+ readable_ios, = IO.select(output.keys)
69
+
70
+ readable_ios.each do |fd|
71
+ loop do
72
+ begin
73
+ out = fd.read_nonblock(4096)
74
+ output[fd] << out
75
+
76
+ handlers[fd].call(out) if handlers[fd]
77
+ rescue Errno::EAGAIN
78
+ # Ruby 2.2 has more specific exception class IO::EAGAINWaitReadable
79
+ break
80
+ end
81
+ end
82
+ end
83
+
84
+ break unless output[quit_r].empty?
85
+ end
86
+ rescue EOFError
87
+ ensure
88
+ stdout = output[out_r]
89
+ stderr = output[err_r]
90
+ quit_r.close unless quit_r.closed?
91
+ out_r.close unless out_r.closed?
92
+ err_r.close unless err_r.closed?
93
+ end
94
+ end
95
+
96
+ th.abort_on_exception = true
97
+
98
+ pid = spawn(cmd, :out => out_w, :err => err_w)
99
+
100
+ out_w.close
101
+ err_w.close
102
+
103
+ pid, stats = Process.waitpid2(pid)
104
+
105
+ begin
106
+ quit_w.syswrite 1
107
+ rescue Errno::EPIPE
108
+ end
109
+
110
+ th.value # wait
111
+ ensure
112
+ quit_w.close unless quit_w.closed?
113
+ end
114
+
115
+ return stdout, stderr, stats.exitstatus
116
+ end
117
+
118
+ def with_env
119
+ keys = %w[BUNDLER_EDITOR BUNDLE_BIN_PATH BUNDLE_GEMFILE
120
+ RUBYOPT GEM_HOME GEM_PATH GEM_CACHE]
121
+
122
+ keys.each { |key| ENV["_SPECINFRA_#{key}"] = ENV[key] ; ENV.delete(key) }
123
+
124
+ env = get_config(:env) || {}
125
+ env[:LANG] ||= 'C'
126
+
127
+ env.each do |key, value|
128
+ key = key.to_s
129
+ ENV["_SPECINFRA_#{key}"] = ENV[key];
130
+ ENV[key] = value
131
+ end
132
+
133
+ yield
134
+ ensure
135
+ keys.each { |key| ENV[key] = ENV.delete("_SPECINFRA_#{key}") }
136
+ env.each do |key, value|
137
+ key = key.to_s
138
+ ENV[key] = ENV.delete("_SPECINFRA_#{key}");
139
+ end
140
+ end
141
+
142
+ def add_pre_command(cmd)
143
+ if get_config(:pre_command)
144
+ pre_cmd = build_command(get_config(:pre_command))
145
+ "#{pre_cmd} && #{cmd}"
146
+ else
147
+ cmd
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,45 @@
1
+ module Specinfra
2
+ module Backend
3
+ class Lxc < Exec
4
+ def initialize(config = {})
5
+ super
6
+
7
+ begin
8
+ require 'lxc/extra' unless defined?(::LXC::Extra)
9
+ rescue LoadError
10
+ fail "LXC client library is not available. Try installing `lxc-extra' gem"
11
+ end
12
+ end
13
+
14
+ def run_command(cmd, opts={})
15
+ cmd = build_command(cmd)
16
+ cmd = add_pre_command(cmd)
17
+ out, ret = ct.execute do
18
+ out = `#{cmd} 2>&1`
19
+ [out, $?.dup]
20
+ end
21
+ if @example
22
+ @example.metadata[:command] = cmd
23
+ @example.metadata[:stdout] = out
24
+ end
25
+ CommandResult.new :stdout => out, :exit_status => ret.exitstatus
26
+ end
27
+
28
+ def build_command(cmd)
29
+ cmd
30
+ end
31
+
32
+ def add_pre_command(cmd)
33
+ cmd
34
+ end
35
+
36
+ def send_file(from, to)
37
+ FileUtils.cp(from, File.join(ct.config_item('lxc.rootfs'), to))
38
+ end
39
+
40
+ def ct
41
+ @ct ||= ::LXC::Container.new(get_config(:lxc))
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,40 @@
1
+ module Specinfra
2
+ module Backend
3
+ module PowerShell
4
+ class Command
5
+ attr_reader :import_functions, :script
6
+ def initialize &block
7
+ @import_functions = []
8
+ @script = ""
9
+ instance_eval &block if block_given?
10
+ end
11
+
12
+ def using *functions
13
+ functions.each { |f| import_functions << f }
14
+ end
15
+
16
+ def exec code
17
+ @script = code
18
+ end
19
+
20
+ def convert_regexp(target)
21
+ case target
22
+ when Regexp
23
+ target.source
24
+ else
25
+ target.to_s.gsub '/', ''
26
+ end
27
+ end
28
+
29
+ def get_identity id
30
+ raise "You must provide a specific Windows user/group" if id =~ /(owner|group|others)/
31
+ identity = id || 'Everyone'
32
+ end
33
+
34
+ def to_s
35
+ @script
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,86 @@
1
+ require 'base64'
2
+
3
+ module Specinfra
4
+ module Backend
5
+ module PowerShell
6
+ module ScriptHelper
7
+ def build_command(cmd)
8
+ path = get_config(:path)
9
+ if path
10
+ cmd.strip!
11
+ cmd =
12
+ <<-EOF
13
+ $env:path = "#{path};$env:path"
14
+ #{cmd}
15
+ EOF
16
+ end
17
+ cmd
18
+ end
19
+
20
+ def add_pre_command(cmd)
21
+ path = get_config(:path)
22
+ if get_config(:pre_command)
23
+ cmd.strip!
24
+ cmd =
25
+ <<-EOF
26
+ if (#{get_config(:pre_command)})
27
+ {
28
+ #{cmd}
29
+ }
30
+ EOF
31
+ cmd = "$env:path = \"#{path};$env:path\"\n#{cmd}" if path
32
+ end
33
+ cmd
34
+ end
35
+
36
+ def encode_script script
37
+ script_text = script.chars.to_a.join("\x00").chomp
38
+ script_text << "\x00" unless script_text[-1].eql? "\x00"
39
+ if script_text.respond_to?(:encode)
40
+ script_text = script_text.encode('ASCII-8BIT')
41
+ end
42
+ if Base64.respond_to?(:strict_encode64)
43
+ Base64.strict_encode64(script_text)
44
+ else
45
+ [ script_text ].pack("m").strip
46
+ end
47
+ end
48
+
49
+ def create_script command
50
+ if command.is_a? Command
51
+ ps_functions = command.import_functions.map { |f| File.read(File.join(File.dirname(__FILE__), 'support', f)) }
52
+ script = build_command(command.script)
53
+ script = add_pre_command(script)
54
+ <<-EOF
55
+ $exitCode = 1
56
+ $ProgressPreference = "SilentlyContinue"
57
+ try {
58
+ #{ps_functions.join("\n")}
59
+ $success = (#{script})
60
+ if ($success -is [Boolean] -and $success) { $exitCode = 0 }
61
+ } catch {
62
+ Write-Output $_.Exception.Message
63
+ }
64
+ Write-Output "Exiting with code: $exitCode"
65
+ exit $exitCode
66
+ EOF
67
+ else
68
+ script = build_command(command.to_s)
69
+ add_pre_command(script)
70
+ end
71
+ end
72
+
73
+ def check_running(process)
74
+ ret = run_command(commands.check_running(process))
75
+
76
+ # If the service is not registered, check the process
77
+ if ret.exit_status == 1
78
+ ret = run_command(commands.check_process(process))
79
+ end
80
+
81
+ ret.success?
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end