specinfra 2.0.0.beta6 → 2.0.0.beta7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -2
  3. data/lib/specinfra.rb +25 -0
  4. data/lib/specinfra/backend/exec.rb +15 -103
  5. data/lib/specinfra/backend/ssh.rb +1 -1
  6. data/lib/specinfra/command.rb +208 -29
  7. data/lib/specinfra/command/aix.rb +1 -66
  8. data/lib/specinfra/command/aix/base.rb +2 -0
  9. data/lib/specinfra/command/aix/base/file.rb +19 -0
  10. data/lib/specinfra/command/aix/base/group.rb +6 -0
  11. data/lib/specinfra/command/aix/base/package.rb +9 -0
  12. data/lib/specinfra/command/aix/base/port.rb +6 -0
  13. data/lib/specinfra/command/aix/base/service.rb +9 -0
  14. data/lib/specinfra/command/aix/base/user.rb +13 -0
  15. data/lib/specinfra/command/arch.rb +1 -38
  16. data/lib/specinfra/command/arch/base.rb +11 -0
  17. data/lib/specinfra/command/arch/base/file.rb +5 -0
  18. data/lib/specinfra/command/arch/base/package.rb +22 -0
  19. data/lib/specinfra/command/arch/base/service.rb +3 -0
  20. data/lib/specinfra/command/base.rb +74 -334
  21. data/lib/specinfra/command/base/cron.rb +10 -0
  22. data/lib/specinfra/command/base/file.rb +95 -0
  23. data/lib/specinfra/command/base/group.rb +10 -0
  24. data/lib/specinfra/command/base/host.rb +23 -0
  25. data/lib/specinfra/command/base/interface.rb +2 -0
  26. data/lib/specinfra/command/base/ipfilter.rb +2 -0
  27. data/lib/specinfra/command/base/ipnat.rb +2 -0
  28. data/lib/specinfra/command/base/iptables.rb +2 -0
  29. data/lib/specinfra/command/base/kernel_module.rb +2 -0
  30. data/lib/specinfra/command/base/lxc_container.rb +2 -0
  31. data/lib/specinfra/command/base/mail_alias.rb +6 -0
  32. data/lib/specinfra/command/base/package.rb +43 -0
  33. data/lib/specinfra/command/base/port.rb +8 -0
  34. data/lib/specinfra/command/base/ppa.rb +2 -0
  35. data/lib/specinfra/command/base/process.rb +14 -0
  36. data/lib/specinfra/command/base/routing_table.rb +5 -0
  37. data/lib/specinfra/command/base/selinux.rb +2 -0
  38. data/lib/specinfra/command/base/service.rb +25 -0
  39. data/lib/specinfra/command/base/user.rb +31 -0
  40. data/lib/specinfra/command/base/yumrepo.rb +3 -0
  41. data/lib/specinfra/command/base/zfs.rb +1 -0
  42. data/lib/specinfra/command/darwin.rb +1 -67
  43. data/lib/specinfra/command/darwin/base.rb +2 -0
  44. data/lib/specinfra/command/darwin/base/file.rb +37 -0
  45. data/lib/specinfra/command/darwin/base/package.rb +15 -0
  46. data/lib/specinfra/command/darwin/base/port.rb +6 -0
  47. data/lib/specinfra/command/darwin/base/service.rb +9 -0
  48. data/lib/specinfra/command/debian.rb +1 -31
  49. data/lib/specinfra/command/debian/base.rb +11 -0
  50. data/lib/specinfra/command/debian/base/package.rb +22 -0
  51. data/lib/specinfra/command/debian/base/ppa.rb +2 -0
  52. data/lib/specinfra/command/debian/base/service.rb +6 -0
  53. data/lib/specinfra/command/fedora.rb +1 -29
  54. data/lib/specinfra/command/fedora/base.rb +2 -0
  55. data/lib/specinfra/command/fedora/base/service.rb +10 -0
  56. data/lib/specinfra/command/fedora/v15.rb +1 -0
  57. data/lib/specinfra/command/fedora/v15/service.rb +3 -0
  58. data/lib/specinfra/command/freebsd.rb +1 -39
  59. data/lib/specinfra/command/freebsd/base.rb +3 -0
  60. data/lib/specinfra/command/freebsd/base/file.rb +10 -0
  61. data/lib/specinfra/command/freebsd/base/package.rb +17 -0
  62. data/lib/specinfra/command/freebsd/base/port.rb +6 -0
  63. data/lib/specinfra/command/freebsd/base/service.rb +5 -0
  64. data/lib/specinfra/command/freebsd/v10.rb +1 -0
  65. data/lib/specinfra/command/freebsd/v10/package.rb +17 -0
  66. data/lib/specinfra/command/gentoo.rb +1 -18
  67. data/lib/specinfra/command/gentoo/base.rb +2 -0
  68. data/lib/specinfra/command/gentoo/base/package.rb +5 -0
  69. data/lib/specinfra/command/gentoo/base/service.rb +17 -0
  70. data/lib/specinfra/command/linux.rb +1 -71
  71. data/lib/specinfra/command/linux/base.rb +2 -0
  72. data/lib/specinfra/command/linux/base/file.rb +13 -0
  73. data/lib/specinfra/command/linux/base/interface.rb +17 -0
  74. data/lib/specinfra/command/linux/base/iptables.rb +10 -0
  75. data/lib/specinfra/command/linux/base/kernel_module.rb +5 -0
  76. data/lib/specinfra/command/linux/base/lxc_container.rb +9 -0
  77. data/lib/specinfra/command/linux/base/package.rb +2 -0
  78. data/lib/specinfra/command/linux/base/ppa.rb +2 -0
  79. data/lib/specinfra/command/linux/base/selinux.rb +10 -0
  80. data/lib/specinfra/command/linux/base/service.rb +2 -0
  81. data/lib/specinfra/command/linux/base/yumrepo.rb +2 -0
  82. data/lib/specinfra/command/linux/base/zfs.rb +3 -0
  83. data/lib/specinfra/command/module.rb +2 -0
  84. data/lib/specinfra/command/module/systemd.rb +13 -0
  85. data/lib/specinfra/command/module/zfs.rb +14 -0
  86. data/lib/specinfra/command/nixos.rb +1 -28
  87. data/lib/specinfra/command/nixos/base.rb +2 -0
  88. data/lib/specinfra/command/nixos/base/package.rb +15 -0
  89. data/lib/specinfra/command/nixos/base/service.rb +3 -0
  90. data/lib/specinfra/command/openbsd.rb +1 -91
  91. data/lib/specinfra/command/openbsd/base.rb +4 -0
  92. data/lib/specinfra/command/openbsd/base/file.rb +39 -0
  93. data/lib/specinfra/command/openbsd/base/interface.rb +9 -0
  94. data/lib/specinfra/command/openbsd/base/mail_alias.rb +5 -0
  95. data/lib/specinfra/command/openbsd/base/package.rb +13 -0
  96. data/lib/specinfra/command/openbsd/base/port.rb +5 -0
  97. data/lib/specinfra/command/openbsd/base/service.rb +9 -0
  98. data/lib/specinfra/command/openbsd/base/user.rb +16 -0
  99. data/lib/specinfra/command/opensuse.rb +1 -14
  100. data/lib/specinfra/command/opensuse/base.rb +3 -0
  101. data/lib/specinfra/command/opensuse/base/service.rb +3 -0
  102. data/lib/specinfra/command/plamo.rb +1 -21
  103. data/lib/specinfra/command/plamo/base.rb +3 -0
  104. data/lib/specinfra/command/plamo/base/package.rb +9 -0
  105. data/lib/specinfra/command/plamo/base/service.rb +12 -0
  106. data/lib/specinfra/command/redhat.rb +1 -40
  107. data/lib/specinfra/command/redhat/base.rb +2 -0
  108. data/lib/specinfra/command/redhat/base/file.rb +6 -0
  109. data/lib/specinfra/command/redhat/base/iptables.rb +11 -0
  110. data/lib/specinfra/command/redhat/base/package.rb +28 -0
  111. data/lib/specinfra/command/redhat/base/service.rb +12 -0
  112. data/lib/specinfra/command/redhat/base/yumrepo.rb +11 -0
  113. data/lib/specinfra/command/redhat/v5.rb +2 -0
  114. data/lib/specinfra/command/redhat/v5/iptables.rb +8 -0
  115. data/lib/specinfra/command/redhat/v7.rb +2 -0
  116. data/lib/specinfra/command/redhat/v7/service.rb +3 -0
  117. data/lib/specinfra/command/smartos.rb +1 -25
  118. data/lib/specinfra/command/smartos/base.rb +3 -0
  119. data/lib/specinfra/command/smartos/base/package.rb +13 -0
  120. data/lib/specinfra/command/smartos/base/service.rb +9 -0
  121. data/lib/specinfra/command/smartos/tmp.rb +8 -0
  122. data/lib/specinfra/command/solaris.rb +1 -117
  123. data/lib/specinfra/command/solaris/base.rb +2 -0
  124. data/lib/specinfra/command/solaris/base/cron.rb +10 -0
  125. data/lib/specinfra/command/solaris/base/file.rb +17 -0
  126. data/lib/specinfra/command/solaris/base/group.rb +6 -0
  127. data/lib/specinfra/command/solaris/base/host.rb +12 -0
  128. data/lib/specinfra/command/solaris/base/ipfilter.rb +5 -0
  129. data/lib/specinfra/command/solaris/base/ipnat.rb +12 -0
  130. data/lib/specinfra/command/solaris/base/package.rb +12 -0
  131. data/lib/specinfra/command/solaris/base/port.rb +11 -0
  132. data/lib/specinfra/command/solaris/base/service.rb +19 -0
  133. data/lib/specinfra/command/solaris/base/user.rb +13 -0
  134. data/lib/specinfra/command/solaris/base/zfs.rb +11 -0
  135. data/lib/specinfra/command/solaris/v10.rb +1 -0
  136. data/lib/specinfra/command/solaris/v10/file.rb +40 -0
  137. data/lib/specinfra/command/solaris/v10/group.rb +5 -0
  138. data/lib/specinfra/command/solaris/v10/host.rb +11 -0
  139. data/lib/specinfra/command/solaris/v10/package.rb +9 -0
  140. data/lib/specinfra/command/solaris/v10/user.rb +16 -0
  141. data/lib/specinfra/command/suse.rb +1 -27
  142. data/lib/specinfra/command/suse/base.rb +2 -0
  143. data/lib/specinfra/command/suse/base/package.rb +19 -0
  144. data/lib/specinfra/command/suse/base/service.rb +12 -0
  145. data/lib/specinfra/command/ubuntu.rb +11 -23
  146. data/lib/specinfra/command/ubuntu/base.rb +2 -0
  147. data/lib/specinfra/command/ubuntu/base/ppa.rb +15 -0
  148. data/lib/specinfra/command/ubuntu/base/service.rb +5 -0
  149. data/lib/specinfra/command/windows.rb +1 -344
  150. data/lib/specinfra/command/windows/base.rb +14 -0
  151. data/lib/specinfra/command/windows/base/feature.rb +15 -0
  152. data/lib/specinfra/command/windows/base/file.rb +103 -0
  153. data/lib/specinfra/command/windows/base/group.rb +9 -0
  154. data/lib/specinfra/command/windows/base/host.rb +23 -0
  155. data/lib/specinfra/command/windows/base/hot_fix.rb +17 -0
  156. data/lib/specinfra/command/windows/base/iis_app_pool.rb +15 -0
  157. data/lib/specinfra/command/windows/base/iis_website.rb +36 -0
  158. data/lib/specinfra/command/windows/base/package.rb +9 -0
  159. data/lib/specinfra/command/windows/base/port.rb +15 -0
  160. data/lib/specinfra/command/windows/base/process.rb +7 -0
  161. data/lib/specinfra/command/windows/base/registry_key.rb +43 -0
  162. data/lib/specinfra/command/windows/base/scheduled_task.rb +8 -0
  163. data/lib/specinfra/command/windows/base/service.rb +29 -0
  164. data/lib/specinfra/command/windows/base/user.rb +20 -0
  165. data/lib/specinfra/configuration.rb +2 -1
  166. data/lib/specinfra/helper.rb +1 -1
  167. data/lib/specinfra/helper/backend.rb +1 -1
  168. data/lib/specinfra/helper/detect_os.rb +15 -21
  169. data/lib/specinfra/helper/detect_os/aix.rb +7 -0
  170. data/lib/specinfra/helper/detect_os/arch.rb +7 -0
  171. data/lib/specinfra/helper/detect_os/darwin.rb +7 -0
  172. data/lib/specinfra/helper/detect_os/debian.rb +24 -0
  173. data/lib/specinfra/helper/detect_os/freebsd.rb +11 -0
  174. data/lib/specinfra/helper/detect_os/gentoo.rb +7 -0
  175. data/lib/specinfra/helper/detect_os/nixos.rb +7 -0
  176. data/lib/specinfra/helper/detect_os/openbsd.rb +7 -0
  177. data/lib/specinfra/helper/detect_os/plamo.rb +7 -0
  178. data/lib/specinfra/helper/detect_os/redhat.rb +27 -0
  179. data/lib/specinfra/helper/detect_os/solaris.rb +15 -0
  180. data/lib/specinfra/helper/detect_os/suse.rb +15 -0
  181. data/lib/specinfra/helper/os.rb +47 -33
  182. data/lib/specinfra/version.rb +1 -1
  183. data/spec/backend/exec/build_command_spec.rb +16 -11
  184. data/spec/command/base/file_spec.rb +11 -0
  185. data/spec/command/base_spec.rb +28 -0
  186. data/spec/command/module/systemd_spec.rb +8 -0
  187. data/spec/command/redhat/package_spec.rb +12 -0
  188. data/spec/helper/os_spec.rb +58 -0
  189. metadata +163 -8
  190. data/lib/specinfra/command/freebsd10.rb +0 -21
  191. data/lib/specinfra/command/redhat7.rb +0 -9
  192. data/lib/specinfra/command/solaris10.rb +0 -78
  193. data/lib/specinfra/command/solaris11.rb +0 -7
  194. data/spec/command/base.rb +0 -28
@@ -0,0 +1,14 @@
1
+ class Specinfra::Command::Windows::Base
2
+ def self.create
3
+ self.new
4
+ end
5
+
6
+ private
7
+ def windows_account account
8
+ match = /((.+)\\)?(.+)/.match account
9
+ domain = match[2]
10
+ name = match[3]
11
+ [name, domain]
12
+ end
13
+
14
+ end
@@ -0,0 +1,15 @@
1
+ class Specinfra::Command::Windows::Base::Feature < Specinfra::Command::Windows::Base
2
+ def check_is_enabled(name,provider)
3
+ if provider.nil?
4
+ cmd = "@(ListWindowsFeatures -feature #{name}).count -gt 0"
5
+ else
6
+ cmd = "@(ListWindowsFeatures -feature #{name} -provider #{provider}).count -gt 0"
7
+ end
8
+
9
+ Backend::PowerShell::Command.new do
10
+ using 'list_windows_features.ps1'
11
+ exec cmd
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,103 @@
1
+ class Specinfra::Command::Windows::Base::File < Specinfra::Command::Windows::Base
2
+ def check_is_file(file)
3
+ cmd = item_has_attribute file, 'Archive'
4
+ Backend::PowerShell::Command.new do
5
+ exec cmd
6
+ end
7
+ end
8
+
9
+ def check_is_directory(dir)
10
+ cmd = item_has_attribute dir, 'Directory'
11
+ Backend::PowerShell::Command.new do
12
+ exec cmd
13
+ end
14
+ end
15
+
16
+ def check_is_hidden(file)
17
+ cmd = item_has_attribute file, 'Hidden'
18
+ Backend::PowerShell::Command.new do
19
+ exec cmd
20
+ end
21
+ end
22
+
23
+ def check_is_readonly(file)
24
+ cmd = item_has_attribute file, 'ReadOnly'
25
+ Backend::PowerShell::Command.new do
26
+ exec cmd
27
+ end
28
+ end
29
+
30
+ def check_is_system(file)
31
+ cmd = item_has_attribute file, 'System'
32
+ Backend::PowerShell::Command.new do
33
+ exec cmd
34
+ end
35
+ end
36
+
37
+ def get_content(file)
38
+ "[Io.File]::ReadAllText('#{file}')"
39
+ end
40
+
41
+ def check_access_by_user(file, user, access)
42
+ case access
43
+ when 'r'
44
+ check_is_readable(file, user)
45
+ when 'w'
46
+ check_is_writable(file, user)
47
+ when 'x'
48
+ check_is_executable(file, user)
49
+ end
50
+ end
51
+
52
+ def check_is_readable(file, by_whom)
53
+ Backend::PowerShell::Command.new do
54
+ using 'check_file_access_rules.ps1'
55
+ exec "CheckFileAccessRules -path '#{file}' -identity '#{get_identity by_whom}' -rules @('FullControl', 'Modify', 'ReadAndExecute', 'Read', 'ListDirectory')"
56
+ end
57
+ end
58
+
59
+ def check_is_writable(file, by_whom)
60
+ Backend::PowerShell::Command.new do
61
+ using 'check_file_access_rules.ps1'
62
+ exec "CheckFileAccessRules -path '#{file}' -identity '#{get_identity by_whom}' -rules @('FullControl', 'Modify', 'Write')"
63
+ end
64
+ end
65
+
66
+ def check_is_executable(file, by_whom)
67
+ Backend::PowerShell::Command.new do
68
+ using 'check_file_access_rules.ps1'
69
+ exec "CheckFileAccessRules -path '#{file}' -identity '#{get_identity by_whom}' -rules @('FullControl', 'Modify', 'ReadAndExecute', 'ExecuteFile')"
70
+ end
71
+ end
72
+
73
+ def check_contain(file, pattern)
74
+ Backend::PowerShell::Command.new do
75
+ exec "[Io.File]::ReadAllText('#{file}') -match '#{convert_regexp(pattern)}'"
76
+ end
77
+ end
78
+
79
+ def check_contain_within file, pattern, from=nil, to=nil
80
+ from ||= '^'
81
+ to ||= '$'
82
+ Backend::PowerShell::Command.new do
83
+ using 'crop_text.ps1'
84
+ exec %Q[(CropText -text ([Io.File]::ReadAllText('#{file}')) -fromPattern '#{convert_regexp(from)}' -toPattern '#{convert_regexp(to)}') -match '#{pattern}']
85
+ end
86
+ end
87
+
88
+ def check_version(name,version)
89
+ cmd = "((Get-Command '#{name}').FileVersionInfo.ProductVersion -eq '#{version}') -or ((Get-Command '#{name}').FileVersionInfo.FileVersion -eq '#{version}')"
90
+ Backend::PowerShell::Command.new { exec cmd }
91
+ end
92
+
93
+ private
94
+ def item_has_attribute item, attribute
95
+ "((Get-Item -Path '#{item}' -Force).attributes.ToString() -Split ', ') -contains '#{attribute}'"
96
+ end
97
+
98
+ end
99
+
100
+
101
+
102
+
103
+
@@ -0,0 +1,9 @@
1
+ class Specinfra::Command::Windows::Base::Group < Specinfra::Command::Windows::Base
2
+ def check_exists(group)
3
+ group_id, domain = windows_account group
4
+ Backend::PowerShell::Command.new do
5
+ using 'find_group.ps1'
6
+ exec "(FindGroup -groupName '#{group_id}'#{domain.nil? ? "" : " -domain '#{domain}'"}) -ne $null"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,23 @@
1
+ class Specinfra::Command::Windows::Base::Host < Specinfra::Command::Windows::Base
2
+ def check_is_resolvable(name, type)
3
+ if type == "hosts"
4
+ cmd = "@(Select-String -path (Join-Path -Path $($env:windir) -ChildPath 'system32/drivers/etc/hosts') -pattern '#{name}\\b').count -gt 0"
5
+ else
6
+ cmd = "@([System.Net.Dns]::GetHostAddresses('#{name}')).count -gt 0"
7
+ end
8
+ Backend::PowerShell::Command.new { exec cmd }
9
+ end
10
+
11
+ def check_is_reachable(host, port, proto, timeout)
12
+ if port.nil?
13
+ Backend::PowerShell::Command.new do
14
+ exec "(New-Object System.Net.NetworkInformation.Ping).send('#{host}').Status -eq 'Success'"
15
+ end
16
+ else
17
+ Backend::PowerShell::Command.new do
18
+ using 'is_remote_port_listening.ps1'
19
+ exec"(IsRemotePortListening -hostname #{host} -port #{port} -timeout #{timeout} -proto #{proto}) -eq $true"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ class Specinfra::Command::Windows::Base::HotFix < Specinfra::Command::Windows::Base
2
+ def check_is_installed(description, hot_fix_id=nil)
3
+ hot_fix_id_match = /(KB\d+)/i.match(description)
4
+ hot_fix_id = hot_fix_id_match ? hot_fix_id_match[1] : description if hot_fix_id.nil?
5
+
6
+ args = [
7
+ '-description', "'#{description}'",
8
+ '-hotFixId', "'#{hot_fix_id}'"
9
+ ]
10
+
11
+ cmd = "(FindInstalledHotFix #{args.join(' ')})"
12
+ Backend::PowerShell::Command.new do
13
+ using 'find_installed_hot_fix.ps1'
14
+ exec "#{cmd} -eq $true"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ class Specinfra::Command::Windows::Base::IisAppPool < Specinfra::Command::Windows::Base
2
+ def check_exists(name)
3
+ Backend::PowerShell::Command.new do
4
+ using 'find_iis_component.ps1'
5
+ exec "@(FindIISAppPool -name '#{name}').count -gt 0"
6
+ end
7
+ end
8
+
9
+ def check_has_dotnet_version(name, dotnet)
10
+ Backend::PowerShell::Command.new do
11
+ using 'find_iis_component.ps1'
12
+ exec "(FindIISAppPool -name '#{name}').managedRuntimeVersion -match 'v#{dotnet}'"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ class Specinfra::Command::Windows::Base::IisWebsite < Specinfra::Command::Windows::Base
2
+ def check_is_enabled(name)
3
+ Backend::PowerShell::Command.new do
4
+ using 'find_iis_component.ps1'
5
+ exec "(FindIISWebsite -name '#{name}').serverAutoStart -eq $true"
6
+ end
7
+ end
8
+
9
+ def check_is_installed(name)
10
+ Backend::PowerShell::Command.new do
11
+ using 'find_iis_component.ps1'
12
+ exec "@(FindIISWebsite -name '#{name}').count -gt 0"
13
+ end
14
+ end
15
+
16
+ def check_is_running(name)
17
+ Backend::PowerShell::Command.new do
18
+ using 'find_iis_component.ps1'
19
+ exec "(FindIISWebsite -name '#{name}').state -eq 'Started'"
20
+ end
21
+ end
22
+
23
+ def check_is_in_app_pool(name, app_pool)
24
+ Backend::PowerShell::Command.new do
25
+ using 'find_iis_component.ps1'
26
+ exec "(FindIISWebsite -name '#{name}').applicationPool -match '#{app_pool}'"
27
+ end
28
+ end
29
+
30
+ def check_has_physical_path(name, path)
31
+ Backend::PowerShell::Command.new do
32
+ using 'find_iis_component.ps1'
33
+ exec "[System.Environment]::ExpandEnvironmentVariables( ( FindIISWebsite -name '#{name}' ).physicalPath ).replace('\\', '/' ) -eq ('#{path}'.trimEnd('/').replace('\\', '/'))"
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ class Specinfra::Command::Windows::Base::Package < Specinfra::Command::Windows::Base
2
+ def check_is_installed(package, version=nil)
3
+ version_selection = version.nil? ? "" : "-appVersion '#{version}'"
4
+ Backend::PowerShell::Command.new do
5
+ using 'find_installed_application.ps1'
6
+ exec "(FindInstalledApplication -appName '#{package}' #{version_selection}) -eq $true"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ class Specinfra::Command::Windows::Base::Port < Specinfra::Command::Windows::Base
2
+ def check_is_listening(port, options=nil)
3
+ Backend::PowerShell::Command.new do
4
+ using 'is_port_listening.ps1'
5
+ exec "IsPortListening -portNumber #{port}"
6
+ end
7
+ end
8
+
9
+ def check_is_listening_with_protocol(port, protocol)
10
+ Backend::PowerShell::Command.new do
11
+ using 'is_port_listening.ps1'
12
+ exec "IsPortListening -portNumber #{port} -protocol '#{protocol}'"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ class Specinfra::Command::Windows::Base::Process < Specinfra::Command::Windows::Base
2
+ def check_process(process)
3
+ Backend::PowerShell::Command.new do
4
+ exec "(Get-Process '#{process}') -ne $null"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,43 @@
1
+ class Specinfra::Command::Windows::Base::RegistryKey < Specinfra::Command::Windows::Base
2
+ REGISTRY_KEY_TYPES = {
3
+ :type_string => 'String',
4
+ :type_binary => 'Binary',
5
+ :type_dword => 'DWord',
6
+ :type_qword => 'QWord',
7
+ :type_multistring => 'MultiString',
8
+ :type_expandstring => 'ExpandString'
9
+ }
10
+
11
+ def check_exists(key_name)
12
+ cmd = "(Get-Item 'Registry::#{key_name}') -ne $null"
13
+ Backend::PowerShell::Command.new { exec cmd }
14
+ end
15
+
16
+ def check_has_property(key_name, key_property)
17
+ cmd = "(Get-Item 'Registry::#{key_name}').GetValueKind('#{key_property[:name]}') -eq '#{REGISTRY_KEY_TYPES[key_property[:type]]}'"
18
+ Backend::PowerShell::Command.new { exec cmd }
19
+ end
20
+
21
+ def check_has_value(key_name, key_property)
22
+ value = convert_key_property_value key_property
23
+ cmd = "(Compare-Object (Get-Item 'Registry::#{key_name}').GetValue('#{key_property[:name]}') #{value}) -eq $null"
24
+ Backend::PowerShell::Command.new { exec cmd }
25
+ end
26
+
27
+ private
28
+ def convert_key_property_value property
29
+ case property[:type]
30
+ when :type_binary
31
+ byte_array = [property[:value]].pack('H*').bytes.to_a
32
+ "([byte[]] #{byte_array.join(',')})"
33
+ when :type_dword
34
+ [property[:value].rjust(8, '0').scan(/[0-9a-f]{2}/i).reverse.join].pack("H*").unpack("l").first
35
+ when :type_qword
36
+ property[:value].hex
37
+ else
38
+ string_array = property[:value].split("\n").map {|s| "'#{s}'"}.reduce {|acc, s| "#{acc},#{s}"}
39
+ "@(#{string_array})"
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,8 @@
1
+ class Specinfra::Command::Windows::Base::ScheduledTask < Specinfra::Command::Windows::Base
2
+ def check_exists(name)
3
+ Backend::PowerShell::Command.new do
4
+ using 'find_scheduled_task.ps1'
5
+ exec "(FindScheduledTask -name '#{name}').TaskName -eq '\\#{name}'"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ class Specinfra::Command::Windows::Base::Service < Specinfra::Command::Windows::Base
2
+ def check_is_installed(service)
3
+ Backend::PowerShell::Command.new do
4
+ using 'find_service.ps1'
5
+ exec "@(FindService -name '#{service}').count -gt 0"
6
+ end
7
+ end
8
+
9
+ def check_has_start_mode(service, mode)
10
+ Backend::PowerShell::Command.new do
11
+ using 'find_service.ps1'
12
+ exec "'#{mode}' -match (FindService -name '#{service}').StartMode -and (FindService -name '#{service}') -ne $null"
13
+ end
14
+ end
15
+
16
+ def check_is_enabled(service, level=nil)
17
+ Backend::PowerShell::Command.new do
18
+ using 'find_service.ps1'
19
+ exec "(FindService -name '#{service}').StartMode -eq 'Auto'"
20
+ end
21
+ end
22
+
23
+ def check_is_running(service)
24
+ Backend::PowerShell::Command.new do
25
+ using 'find_service.ps1'
26
+ exec "(FindService -name '#{service}').State -eq 'Running'"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ class Specinfra::Command::Windows::Base::User < Specinfra::Command::Windows::Base
2
+ def check_exists(user)
3
+ user_id, domain = windows_account user
4
+ Backend::PowerShell::Command.new do
5
+ using 'find_user.ps1'
6
+ exec "(FindUser -userName '#{user_id}'#{domain.nil? ? "" : " -domain '#{domain}'"}) -ne $null"
7
+ end
8
+ end
9
+
10
+ def check_is_belonging_to_group(user, group)
11
+ user_id, user_domain = windows_account user
12
+ group_id, group_domain = windows_account group
13
+ Backend::PowerShell::Command.new do
14
+ using 'find_user.ps1'
15
+ using 'find_group.ps1'
16
+ using 'find_usergroup.ps1'
17
+ exec "(FindUserGroup -userName '#{user_id}'#{user_domain.nil? ? "" : " -userDomain '#{user_domain}'"} -groupName '#{group_id}'#{group_domain.nil? ? "" : " -groupDomain '#{group_domain}'"}) -ne $null"
18
+ end
19
+ end
20
+ end
@@ -23,7 +23,8 @@ module Specinfra
23
23
 
24
24
  # Define os method explicitly to avoid stack level
25
25
  # too deep caused by Helpet::DetectOS#os
26
- def os
26
+ def os(value=nil)
27
+ @os = value if value
27
28
  if @os.nil? && defined?(RSpec) && RSpec.configuration.respond_to?(:os)
28
29
  @os = RSpec.configuration.os
29
30
  end
@@ -1,5 +1,5 @@
1
1
  require 'specinfra/helper/os'
2
- require 'specinfra/helper/detect_os'
2
+ include Specinfra::Helper::Os
3
3
 
4
4
  require 'specinfra/helper/backend'
5
5
  include Specinfra::Helper::Backend
@@ -18,7 +18,7 @@ module Specinfra
18
18
  module Backend
19
19
  def backend_for(type)
20
20
  instance = self.class.const_get('Specinfra').const_get('Backend').const_get(type.to_s.capitalize).instance
21
- commands = self.class.const_get('Specinfra').const_get('Command').const_get(instance.check_os[:family]).new
21
+ commands = Specinfra::Command::Base.new
22
22
  instance.set_commands(commands)
23
23
  instance
24
24
  end
@@ -1,23 +1,17 @@
1
- module Specinfra
2
- module Helper
3
- module DetectOS
4
- def commands
5
- self.class.const_get('Specinfra').const_get('Command').const_get(os[:family]).new
6
- end
7
-
8
- def os
9
- property[:os_by_host] = {} if ! property[:os_by_host]
10
- host = Specinfra.configuration.ssh ? Specinfra.configuration.ssh.host : 'localhost'
11
-
12
- if property[:os_by_host][host]
13
- os_by_host = property[:os_by_host][host]
14
- else
15
- # Set command object explicitly to avoid `stack too deep`
16
- os_by_host = backend(Specinfra::Command::Base.new).check_os
17
- property[:os_by_host][host] = os_by_host
18
- end
19
- os_by_host
20
- end
21
- end
1
+ module Specinfra::Helper
2
+ class DetectOs
22
3
  end
23
4
  end
5
+
6
+ require 'specinfra/helper/detect_os/aix'
7
+ require 'specinfra/helper/detect_os/arch'
8
+ require 'specinfra/helper/detect_os/darwin'
9
+ require 'specinfra/helper/detect_os/debian'
10
+ require 'specinfra/helper/detect_os/freebsd'
11
+ require 'specinfra/helper/detect_os/gentoo'
12
+ require 'specinfra/helper/detect_os/nixos'
13
+ require 'specinfra/helper/detect_os/openbsd'
14
+ require 'specinfra/helper/detect_os/plamo'
15
+ require 'specinfra/helper/detect_os/redhat'
16
+ require 'specinfra/helper/detect_os/solaris'
17
+ require 'specinfra/helper/detect_os/suse'