specinfra-cisco 2.40.2

Sign up to get free protection for your applications and to get access to all the features.
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,8 @@
1
+ function CheckFileAccessRules
2
+ {
3
+ param($path, $identity, $rules)
4
+
5
+ $accessRules = @((Get-Acl $path).access | Where-Object {$_.AccessControlType -eq 'Allow' -and $_.IdentityReference -eq $identity })
6
+ $match = @($accessRules | Where-Object {($_.FileSystemRights.ToString().Split(',') | % {$_.trim()} | ? {$rules -contains $_}) -ne $null})
7
+ $match.count -gt 0
8
+ }
@@ -0,0 +1,11 @@
1
+ function CropText
2
+ {
3
+ param($text, $fromPattern, $toPattern)
4
+
5
+ $from, $to = ([regex]::matches($text, $fromPattern)), ([regex]::matches($text, $toPattern))
6
+ if ($from.count -gt 0 -and $to.count -gt 0) {
7
+ $text.substring($from[0].index, $to[0].index + $to[0].length - $from[0].index)
8
+ } else {
9
+ ""
10
+ }
11
+ }
@@ -0,0 +1,8 @@
1
+ function FindGroup
2
+ {
3
+ param($groupName, $domain)
4
+ if ($domain -eq $null) {$selectionCriteria = " and LocalAccount = true"}
5
+ else {$selectionCriteria = " and Domain = '$domain'"}
6
+
7
+ Get-WmiObject Win32_Group -filter "Name = '$groupName' $selectionCriteria"
8
+ }
@@ -0,0 +1,90 @@
1
+ function FindIISWebsite
2
+ {
3
+ param($name)
4
+
5
+ Import-Module WebAdministration
6
+
7
+ Try {
8
+ Get-Item "IIS:\Sites\$name" -Erroraction silentlycontinue
9
+ }
10
+ Catch [System.IO.FileNotFoundException] {
11
+ Get-Item "IIS:\Sites\$name" -Erroraction silentlycontinue
12
+ }
13
+ }
14
+
15
+ function FindIISAppPool
16
+ {
17
+ param($name)
18
+
19
+ Import-Module WebAdministration
20
+
21
+ Try {
22
+ Get-Item "IIS:\AppPools\$name" -Erroraction silentlycontinue
23
+ }
24
+ Catch [System.IO.FileNotFoundException] {
25
+ Get-Item "IIS:\AppPools\$name" -Erroraction silentlycontinue
26
+
27
+ }
28
+ }
29
+
30
+ function FindSiteBindings
31
+ {
32
+ param($name, $protocol, $hostHeader, $port, $ipAddress)
33
+
34
+ Import-Module WebAdministration
35
+ Try {
36
+ Get-WebBinding -Name $name -Protocol $protocol -HostHeader $hostHeader -Port $port -IPAddress $ipAddress
37
+ }
38
+ Catch [System.IO.FileNotFoundException] {
39
+ Get-WebBinding -Name $name -Protocol $protocol -HostHeader $hostHeader -Port $port -IPAddress $ipAddress
40
+ }
41
+ }
42
+
43
+ function FindSiteVirtualDir
44
+ {
45
+ param($name, $vdir, $path)
46
+
47
+ Import-Module WebAdministration
48
+
49
+ $webVirtDirPath = [string]::Format('IIS:\Sites\{0}\{1}',$name, $vdir);
50
+ if (Test-Path $webVirtDirPath)
51
+ {
52
+ if ([string]::IsNullOrEmpty($path))
53
+ {
54
+ $true
55
+ }
56
+ else
57
+ {
58
+ (Get-Item $webVirtDirPath).physicalPath -eq $path
59
+ }
60
+ }
61
+ else
62
+ {
63
+ $false
64
+ }
65
+ }
66
+
67
+ function FindSiteApplication
68
+ {
69
+ param($name, $app, $pool, $physicalPath)
70
+
71
+ Import-Module WebAdministration
72
+
73
+ $path = "IIS:\Sites\${name}\${app}"
74
+ $result = $false
75
+ if (Test-Path $path)
76
+ {
77
+ $result = $true
78
+ if ([string]::IsNullOrEmpty($pool) -eq $false)
79
+ {
80
+ $result = $result -and (Get-Item $path).applicationPool -eq $pool
81
+ }
82
+
83
+ if ([string]::IsNullOrEmpty($physicalPath) -eq $false)
84
+ {
85
+ $result = $result -and (Get-Item $path).physicalPath -eq $physicalPath
86
+ }
87
+ }
88
+
89
+ $result
90
+ }
@@ -0,0 +1,37 @@
1
+ function FindInstalledApplication
2
+ {
3
+ param($appName, $appVersion)
4
+
5
+ if ((Get-WmiObject win32_operatingsystem).OSArchitecture -notmatch '64')
6
+ {
7
+ $keys= (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*')
8
+ $possible_path= 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
9
+ if (Test-Path $possible_path)
10
+ {
11
+ $keys+= (Get-ItemProperty $possible_path)
12
+ }
13
+ }
14
+ else
15
+ {
16
+ $keys = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*','HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*')
17
+ $possible_path= 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
18
+ if (Test-Path $possible_path)
19
+ {
20
+ $keys+= (Get-ItemProperty $possible_path)
21
+ }
22
+ $possible_path= 'HKCU:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
23
+ if (Test-Path $possible_path)
24
+ {
25
+ $keys+= (Get-ItemProperty $possible_path)
26
+ }
27
+ }
28
+
29
+ if ($appVersion -eq $null) {
30
+ @($keys | Where-Object {$_.DisplayName -like $appName -or $_.PSChildName -like $appName}).Length -gt 0
31
+ }
32
+ else{
33
+ @($keys | Where-Object {$_.DisplayName -like $appName -or $_.PSChildName -like $appName } | Where-Object {$_.DisplayVersion -eq $appVersion} ).Length -gt 0
34
+ }
35
+
36
+ }
37
+
@@ -0,0 +1,18 @@
1
+ function FindInstalledHotFix
2
+ {
3
+ param($description, $hotFixId)
4
+
5
+ Write-Host "Num Args:" $args.Length;
6
+ foreach ($arg in $args)
7
+ {
8
+ Write-Host "Arg: $arg";
9
+ }
10
+
11
+ Write-Host $description
12
+ Write-Host $hotFixId
13
+
14
+ $keys= (Get-WmiObject -Class WIN32_QuickFixEngineering)
15
+
16
+ @($keys | Where-Object {$_.HotFixID -like $hotFixId}).Length -gt 0
17
+
18
+ }
@@ -0,0 +1,7 @@
1
+ function FindScheduledTask
2
+ {
3
+ param($name)
4
+
5
+ $task = schtasks /query /v /fo csv /TN "$name" | ConvertFrom-CSV
6
+ return $task
7
+ }
@@ -0,0 +1,5 @@
1
+ function FindService
2
+ {
3
+ param($name)
4
+ Get-WmiObject Win32_Service | Where-Object {$_.Name -eq $name -or $_.DisplayName -eq $name}
5
+ }
@@ -0,0 +1,8 @@
1
+ function FindUser
2
+ {
3
+ param($userName, $domain)
4
+ if ($domain -eq $null) {$selectionCriteria = " and LocalAccount = true"}
5
+ else {$selectionCriteria = " and Domain = '$domain'"}
6
+
7
+ Get-WmiObject Win32_UserAccount -filter "Name = '$userName' $selectionCriteria"
8
+ }
@@ -0,0 +1,9 @@
1
+ function FindUserGroup
2
+ {
3
+ param($userName, $groupName, $userDomain, $groupDomain)
4
+ $user = FindUser -userName $userName -domain $userDomain
5
+ $group = FindGroup -groupName $groupName -domain $groupDomain
6
+ if ($user -and $group) {
7
+ Get-WmiObject Win32_GroupUser -filter ("GroupComponent = 'Win32_Group.Domain=`"" + $group.domain + "`",Name=`"" + $group.name + "`"' and PartComponent = 'Win32_UserAccount.Domain=`"" + $user.domain + "`",Name=`"" + $user.name + "`"'")
8
+ }
9
+ }
@@ -0,0 +1,14 @@
1
+ function IsPortListening
2
+ {
3
+ param($portNumber, $protocol)
4
+ $netstatOutput = netstat -an | Out-String
5
+ $networkIPs = (Get-WmiObject Win32_NetworkAdapterConfiguration | ? {$_.IPEnabled}) | %{ $_.IPAddress[0] }
6
+ [array] $networkIPs += "0.0.0.0"
7
+ foreach ($ipaddress in $networkIPs)
8
+ {
9
+ $matchExpression = ("$ipaddress" + ":" + $portNumber)
10
+ if ($protocol) { $matchExpression = ($protocol.toUpper() + "\s+$matchExpression") }
11
+ if ($netstatOutput -match $matchExpression) { return $true }
12
+ }
13
+ $false
14
+ }
@@ -0,0 +1,51 @@
1
+ function IsRemotePortListening{
2
+ param(
3
+ [string]$hostname,
4
+ [string]$proto="tcp",
5
+ [int]$port,
6
+ [int]$timeout)
7
+
8
+
9
+ If ($proto -eq "tcp") {
10
+ $tcpobject = new-Object system.Net.Sockets.TcpClient
11
+ $connect = $tcpobject.BeginConnect($hostname,$port,$null,$null)
12
+ $wait = $connect.AsyncWaitHandle.WaitOne($timeout * 1000,$false)
13
+ #If timeout
14
+ If(!$wait) {
15
+ $tcpobject.Close()
16
+ return $false
17
+ }
18
+ else{
19
+ $result = $tcpobject.Connected
20
+ $tcpobject.Close()
21
+ return $result
22
+ }
23
+ }
24
+ elseif ($proto -eq "udp") {
25
+ $udpobject = new-Object system.Net.Sockets.Udpclient
26
+ $udpobject.client.ReceiveTimeout = $timeout * 1000
27
+ $udpobject.Connect($hostname,$port)
28
+ $a = new-object system.text.asciiencoding
29
+ $byte = $a.GetBytes("$(Get-Date)")
30
+ [void]$udpobject.Send($byte,$byte.length)
31
+ $remoteendpoint = New-Object system.net.ipendpoint([system.net.ipaddress]::Any,0)
32
+ try{
33
+ #Blocks until a message returns on this socket from a remote host.
34
+ $receivebytes = $udpobject.Receive([ref]$remoteendpoint)
35
+ [string]$returndata = $a.GetString($receivebytes)
36
+ If ($returndata) {
37
+ $udpobject.close()
38
+ return $true
39
+ }
40
+ else{
41
+ return $false
42
+ }
43
+ }
44
+ catch{
45
+ return $false
46
+ }
47
+ }
48
+ else{
49
+ throw "Protocol ${proto} not supported"
50
+ }
51
+ }
@@ -0,0 +1,68 @@
1
+ function ListWindowsFeatures
2
+ {
3
+
4
+ param(
5
+ [string]$feature,
6
+ [string]$provider="dism"
7
+ )
8
+
9
+ $cachepath = "${env:temp}/ListWindowsFeatures-${provider}.xml"
10
+ $maxAge = 2
11
+
12
+ $cache = Get-Item $cachepath -erroraction SilentlyContinue
13
+
14
+ if($cache -ne $null -and ((get-date) - $cache.LastWriteTime).minutes -lt $maxage){
15
+ $features = Import-Clixml $cachepath | Select *| Where-Object {(($_.name -like $feature) -or ($_.displayName -like $feature)) -and (($_.installed -eq $true) -or ($_.state -eq "Enabled"))}
16
+ return $features
17
+ }
18
+ else{
19
+
20
+ switch($provider)
21
+ {
22
+ "dism" { return features_dism | Select * | Where-Object {($_.name -eq $feature) -and ($_.state -eq "Enabled")} }
23
+ "powershell" { return features_powershell | Select * | Where-Object {(($_.name -like $feature) -or ($_.displayName -like $feature)) -and ($_.installed -eq $true)} }
24
+ default {throw "Unsupported provider"}
25
+ }
26
+
27
+ }
28
+ }
29
+
30
+ function features_dism{
31
+ try
32
+ {
33
+ $out = DISM /Online /Get-Features /Format:List | Where-Object {$_}
34
+
35
+ if($LASTEXITCODE -ne 0)
36
+ {
37
+ Write-Error $out
38
+ Break
39
+ }
40
+
41
+ $f = $out[4..($out.length-2)]
42
+ $features = for($i=0; $i -lt $f.length;$i+=2)
43
+ {
44
+ $tmp = $f[$i],$f[$i+1] -replace '^([^:]+:\s)'
45
+
46
+ New-Object PSObject -Property @{
47
+ Name = $tmp[0]
48
+ State = $tmp[1]
49
+ }
50
+ }
51
+
52
+ $features | Export-Clixml $cachepath
53
+
54
+ return $features
55
+ }
56
+ catch
57
+ {
58
+ Throw
59
+ }
60
+ }
61
+
62
+ function features_powershell{
63
+ $ProgressPreference = "SilentlyContinue"
64
+ import-module servermanager
65
+ $features = Get-WindowsFeature
66
+ $features | Export-Clixml $cachepath
67
+ return Get-WindowsFeature
68
+ }
@@ -0,0 +1,29 @@
1
+ require 'singleton'
2
+
3
+ module Specinfra
4
+ module Backend
5
+ class ShellScript < Base
6
+ def initialize(config = {})
7
+ super
8
+
9
+ @lines = [ "#!/bin/sh", "" ]
10
+ ObjectSpace.define_finalizer(self, Writer.new(@lines))
11
+ end
12
+
13
+ def run_command(cmd, opts={})
14
+ @lines << cmd
15
+ CommandResult.new
16
+ end
17
+
18
+ class Writer
19
+ def initialize(lines)
20
+ @lines = lines
21
+ end
22
+
23
+ def call(*args)
24
+ puts @lines
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,182 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'specinfra/backend/exec'
3
+ require 'net/ssh'
4
+ require 'net/scp'
5
+
6
+ module Specinfra
7
+ module Backend
8
+ class Ssh < Exec
9
+ def run_command(cmd, opt={})
10
+ cmd = build_command(cmd)
11
+ cmd = add_pre_command(cmd)
12
+
13
+ if get_config(:ssh_without_env)
14
+ ret = ssh_exec!(cmd)
15
+ else
16
+ ret = with_env do
17
+ ssh_exec!(cmd)
18
+ end
19
+ end
20
+
21
+ ret[:stdout].gsub!(/\r\n/, "\n")
22
+ ret[:stdout].gsub!(/\A\n/, "") if sudo?
23
+
24
+ if @example
25
+ @example.metadata[:command] = cmd
26
+ @example.metadata[:stdout] = ret[:stdout]
27
+ end
28
+
29
+ CommandResult.new ret
30
+ end
31
+
32
+ def send_file(from, to)
33
+ scp_upload!(from, to)
34
+ end
35
+
36
+ def send_directory(from, to)
37
+ scp_upload!(from, to, :recursive => true)
38
+ end
39
+
40
+ def build_command(cmd)
41
+ cmd = super(cmd)
42
+ if sudo?
43
+ cmd = "#{sudo} -p '#{prompt}' #{cmd}"
44
+ end
45
+ cmd
46
+ end
47
+
48
+ private
49
+ def prompt
50
+ 'Password: '
51
+ end
52
+
53
+ def with_env
54
+ env = get_config(:env) || {}
55
+ env[:LANG] ||= 'C'
56
+
57
+ ssh_options = get_config(:ssh_options) || {}
58
+ ssh_options[:send_env] ||= []
59
+
60
+ env.each do |key, value|
61
+ key = key.to_s
62
+ ENV["_SPECINFRA_#{key}"] = ENV[key];
63
+ ENV[key] = value
64
+ ssh_options[:send_env] << key
65
+ end
66
+
67
+ yield
68
+ ensure
69
+ env.each do |key, value|
70
+ key = key.to_s
71
+ ENV[key] = ENV.delete("_SPECINFRA_#{key}");
72
+ end
73
+ end
74
+
75
+ def create_ssh
76
+ Net::SSH.start(
77
+ get_config(:host),
78
+ get_config(:ssh_options)[:user],
79
+ get_config(:ssh_options)
80
+ )
81
+ end
82
+
83
+ def create_scp
84
+ ssh = get_config(:ssh)
85
+ if ssh.nil?
86
+ ssh = create_ssh
87
+ end
88
+ Net::SCP.new(ssh)
89
+ end
90
+
91
+ def scp_upload!(from, to, opt={})
92
+ if get_config(:scp).nil?
93
+ set_config(:scp, create_scp)
94
+ end
95
+
96
+ tmp = File.join('/tmp', File.basename(to))
97
+ scp = get_config(:scp)
98
+ scp.upload!(from, tmp, opt)
99
+ run_command(command.get(:move_file, tmp, to))
100
+ end
101
+
102
+ def ssh_exec!(command)
103
+ stdout_data = ''
104
+ stderr_data = ''
105
+ exit_status = nil
106
+ exit_signal = nil
107
+ retry_prompt = /^Sorry, try again/
108
+
109
+ if get_config(:ssh).nil?
110
+ set_config(:ssh, create_ssh)
111
+ end
112
+
113
+ ssh = get_config(:ssh)
114
+ ssh.open_channel do |channel|
115
+ if get_config(:sudo_password) or get_config(:request_pty)
116
+ channel.request_pty do |ch, success|
117
+ abort "Could not obtain pty " if !success
118
+ end
119
+ end
120
+ channel.exec("#{command}") do |ch, success|
121
+ abort "FAILED: couldn't execute command (ssh.channel.exec)" if !success
122
+ channel.on_data do |ch, data|
123
+ if data.match retry_prompt
124
+ abort 'Wrong sudo password! Please confirm your password.'
125
+ elsif data.match /^#{prompt}/
126
+ channel.send_data "#{get_config(:sudo_password)}\n"
127
+ else
128
+ stdout_data += data
129
+ @stdout_handler.call(data) if @stdout_handler
130
+ end
131
+ end
132
+
133
+ channel.on_extended_data do |ch, type, data|
134
+ if data.match /you must have a tty to run sudo/
135
+ abort 'Please write "set :request_pty, true" in your spec_helper.rb or other appropriate file.'
136
+ end
137
+
138
+ if data.match /^sudo: no tty present and no askpass program specified/
139
+ abort 'Please set sudo password to Specinfra.configuration.sudo_password.'
140
+ else
141
+ stderr_data += data
142
+ @stderr_handler.call(data) if @stderr_handler
143
+ end
144
+ end
145
+
146
+ channel.on_request("exit-status") do |ch, data|
147
+ exit_status = data.read_long
148
+ end
149
+
150
+ channel.on_request("exit-signal") do |ch, data|
151
+ exit_signal = data.read_long
152
+ end
153
+ end
154
+ end
155
+ ssh.loop
156
+ { :stdout => stdout_data, :stderr => stderr_data, :exit_status => exit_status, :exit_signal => exit_signal }
157
+ end
158
+
159
+ def sudo
160
+ if sudo_path = get_config(:sudo_path)
161
+ sudo_path += '/sudo'
162
+ else
163
+ sudo_path = 'sudo'
164
+ end
165
+
166
+ sudo_options = get_config(:sudo_options)
167
+ if sudo_options
168
+ sudo_options = sudo_options.shelljoin if sudo_options.is_a?(Array)
169
+ sudo_options = ' ' + sudo_options
170
+ end
171
+
172
+ "#{sudo_path.shellescape}#{sudo_options}"
173
+ end
174
+
175
+ def sudo?
176
+ user = get_config(:ssh_options)[:user]
177
+ disable_sudo = get_config(:disable_sudo)
178
+ user != 'root' && !disable_sudo
179
+ end
180
+ end
181
+ end
182
+ end