specinfra-rb19 2.44.7

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 (406) 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 +7 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +39 -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 +113 -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 +15 -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 +185 -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 +311 -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 +36 -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 +15 -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 +39 -0
  102. data/lib/specinfra/command/darwin/base/interface.rb +42 -0
  103. data/lib/specinfra/command/darwin/base/inventory.rb +28 -0
  104. data/lib/specinfra/command/darwin/base/package.rb +51 -0
  105. data/lib/specinfra/command/darwin/base/port.rb +8 -0
  106. data/lib/specinfra/command/darwin/base/process.rb +7 -0
  107. data/lib/specinfra/command/darwin/base/service.rb +11 -0
  108. data/lib/specinfra/command/darwin/base/user.rb +15 -0
  109. data/lib/specinfra/command/debian.rb +1 -0
  110. data/lib/specinfra/command/debian/base.rb +11 -0
  111. data/lib/specinfra/command/debian/base/package.rb +33 -0
  112. data/lib/specinfra/command/debian/base/ppa.rb +2 -0
  113. data/lib/specinfra/command/debian/base/service.rb +32 -0
  114. data/lib/specinfra/command/debian/v8.rb +2 -0
  115. data/lib/specinfra/command/debian/v8/service.rb +5 -0
  116. data/lib/specinfra/command/esxi.rb +1 -0
  117. data/lib/specinfra/command/esxi/base.rb +2 -0
  118. data/lib/specinfra/command/esxi/base/package.rb +7 -0
  119. data/lib/specinfra/command/fedora.rb +1 -0
  120. data/lib/specinfra/command/fedora/base.rb +2 -0
  121. data/lib/specinfra/command/fedora/base/service.rb +11 -0
  122. data/lib/specinfra/command/fedora/v15.rb +2 -0
  123. data/lib/specinfra/command/fedora/v15/service.rb +5 -0
  124. data/lib/specinfra/command/freebsd.rb +1 -0
  125. data/lib/specinfra/command/freebsd/base.rb +3 -0
  126. data/lib/specinfra/command/freebsd/base/file.rb +49 -0
  127. data/lib/specinfra/command/freebsd/base/host.rb +24 -0
  128. data/lib/specinfra/command/freebsd/base/interface.rb +42 -0
  129. data/lib/specinfra/command/freebsd/base/inventory.rb +28 -0
  130. data/lib/specinfra/command/freebsd/base/package.rb +19 -0
  131. data/lib/specinfra/command/freebsd/base/port.rb +8 -0
  132. data/lib/specinfra/command/freebsd/base/routing_table.rb +9 -0
  133. data/lib/specinfra/command/freebsd/base/service.rb +11 -0
  134. data/lib/specinfra/command/freebsd/base/user.rb +20 -0
  135. data/lib/specinfra/command/freebsd/v10.rb +2 -0
  136. data/lib/specinfra/command/freebsd/v10/package.rb +31 -0
  137. data/lib/specinfra/command/freebsd/v6.rb +2 -0
  138. data/lib/specinfra/command/freebsd/v6/user.rb +19 -0
  139. data/lib/specinfra/command/gentoo.rb +1 -0
  140. data/lib/specinfra/command/gentoo/base.rb +2 -0
  141. data/lib/specinfra/command/gentoo/base/package.rb +7 -0
  142. data/lib/specinfra/command/gentoo/base/service.rb +19 -0
  143. data/lib/specinfra/command/linux.rb +1 -0
  144. data/lib/specinfra/command/linux/base.rb +2 -0
  145. data/lib/specinfra/command/linux/base/bond.rb +11 -0
  146. data/lib/specinfra/command/linux/base/bridge.rb +11 -0
  147. data/lib/specinfra/command/linux/base/file.rb +20 -0
  148. data/lib/specinfra/command/linux/base/fstab.rb +9 -0
  149. data/lib/specinfra/command/linux/base/interface.rb +38 -0
  150. data/lib/specinfra/command/linux/base/inventory.rb +41 -0
  151. data/lib/specinfra/command/linux/base/ip6tables.rb +15 -0
  152. data/lib/specinfra/command/linux/base/iptables.rb +12 -0
  153. data/lib/specinfra/command/linux/base/kernel_module.rb +7 -0
  154. data/lib/specinfra/command/linux/base/lxc_container.rb +11 -0
  155. data/lib/specinfra/command/linux/base/package.rb +2 -0
  156. data/lib/specinfra/command/linux/base/ppa.rb +2 -0
  157. data/lib/specinfra/command/linux/base/selinux.rb +13 -0
  158. data/lib/specinfra/command/linux/base/selinux_module.rb +16 -0
  159. data/lib/specinfra/command/linux/base/service.rb +2 -0
  160. data/lib/specinfra/command/linux/base/yumrepo.rb +2 -0
  161. data/lib/specinfra/command/linux/base/zfs.rb +5 -0
  162. data/lib/specinfra/command/module.rb +7 -0
  163. data/lib/specinfra/command/module/service/daemontools.rb +46 -0
  164. data/lib/specinfra/command/module/service/delegator.rb +20 -0
  165. data/lib/specinfra/command/module/service/god.rb +13 -0
  166. data/lib/specinfra/command/module/service/init.rb +42 -0
  167. data/lib/specinfra/command/module/service/monit.rb +13 -0
  168. data/lib/specinfra/command/module/service/runit.rb +13 -0
  169. data/lib/specinfra/command/module/service/supervisor.rb +13 -0
  170. data/lib/specinfra/command/module/service/systemd.rb +41 -0
  171. data/lib/specinfra/command/module/service/upstart.rb +13 -0
  172. data/lib/specinfra/command/module/ss.rb +39 -0
  173. data/lib/specinfra/command/module/systemd.rb +12 -0
  174. data/lib/specinfra/command/module/zfs.rb +25 -0
  175. data/lib/specinfra/command/nixos.rb +1 -0
  176. data/lib/specinfra/command/nixos/base.rb +2 -0
  177. data/lib/specinfra/command/nixos/base/package.rb +17 -0
  178. data/lib/specinfra/command/nixos/base/service.rb +5 -0
  179. data/lib/specinfra/command/openbsd.rb +1 -0
  180. data/lib/specinfra/command/openbsd/base.rb +4 -0
  181. data/lib/specinfra/command/openbsd/base/bond.rb +11 -0
  182. data/lib/specinfra/command/openbsd/base/bridge.rb +11 -0
  183. data/lib/specinfra/command/openbsd/base/file.rb +47 -0
  184. data/lib/specinfra/command/openbsd/base/fstab.rb +9 -0
  185. data/lib/specinfra/command/openbsd/base/host.rb +17 -0
  186. data/lib/specinfra/command/openbsd/base/interface.rb +47 -0
  187. data/lib/specinfra/command/openbsd/base/inventory.rb +33 -0
  188. data/lib/specinfra/command/openbsd/base/mail_alias.rb +8 -0
  189. data/lib/specinfra/command/openbsd/base/package.rb +15 -0
  190. data/lib/specinfra/command/openbsd/base/port.rb +7 -0
  191. data/lib/specinfra/command/openbsd/base/routing_table.rb +9 -0
  192. data/lib/specinfra/command/openbsd/base/service.rb +19 -0
  193. data/lib/specinfra/command/openbsd/base/user.rb +11 -0
  194. data/lib/specinfra/command/openbsd/v57.rb +2 -0
  195. data/lib/specinfra/command/openbsd/v57/service.rb +35 -0
  196. data/lib/specinfra/command/opensuse.rb +1 -0
  197. data/lib/specinfra/command/opensuse/base.rb +3 -0
  198. data/lib/specinfra/command/opensuse/base/service.rb +12 -0
  199. data/lib/specinfra/command/plamo.rb +1 -0
  200. data/lib/specinfra/command/plamo/base.rb +3 -0
  201. data/lib/specinfra/command/plamo/base/package.rb +11 -0
  202. data/lib/specinfra/command/plamo/base/service.rb +14 -0
  203. data/lib/specinfra/command/poky.rb +1 -0
  204. data/lib/specinfra/command/poky/base.rb +2 -0
  205. data/lib/specinfra/command/poky/base/interface.rb +2 -0
  206. data/lib/specinfra/command/poky/base/inventory.rb +2 -0
  207. data/lib/specinfra/command/poky/base/package.rb +26 -0
  208. data/lib/specinfra/command/poky/base/service.rb +5 -0
  209. data/lib/specinfra/command/raspbian.rb +1 -0
  210. data/lib/specinfra/command/redhat.rb +1 -0
  211. data/lib/specinfra/command/redhat/base.rb +2 -0
  212. data/lib/specinfra/command/redhat/base/file.rb +8 -0
  213. data/lib/specinfra/command/redhat/base/host.rb +2 -0
  214. data/lib/specinfra/command/redhat/base/iptables.rb +11 -0
  215. data/lib/specinfra/command/redhat/base/package.rb +39 -0
  216. data/lib/specinfra/command/redhat/base/port.rb +2 -0
  217. data/lib/specinfra/command/redhat/base/service.rb +2 -0
  218. data/lib/specinfra/command/redhat/base/yumrepo.rb +13 -0
  219. data/lib/specinfra/command/redhat/v5.rb +3 -0
  220. data/lib/specinfra/command/redhat/v5/iptables.rb +10 -0
  221. data/lib/specinfra/command/redhat/v7.rb +3 -0
  222. data/lib/specinfra/command/redhat/v7/host.rb +15 -0
  223. data/lib/specinfra/command/redhat/v7/port.rb +5 -0
  224. data/lib/specinfra/command/redhat/v7/service.rb +5 -0
  225. data/lib/specinfra/command/smartos.rb +1 -0
  226. data/lib/specinfra/command/smartos/base.rb +3 -0
  227. data/lib/specinfra/command/smartos/base/file.rb +11 -0
  228. data/lib/specinfra/command/smartos/base/package.rb +15 -0
  229. data/lib/specinfra/command/smartos/base/service.rb +11 -0
  230. data/lib/specinfra/command/solaris.rb +1 -0
  231. data/lib/specinfra/command/solaris/base.rb +2 -0
  232. data/lib/specinfra/command/solaris/base/cron.rb +12 -0
  233. data/lib/specinfra/command/solaris/base/file.rb +20 -0
  234. data/lib/specinfra/command/solaris/base/group.rb +8 -0
  235. data/lib/specinfra/command/solaris/base/host.rb +14 -0
  236. data/lib/specinfra/command/solaris/base/inventory.rb +42 -0
  237. data/lib/specinfra/command/solaris/base/ipfilter.rb +7 -0
  238. data/lib/specinfra/command/solaris/base/ipnat.rb +14 -0
  239. data/lib/specinfra/command/solaris/base/package.rb +14 -0
  240. data/lib/specinfra/command/solaris/base/port.rb +13 -0
  241. data/lib/specinfra/command/solaris/base/service.rb +24 -0
  242. data/lib/specinfra/command/solaris/base/user.rb +15 -0
  243. data/lib/specinfra/command/solaris/base/zfs.rb +13 -0
  244. data/lib/specinfra/command/solaris/v10.rb +2 -0
  245. data/lib/specinfra/command/solaris/v10/file.rb +42 -0
  246. data/lib/specinfra/command/solaris/v10/group.rb +7 -0
  247. data/lib/specinfra/command/solaris/v10/host.rb +13 -0
  248. data/lib/specinfra/command/solaris/v10/package.rb +11 -0
  249. data/lib/specinfra/command/solaris/v10/user.rb +18 -0
  250. data/lib/specinfra/command/suse.rb +1 -0
  251. data/lib/specinfra/command/suse/base.rb +2 -0
  252. data/lib/specinfra/command/suse/base/package.rb +21 -0
  253. data/lib/specinfra/command/suse/base/service.rb +14 -0
  254. data/lib/specinfra/command/ubuntu.rb +11 -0
  255. data/lib/specinfra/command/ubuntu/base.rb +2 -0
  256. data/lib/specinfra/command/ubuntu/base/ppa.rb +17 -0
  257. data/lib/specinfra/command/ubuntu/base/service.rb +7 -0
  258. data/lib/specinfra/command/ubuntu/v15.rb +1 -0
  259. data/lib/specinfra/command/ubuntu/v15/service.rb +5 -0
  260. data/lib/specinfra/command/windows.rb +1 -0
  261. data/lib/specinfra/command/windows/base.rb +22 -0
  262. data/lib/specinfra/command/windows/base/feature.rb +17 -0
  263. data/lib/specinfra/command/windows/base/file.rb +120 -0
  264. data/lib/specinfra/command/windows/base/group.rb +11 -0
  265. data/lib/specinfra/command/windows/base/host.rb +25 -0
  266. data/lib/specinfra/command/windows/base/hot_fix.rb +19 -0
  267. data/lib/specinfra/command/windows/base/iis_app_pool.rb +66 -0
  268. data/lib/specinfra/command/windows/base/iis_website.rb +59 -0
  269. data/lib/specinfra/command/windows/base/package.rb +11 -0
  270. data/lib/specinfra/command/windows/base/port.rb +17 -0
  271. data/lib/specinfra/command/windows/base/process.rb +31 -0
  272. data/lib/specinfra/command/windows/base/registry_key.rb +53 -0
  273. data/lib/specinfra/command/windows/base/scheduled_task.rb +10 -0
  274. data/lib/specinfra/command/windows/base/service.rb +31 -0
  275. data/lib/specinfra/command/windows/base/user.rb +22 -0
  276. data/lib/specinfra/command_factory.rb +87 -0
  277. data/lib/specinfra/command_result.rb +28 -0
  278. data/lib/specinfra/configuration.rb +62 -0
  279. data/lib/specinfra/core.rb +18 -0
  280. data/lib/specinfra/ec2_metadata.rb +93 -0
  281. data/lib/specinfra/ext.rb +2 -0
  282. data/lib/specinfra/ext/class.rb +9 -0
  283. data/lib/specinfra/ext/string.rb +14 -0
  284. data/lib/specinfra/helper.rb +6 -0
  285. data/lib/specinfra/helper/configuration.rb +41 -0
  286. data/lib/specinfra/helper/detect_os.rb +38 -0
  287. data/lib/specinfra/helper/detect_os/aix.rb +12 -0
  288. data/lib/specinfra/helper/detect_os/alpine.rb +8 -0
  289. data/lib/specinfra/helper/detect_os/arch.rb +7 -0
  290. data/lib/specinfra/helper/detect_os/coreos.rb +18 -0
  291. data/lib/specinfra/helper/detect_os/darwin.rb +11 -0
  292. data/lib/specinfra/helper/detect_os/debian.rb +26 -0
  293. data/lib/specinfra/helper/detect_os/esxi.rb +10 -0
  294. data/lib/specinfra/helper/detect_os/freebsd.rb +11 -0
  295. data/lib/specinfra/helper/detect_os/gentoo.rb +7 -0
  296. data/lib/specinfra/helper/detect_os/nixos.rb +7 -0
  297. data/lib/specinfra/helper/detect_os/openbsd.rb +11 -0
  298. data/lib/specinfra/helper/detect_os/plamo.rb +7 -0
  299. data/lib/specinfra/helper/detect_os/poky.rb +7 -0
  300. data/lib/specinfra/helper/detect_os/redhat.rb +31 -0
  301. data/lib/specinfra/helper/detect_os/solaris.rb +17 -0
  302. data/lib/specinfra/helper/detect_os/suse.rb +15 -0
  303. data/lib/specinfra/helper/docker.rb +11 -0
  304. data/lib/specinfra/helper/host_inventory.rb +12 -0
  305. data/lib/specinfra/helper/lxc.rb +11 -0
  306. data/lib/specinfra/helper/os.rb +35 -0
  307. data/lib/specinfra/helper/properties.rb +14 -0
  308. data/lib/specinfra/helper/set.rb +10 -0
  309. data/lib/specinfra/host_inventory.rb +69 -0
  310. data/lib/specinfra/host_inventory/base.rb +14 -0
  311. data/lib/specinfra/host_inventory/block_device.rb +35 -0
  312. data/lib/specinfra/host_inventory/cpu.rb +77 -0
  313. data/lib/specinfra/host_inventory/domain.rb +16 -0
  314. data/lib/specinfra/host_inventory/ec2.rb +11 -0
  315. data/lib/specinfra/host_inventory/filesystem.rb +31 -0
  316. data/lib/specinfra/host_inventory/fqdn.rb +16 -0
  317. data/lib/specinfra/host_inventory/hostname.rb +16 -0
  318. data/lib/specinfra/host_inventory/kernel.rb +27 -0
  319. data/lib/specinfra/host_inventory/memory.rb +83 -0
  320. data/lib/specinfra/host_inventory/platform.rb +9 -0
  321. data/lib/specinfra/host_inventory/platform_version.rb +15 -0
  322. data/lib/specinfra/host_inventory/virtualization.rb +45 -0
  323. data/lib/specinfra/processor.rb +229 -0
  324. data/lib/specinfra/properties.rb +17 -0
  325. data/lib/specinfra/runner.rb +35 -0
  326. data/lib/specinfra/version.rb +3 -0
  327. data/spec/backend/exec/build_command_spec.rb +152 -0
  328. data/spec/backend/exec/child_process_spec.rb +18 -0
  329. data/spec/backend/exec/env_spec.rb +16 -0
  330. data/spec/backend/exec/read_noblock_spec.rb +50 -0
  331. data/spec/backend/exec/stdxxx_handler_spec.rb +25 -0
  332. data/spec/backend/ssh/build_command_spec.rb +115 -0
  333. data/spec/command/amazon/interface_spec.rb +9 -0
  334. data/spec/command/amazon/package_spec.rb +7 -0
  335. data/spec/command/amazon/service_spec.rb +28 -0
  336. data/spec/command/base/file_spec.rb +91 -0
  337. data/spec/command/base/group_spec.rb +16 -0
  338. data/spec/command/base/host_spec.rb +23 -0
  339. data/spec/command/base/localhost_spec.rb +7 -0
  340. data/spec/command/base/mail_alias.rb +17 -0
  341. data/spec/command/base/package_spec.rb +11 -0
  342. data/spec/command/base/user_spec.rb +59 -0
  343. data/spec/command/darwin/file_spec.rb +16 -0
  344. data/spec/command/darwin/host_spec.rb +38 -0
  345. data/spec/command/darwin/interface_spec.rb +38 -0
  346. data/spec/command/darwin/process_spec.rb +7 -0
  347. data/spec/command/darwin/user_spec.rb +15 -0
  348. data/spec/command/debian/service_spec.rb +28 -0
  349. data/spec/command/esxi/package_spec.rb +8 -0
  350. data/spec/command/factory_spec.rb +30 -0
  351. data/spec/command/freebsd/file_spec.rb +12 -0
  352. data/spec/command/freebsd/host_spec.rb +24 -0
  353. data/spec/command/freebsd/interface_spec.rb +32 -0
  354. data/spec/command/linux/bond_spec.rb +12 -0
  355. data/spec/command/linux/bridge_spec.rb +12 -0
  356. data/spec/command/linux/file_spec.rb +12 -0
  357. data/spec/command/linux/interface_spec.rb +24 -0
  358. data/spec/command/linux/inventory_spec.rb +20 -0
  359. data/spec/command/linux/ip6tables_spec.rb +7 -0
  360. data/spec/command/linux/selinux_module_spec.rb +12 -0
  361. data/spec/command/linux/selinux_spec.rb +27 -0
  362. data/spec/command/module/service/daemontools_spec.rb +18 -0
  363. data/spec/command/module/service/init_spec.rb +18 -0
  364. data/spec/command/module/service/systemd_spec.rb +16 -0
  365. data/spec/command/module/ss_spec.rb +28 -0
  366. data/spec/command/module/systemd_spec.rb +19 -0
  367. data/spec/command/module/zfs_spec.rb +6 -0
  368. data/spec/command/openbsd/file_spec.rb +12 -0
  369. data/spec/command/openbsd/host_spec.rb +24 -0
  370. data/spec/command/openbsd/interface_spec.rb +38 -0
  371. data/spec/command/openbsd/mail_alias_spec.rb +19 -0
  372. data/spec/command/openbsd/service_spec.rb +12 -0
  373. data/spec/command/openbsd57/service_spec.rb +36 -0
  374. data/spec/command/redhat/package_spec.rb +8 -0
  375. data/spec/command/redhat/service_spec.rb +28 -0
  376. data/spec/command/redhat7/host_spec.rb +25 -0
  377. data/spec/command/redhat7/interface_spec.rb +9 -0
  378. data/spec/command/redhat7/port_spec.rb +8 -0
  379. data/spec/command/redhat7/service_spec.rb +32 -0
  380. data/spec/command/ubuntu/ppa_spec.rb +12 -0
  381. data/spec/command/windows/registry_key_spec.rb +36 -0
  382. data/spec/configuration_spec.rb +14 -0
  383. data/spec/helper/detect_os/aix_spec.rb +58 -0
  384. data/spec/helper/detect_os/darwin_spec.rb +42 -0
  385. data/spec/helper/detect_os/esxi_spec.rb +22 -0
  386. data/spec/helper/detect_os/freebsd_spec.rb +42 -0
  387. data/spec/helper/detect_os/openbsd_spec.rb +42 -0
  388. data/spec/helper/os_spec.rb +58 -0
  389. data/spec/helper/properties_spec.rb +11 -0
  390. data/spec/helper/set_spec.rb +14 -0
  391. data/spec/host_inventory/aix/filesystem_spec.rb +107 -0
  392. data/spec/host_inventory/darwin/filesystem_spec.rb +63 -0
  393. data/spec/host_inventory/freebsd/filesystem_spec.rb +123 -0
  394. data/spec/host_inventory/linux/block_device_spec.rb +46 -0
  395. data/spec/host_inventory/linux/cpu_spec.rb +123 -0
  396. data/spec/host_inventory/linux/filesystem_spec.rb +53 -0
  397. data/spec/host_inventory/linux/kernel_spec.rb +33 -0
  398. data/spec/host_inventory/linux/memory_spec.rb +145 -0
  399. data/spec/host_inventory/linux/virtualization_spec.rb +44 -0
  400. data/spec/host_inventory/openbsd/filesystem_spec.rb +43 -0
  401. data/spec/host_inventory/openbsd/virtualization_spec.rb +27 -0
  402. data/spec/host_inventory/solaris/filesystem_spec.rb +137 -0
  403. data/spec/host_inventory/solaris/virtualization_spec.rb +28 -0
  404. data/spec/spec_helper.rb +26 -0
  405. data/specinfra.gemspec +31 -0
  406. metadata +638 -0
@@ -0,0 +1,39 @@
1
+ class Specinfra::Command::Darwin::Base::Host < Specinfra::Command::Base::Host
2
+ class << self
3
+ def check_is_resolvable(name, type)
4
+ if type == "dns"
5
+ ## try to resolve either A or AAAA record; grep is used to return the appropriate exit code
6
+ %Q{dig +search +short +time=1 -q #{escape(name)} a #{escape(name)} aaaa | grep -qie '^[0-9a-f:.]*$'}
7
+ elsif type == "hosts"
8
+ "sed 's/#.*$//' /etc/hosts | grep -w -- #{escape(name)}"
9
+ else
10
+ ## grep is required as dscacheutil always returns exit code 0
11
+ "dscacheutil -q host -a name #{escape(name)} | grep -q '_address:'"
12
+ end
13
+ end
14
+
15
+ def check_is_reachable(host, port, proto, timeout)
16
+ if port.nil?
17
+ "ping -t #{escape(timeout)} -c 2 -n #{escape(host)}"
18
+ else
19
+ "nc -vvvvz#{escape(proto[0].chr)} #{escape(host)} #{escape(port)} -w #{escape(timeout)}"
20
+ end
21
+ end
22
+
23
+ def get_ipaddress(name)
24
+ # If the query returns multiple records the most likey match is returned.
25
+ # Generally this means IPv6 wins over IPv4.
26
+ %Q{dscacheutil -q host -a name #{escape(name)} | } +
27
+ %Q{awk '/^ipv6_/{ ip = $2 }; /^$/{ exit }; /^ip_/{ ip = $2; exit}; END{ print ip }'}
28
+ end
29
+ def get_ipv4_address(name)
30
+ ## With dscacheutil multiple IPs can be returned for IPv4 just pick the first one
31
+ %Q{dscacheutil -q host -a name #{escape(name)} | awk '/^ip_/{ print $2; exit }'}
32
+ end
33
+ def get_ipv6_address(name)
34
+ ## With dscacheutil multiple IPs can be returned. For IPv6 the link-local is displayed first
35
+ ## hence the last entry is picked.
36
+ %Q{dscacheutil -q host -a name #{escape(name)} | awk '/^ipv6_/{ ip = $2 } END{ print ip }'}
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,42 @@
1
+ class Specinfra::Command::Darwin::Base::Interface < Specinfra::Command::Base::Interface
2
+ class << self
3
+ def check_exists(name)
4
+ "ifconfig #{name}"
5
+ end
6
+
7
+ def check_has_ipv4_address(interface, ip_address)
8
+ ip_address = ip_address.dup
9
+ if ip_address =~ /\/\d+$/
10
+ # remove the prefix - better would be to calculate the netmask
11
+ ip_address.gsub!(/\/\d+$/, "")
12
+ end
13
+ ip_address << " "
14
+ ip_address.gsub!(".", "\\.")
15
+ "ifconfig #{interface} inet | grep 'inet #{ip_address}'"
16
+ end
17
+
18
+ def check_has_ipv6_address(interface, ip_address)
19
+ ip_address = ip_address.dup
20
+ (ip_address, prefixlen) = ip_address.split(/\//)
21
+ ip_address.downcase!
22
+ if ip_address =~ /^fe80::/i
23
+ # link local needs the scope (interface) appended
24
+ ip_address << "%#{interface}"
25
+ end
26
+ unless prefixlen.to_s.empty?
27
+ # append prefixlen
28
+ ip_address << " prefixlen #{prefixlen}"
29
+ else
30
+ ip_address << " "
31
+ end
32
+ "ifconfig #{interface} inet6 | grep 'inet6 #{ip_address}'"
33
+ end
34
+
35
+ def get_link_state(interface)
36
+ # Checks if interfaces is administratively up with the -u arg.
37
+ # L1 check via status. Virtual interfaces like tapX missing the status will report up.
38
+ # Emulates operstate in linux with exception of the unknown status.
39
+ %Q{ifconfig -u #{interface} 2>&1 | awk -v s=up '/status:/ && $2 != "active" { s="down" }; END {print s}'}
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,28 @@
1
+ class Specinfra::Command::Darwin::Base::Inventory < Specinfra::Command::Base::Inventory
2
+ class << self
3
+ def get_memory
4
+ 'false'
5
+ end
6
+
7
+ def get_cpu
8
+ 'false'
9
+ end
10
+
11
+ def get_hostname
12
+ 'hostname -s'
13
+ end
14
+
15
+ def get_domain
16
+ 'hostname -f | ' +
17
+ 'awk -v h=`hostname -s` \'$1 ~ h { sub(h".", "", $1); print $1 }\''
18
+ end
19
+
20
+ def get_fqdn
21
+ 'hostname -f'
22
+ end
23
+
24
+ def get_filesystem
25
+ 'df -k'
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ class Specinfra::Command::Darwin::Base::Package < Specinfra::Command::Base::Package
2
+ class << self
3
+ def check_is_installed(package, version=nil)
4
+ escaped_package = escape(File.basename(package))
5
+ if version
6
+ cmd = %Q[brew info #{escaped_package} | grep -E "^$(brew --prefix)/Cellar/#{escaped_package}/#{escape(version)}"]
7
+ else
8
+ cmd = "#{brew_list} | grep -E '^#{escaped_package}$'"
9
+ end
10
+ cmd
11
+ end
12
+
13
+ alias :check_is_installed_by_homebrew :check_is_installed
14
+
15
+ def check_is_installed_by_homebrew_cask(package, version=nil)
16
+ escaped_package = escape(File.basename(package))
17
+ if version
18
+ cmd = "brew cask info #{escaped_package} | grep -E '^/opt/homebrew-cask/Caskroom/#{escaped_package}/#{escape(version)}'"
19
+ else
20
+ cmd = "#{brew_cask_list} | grep -E '^#{escaped_package}$'"
21
+ end
22
+ cmd
23
+ end
24
+
25
+ def check_is_installed_by_pkgutil(package, version=nil)
26
+ cmd = "pkgutil --pkg-info #{package}"
27
+ cmd = "#{cmd} | grep '^version: #{escape(version)}'" if version
28
+ cmd
29
+ end
30
+
31
+ def install(package, version=nil, option='')
32
+ # Homebrew doesn't support to install specific version.
33
+ cmd = "brew install #{option} '#{package}'"
34
+ end
35
+
36
+ def get_version(package, opts=nil)
37
+ %Q[ls -1 "$(brew --prefix)/Cellar/#{package}/" | tail -1]
38
+ end
39
+
40
+ def brew_list
41
+ # Since `brew list` is slow, directly check Cellar directory
42
+ 'ls -1 "$(brew --prefix)/Cellar/"'
43
+ end
44
+
45
+ def brew_cask_list
46
+ # Since `brew cask list` is slow, directly check Caskroom directory
47
+ "ls -1 /opt/homebrew-cask/Caskroom/"
48
+ end
49
+ end
50
+ end
51
+
@@ -0,0 +1,8 @@
1
+ class Specinfra::Command::Darwin::Base::Port < Specinfra::Command::Base::Port
2
+ class << self
3
+ def check_is_listening(port, options={})
4
+ regexp = ":#{port} "
5
+ "lsof -nP -iTCP -sTCP:LISTEN | grep -- #{escape(regexp)}"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ class Specinfra::Command::Darwin::Base::Process < Specinfra::Command::Base::Process
2
+ class << self
3
+ def get(process, opts)
4
+ "ps -A -c -o #{opts[:format]},command | grep -E -m 1 ^\\ *[0-9]+\\ +#{escape(process)}$ | awk '{print $1}'"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ class Specinfra::Command::Darwin::Base::Service < Specinfra::Command::Base::Service
2
+ class << self
3
+ def check_is_enabled(service, level=nil)
4
+ "launchctl list | grep #{escape(service)}"
5
+ end
6
+
7
+ def check_is_running(service)
8
+ "launchctl list | grep #{escape(service)} | grep -E '^[0-9]+'"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ class Specinfra::Command::Darwin::Base::User < Specinfra::Command::Base::User
2
+ class << self
3
+ def check_has_home_directory(user, path_to_home)
4
+ "#{get_home_directory(user)} | grep -E '^#{escape(path_to_home)}$'"
5
+ end
6
+
7
+ def check_has_login_shell(user, path_to_shell)
8
+ "finger #{escape(user)} | grep -E '^Directory' | awk '{ print $4 }' | grep -E '^#{escape(path_to_shell)}$'"
9
+ end
10
+
11
+ def get_home_directory(user)
12
+ "finger #{escape(user)} | grep -E '^Directory' | awk '{ print $2 }'"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ class Specinfra::Command::Debian; end
@@ -0,0 +1,11 @@
1
+ class Specinfra::Command::Debian::Base < Specinfra::Command::Linux::Base
2
+ end
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
@@ -0,0 +1,33 @@
1
+ class Specinfra::Command::Debian::Base::Package < Specinfra::Command::Linux::Base::Package
2
+ class << self
3
+ def check_is_installed(package, version=nil)
4
+ escaped_package = escape(package)
5
+ if version
6
+ cmd = "dpkg-query -f '${Status} ${Version}' -W #{escaped_package} | grep -E '^(install|hold) ok installed #{escape(version)}$'"
7
+ else
8
+ cmd = "dpkg-query -f '${Status}' -W #{escaped_package} | grep -E '^(install|hold) ok installed$'"
9
+ end
10
+ cmd
11
+ end
12
+
13
+ alias :check_is_installed_by_apt :check_is_installed
14
+
15
+ def install(package, version=nil, option='')
16
+ if version
17
+ full_package = "#{package}=#{version}"
18
+ else
19
+ full_package = package
20
+ end
21
+ "DEBIAN_FRONTEND='noninteractive' apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' #{option} install #{full_package}"
22
+ end
23
+
24
+ def get_version(package, opts=nil)
25
+ "dpkg-query -f '${Status} ${Version}' -W #{package} | sed -n 's/^install ok installed //p'"
26
+ end
27
+
28
+ def remove(package, option='')
29
+ "DEBIAN_FRONTEND='noninteractive' apt-get -y #{option} remove #{package}"
30
+ end
31
+ end
32
+ end
33
+
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Debian::Base::Ppa < Specinfra::Command::Linux::Base::Ppa
2
+ end
@@ -0,0 +1,32 @@
1
+ class Specinfra::Command::Debian::Base::Service < Specinfra::Command::Linux::Base::Service
2
+ class << self
3
+ def check_is_enabled(service, level=3)
4
+ # Until everything uses Upstart, this needs an OR.
5
+ "ls /etc/rc#{level}.d/ | grep -- '^S..#{escape(service)}$' || grep '^\s*start on' /etc/init/#{escape(service)}.conf"
6
+ end
7
+
8
+ def enable(service)
9
+ "update-rc.d #{escape(service)} defaults"
10
+ end
11
+
12
+ def disable(service)
13
+ "update-rc.d -f #{escape(service)} remove"
14
+ end
15
+
16
+ def start(service)
17
+ "service #{escape(service)} start"
18
+ end
19
+
20
+ def stop(service)
21
+ "service #{escape(service)} stop"
22
+ end
23
+
24
+ def restart(service)
25
+ "service #{escape(service)} restart"
26
+ end
27
+
28
+ def reload(service)
29
+ "service #{escape(service)} reload"
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Debian::V8 < Specinfra::Command::Debian::Base
2
+ end
@@ -0,0 +1,5 @@
1
+ class Specinfra::Command::Debian::V8::Service < Specinfra::Command::Debian::Base::Service
2
+ class << self
3
+ include Specinfra::Command::Module::Systemd
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ class Specinfra::Command::Esxi; end
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Esxi::Base < Specinfra::Command::Linux::Base
2
+ end
@@ -0,0 +1,7 @@
1
+ class Specinfra::Command::Esxi::Base::Package < Specinfra::Command::Linux::Base::Package
2
+ class << self
3
+ def check_is_installed(package, version=nil)
4
+ "esxcli software vib list | grep #{escape(package)}"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ class Specinfra::Command::Fedora; end
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Fedora::Base < Specinfra::Command::Redhat::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class Specinfra::Command::Fedora::Base::Service < Specinfra::Command::Redhat::Base::Service
2
+ class << self
3
+ def create(os_info=nil)
4
+ if (os_info || os)[:release].to_i < 15
5
+ self
6
+ else
7
+ Specinfra::Command::Fedora::V15::Service
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Fedora::V15 < Specinfra::Command::Fedora::Base
2
+ end
@@ -0,0 +1,5 @@
1
+ class Specinfra::Command::Fedora::V15::Service < Specinfra::Command::Fedora::Base::Service
2
+ class << self
3
+ include Specinfra::Command::Module::Systemd
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ class Specinfra::Command::Freebsd; end
@@ -0,0 +1,3 @@
1
+ class Specinfra::Command::Freebsd::Base < Specinfra::Command::Base
2
+ end
3
+
@@ -0,0 +1,49 @@
1
+ class Specinfra::Command::Freebsd::Base::File < Specinfra::Command::Base::File
2
+ class << self
3
+ def check_is_grouped(file, group)
4
+ regexp = "^#{group}$"
5
+ "stat -f%Sg #{escape(file)} | grep -- #{escape(regexp)}"
6
+ end
7
+
8
+ def get_owner_group(file)
9
+ "stat -f%Sg #{escape(file)}"
10
+ end
11
+
12
+ def check_is_owned_by(file, owner)
13
+ regexp = "^#{owner}$"
14
+ "stat -f%Su #{escape(file)} | grep -- #{escape(regexp)}"
15
+ end
16
+
17
+ def get_owner_user(file)
18
+ "stat -f%Su #{escape(file)}"
19
+ end
20
+
21
+ def check_has_mode(file, mode)
22
+ "test `stat -f%Mp%Lp #{escape(file)}` -eq #{escape(mode)}"
23
+ end
24
+
25
+ def get_mode(file)
26
+ "stat -f%M%Lp #{escape(file)}".oct.to_s(8) # to remove leading 0
27
+ end
28
+
29
+ def check_is_linked_to(link, target)
30
+ "stat -f%Y #{escape(link)} | grep -- #{escape(target)}"
31
+ end
32
+
33
+ def get_mtime(file)
34
+ "stat -f%m #{escape(file)}"
35
+ end
36
+
37
+ def get_size(file)
38
+ "stat -f%z #{escape(file)}"
39
+ end
40
+
41
+ def get_sha256sum(file)
42
+ "sha256 #{escape(file)} | cut -d ' ' -f 4"
43
+ end
44
+
45
+ def get_md5sum(file)
46
+ "md5 #{escape(file)} | cut -d ' ' -f 4"
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,24 @@
1
+ class Specinfra::Command::Freebsd::Base::Host < Specinfra::Command::Base::Host
2
+ class << self
3
+ def check_is_reachable(host, port, proto, timeout)
4
+ if port.nil?
5
+ "ping -t #{escape(timeout)} -c 2 -n #{escape(host)}"
6
+ else
7
+ "nc -vvvvz#{escape(proto[0].chr)} #{escape(host)} #{escape(port)} -w #{escape(timeout)}"
8
+ end
9
+ end
10
+ def get_ipaddress(name)
11
+ # getent hosts will return both the ipv6 and ipv4 record.
12
+ # this will only pick the first one. (Linux behavior)
13
+ "getent hosts #{escape(name)} | awk '{print $1; exit}'"
14
+ end
15
+ def get_ipv4_address(name)
16
+ # May return multiple values pick the one matching ipv4
17
+ "getent hosts #{escape(name)} | awk '$1 ~ /^[0-9.]+$/ {print $1}'"
18
+ end
19
+ def get_ipv6_address(name)
20
+ # May return multiple values pick the one matching ipv6
21
+ "getent hosts #{escape(name)} | awk 'tolower($1) ~ /^[0-9a-f:]+$/ {print $1}'"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ class Specinfra::Command::Freebsd::Base::Interface < Specinfra::Command::Base::Interface
2
+ class << self
3
+ def check_exists(name)
4
+ "ifconfig #{name}"
5
+ end
6
+
7
+ def check_has_ipv4_address(interface, ip_address)
8
+ ip_address = ip_address.dup
9
+ if ip_address =~ /\/\d+$/
10
+ # remove the prefix - better would be to calculate the netmask
11
+ ip_address.gsub!(/\/\d+$/, "")
12
+ end
13
+ ip_address << " "
14
+ ip_address.gsub!(".", "\\.")
15
+ "ifconfig #{interface} inet | grep 'inet #{ip_address}'"
16
+ end
17
+
18
+ def check_has_ipv6_address(interface, ip_address)
19
+ ip_address = ip_address.dup
20
+ (ip_address, prefixlen) = ip_address.split(/\//)
21
+ ip_address.downcase!
22
+ if ip_address =~ /^fe80::/i
23
+ # link local needs the scope (interface) appended
24
+ ip_address << "%#{interface}"
25
+ end
26
+ unless prefixlen.to_s.empty?
27
+ # append prefixlen
28
+ ip_address << " prefixlen #{prefixlen}"
29
+ else
30
+ ip_address << " "
31
+ end
32
+ "ifconfig #{interface} inet6 | grep 'inet6 #{ip_address}'"
33
+ end
34
+
35
+ def get_link_state(interface)
36
+ # Checks if interfaces is administratively up with the -u arg.
37
+ # L1 check via status. Virtual interfaces like tapX missing the status will report up.
38
+ # Emulates operstate in linux with exception of the unknown status.
39
+ %Q{ifconfig -u #{interface} 2>&1 | awk -v s=up '/status:/ && $2 != "active" { s="down" }; END {print s}'}
40
+ end
41
+ end
42
+ end