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,13 @@
1
+ class Specinfra::Command::Solaris::Base::User < Specinfra::Command::Base::User
2
+ def check_is_belonging_to_group(user, group)
3
+ "id -Gn #{escape(user)} | grep -- #{escape(group)}"
4
+ end
5
+
6
+ def check_has_home_directory(user, path_to_home)
7
+ "getent passwd #{escape(user)} | cut -f 6 -d ':' | grep -w -- #{escape(path_to_home)}"
8
+ end
9
+
10
+ def check_has_login_shell(user, path_to_shell)
11
+ "getent passwd #{escape(user)} | cut -f 7 -d ':' | grep -w -- #{escape(path_to_shell)}"
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ class Specinfra::Command::Solaris::Base::Zfs < Specinfra::Command::Base::Zfs
2
+ include Specinfra::Command::Module::Zfs
3
+ end
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
@@ -0,0 +1 @@
1
+ module Specinfra::Command::Solaris::V10; end
@@ -0,0 +1,40 @@
1
+ class Specinfra::Command::Solaris::V10::File < Specinfra::Command::Solaris::Base::File
2
+ # reference: http://perldoc.perl.org/functions/stat.html
3
+ def check_mode(file, mode)
4
+ regexp = "^#{mode}$"
5
+ "perl -e 'printf \"%o\", (stat shift)[2]&07777' #{escape(file)} | grep -- #{escape(regexp)}"
6
+ end
7
+
8
+ # reference: http://perldoc.perl.org/functions/stat.html
9
+ # http://www.tutorialspoint.com/perl/perl_getpwuid.htm
10
+ def check_is_owned_by(file, owner)
11
+ regexp = "^#{owner}$"
12
+ "perl -e 'printf \"%s\", getpwuid((stat(\"#{escape(file)}\"))[4])' | grep -- #{escape(regexp)}"
13
+ end
14
+
15
+ # reference: http://perldoc.perl.org/functions/stat.html
16
+ # http://www.tutorialspoint.com/perl/perl_getgrgid.htm
17
+ def check_is_grouped(file, group)
18
+ regexp = "^#{group}$"
19
+ "perl -e 'printf \"%s\", getgrgid((stat(\"#{escape(file)}\"))[5])' | grep -- #{escape(regexp)}"
20
+ end
21
+
22
+ # reference: http://www.tutorialspoint.com/perl/perl_readlink.htm
23
+ def check_is_linked_to(link, target)
24
+ regexp = "^#{target}$"
25
+ "perl -e 'printf \"%s\", readlink(\"#{escape(link)}\")' | grep -- #{escape(regexp)}"
26
+ end
27
+
28
+ def check_contain(file, expected_pattern)
29
+ "grep -- #{escape(expected_pattern)} #{escape(file)}"
30
+ end
31
+
32
+ def check_has_md5checksum(file, expected)
33
+ "digest -a md5 -v #{escape(file)} | grep -iw -- #{escape(expected)}"
34
+ end
35
+
36
+ # reference: http://perldoc.perl.org/functions/stat.html
37
+ def get_mode(file)
38
+ "perl -e 'printf \"%o\", (stat shift)[2]&07777' #{escape(file)}"
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ class Specinfra::Command::Solaris::V10::Group < Specinfra::Command::Solaris::Base::Group
2
+ def check_exists(group)
3
+ "getent group | grep -w -- #{escape(group)}"
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ class Specinfra::Command::Solaris::V10::Host < Specinfra::Command::Solaris::Base::Host
2
+ def check_is_reachable(host, port, proto, timeout)
3
+ if port.nil?
4
+ "ping -n #{escape(host)} #{escape(timeout)}"
5
+ elsif proto == 'tcp'
6
+ "echo 'quit' | mconnect -p #{escape(port)} #{escape(host)} > /dev/null 2>&1"
7
+ else
8
+ raise NotImplementedError.new
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class Specinfra::Command::Solaris::V10::Package < Specinfra::Command::Solaris::Base::Package
2
+ def check_is_installed(package, version=nil)
3
+ cmd = "pkginfo -q #{escape(package)}"
4
+ if version
5
+ cmd = "#{cmd} | grep -- #{escape(version)}"
6
+ end
7
+ cmd
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ class Specinfra::Command::Solaris::V10::User < Specinfra::Command::Solaris::Base::User
2
+ def check_is_belonging_to_group(user, group)
3
+ "id -ap #{escape(user)} | grep -- #{escape(group)}"
4
+ end
5
+
6
+ def check_has_authorized_key(user, key)
7
+ key.sub!(/\s+\S*$/, '') if key.match(/^\S+\s+\S+\s+\S*$/)
8
+ "grep -- #{escape(key)} ~#{escape(user)}/.ssh/authorized_keys"
9
+ end
10
+ end
11
+
12
+
13
+
14
+
15
+
16
+
@@ -1,27 +1 @@
1
- module Specinfra
2
- module Command
3
- class SuSE < Linux
4
- def check_enabled(service, level=3)
5
- "chkconfig --list #{escape(service)} | grep #{level}:on"
6
- end
7
-
8
- def check_installed(package,version=nil)
9
- cmd = "rpm -q #{escape(package)}"
10
- if version
11
- cmd = "#{cmd} | grep -w -- #{escape(version)}"
12
- end
13
- cmd
14
- end
15
-
16
- alias :check_installed_by_rpm :check_installed
17
-
18
- def install(package)
19
- cmd = "zypper -n install #{package}"
20
- end
21
-
22
- def get_package_version(package, opts=nil)
23
- "rpm -qi #{package} | grep Version | awk '{print $3}'"
24
- end
25
- end
26
- end
27
- end
1
+ module Specinfra::Command::Suse; end
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Suse::Base < Specinfra::Command::Linux::Base
2
+ end
@@ -0,0 +1,19 @@
1
+ class Specinfra::Command::Suse::Base::Package < Specinfra::Command::Linux::Base::Package
2
+ def check_is_installed(package,version=nil)
3
+ cmd = "rpm -q #{escape(package)}"
4
+ if version
5
+ cmd = "#{cmd} | grep -w -- #{escape(version)}"
6
+ end
7
+ cmd
8
+ end
9
+
10
+ alias :check_is_installed_by_rpm :check_is_installed
11
+
12
+ def install(package)
13
+ cmd = "zypper -n install #{package}"
14
+ end
15
+
16
+ def get_version(package, opts=nil)
17
+ "rpm -qi #{package} | grep Version | awk '{print $3}'"
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ class Specinfra::Command::Suse::Base::Service < Specinfra::Command::Linux::Base::Service
2
+ def check_is_enabled(service, level=3)
3
+ "chkconfig --list #{escape(service)} | grep #{level}:on"
4
+ end
5
+ end
6
+
7
+
8
+
9
+
10
+
11
+
12
+
@@ -1,23 +1,11 @@
1
- module Specinfra
2
- module Command
3
- class Ubuntu < Debian
4
- def check_running(service)
5
- "service #{escape(service)} status && service #{escape(service)} status | grep 'running'"
6
- end
7
-
8
- def check_ppa(package)
9
- %Q{find /etc/apt/ -name \*.list | xargs grep -o "deb http://ppa.launchpad.net/#{to_apt_line_uri(package)}"}
10
- end
11
-
12
- def check_ppa_enabled(package)
13
- %Q{find /etc/apt/ -name \*.list | xargs grep -o "^deb http://ppa.launchpad.net/#{to_apt_line_uri(package)}"}
14
- end
15
-
16
- private
17
-
18
- def to_apt_line_uri(repo)
19
- escape(repo.gsub(/^ppa:/,''))
20
- end
21
- end
22
- end
23
- end
1
+ module Specinfra::Command::Ubuntu; end
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
@@ -0,0 +1,2 @@
1
+ class Specinfra::Command::Ubuntu::Base < Specinfra::Command::Debian::Base
2
+ end
@@ -0,0 +1,15 @@
1
+ class Specinfra::Command::Ubuntu::Base::Ppa < Specinfra::Command::Debian::Base::Ppa
2
+ def check_exists(package)
3
+ %Q{find /etc/apt/ -name \*.list | xargs grep -o "deb http://ppa.launchpad.net/#{to_apt_line_uri(package)}"}
4
+ end
5
+
6
+ def check_is_enabled(package)
7
+ %Q{find /etc/apt/ -name \*.list | xargs grep -o "^deb http://ppa.launchpad.net/#{to_apt_line_uri(package)}"}
8
+ end
9
+
10
+ private
11
+
12
+ def to_apt_line_uri(repo)
13
+ escape(repo.gsub(/^ppa:/,''))
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class Specinfra::Command::Ubuntu::Base::Service < Specinfra::Command::Debian::Base::Service
2
+ def check_is_running(service)
3
+ "service #{escape(service)} status && service #{escape(service)} status | grep 'running'"
4
+ end
5
+ end
@@ -1,344 +1 @@
1
- module Specinfra
2
- module Command
3
- class Windows
4
- class NotSupportedError < Exception; end
5
- REGISTRY_KEY_TYPES = {
6
- :type_string => 'String',
7
- :type_binary => 'Binary',
8
- :type_dword => 'DWord',
9
- :type_qword => 'QWord',
10
- :type_multistring => 'MultiString',
11
- :type_expandstring => 'ExpandString'
12
- }
13
-
14
- def method_missing method, *args
15
- raise NotSupportedError.new "#{method} currently not supported in Windows os" if method.to_s =~ /^check_.+/
16
- super(method, *args)
17
- end
18
-
19
- def check_file(file)
20
- cmd = item_has_attribute file, 'Archive'
21
- Backend::PowerShell::Command.new do
22
- exec cmd
23
- end
24
- end
25
-
26
- def check_file_hidden(file)
27
- cmd = item_has_attribute file, 'Hidden'
28
- Backend::PowerShell::Command.new do
29
- exec cmd
30
- end
31
- end
32
-
33
- def check_file_readonly(file)
34
- cmd = item_has_attribute file, 'ReadOnly'
35
- Backend::PowerShell::Command.new do
36
- exec cmd
37
- end
38
- end
39
-
40
- def check_file_system(file)
41
- cmd = item_has_attribute file, 'System'
42
- Backend::PowerShell::Command.new do
43
- exec cmd
44
- end
45
- end
46
-
47
- def check_directory(dir)
48
- cmd = item_has_attribute dir, 'Directory'
49
- Backend::PowerShell::Command.new do
50
- exec cmd
51
- end
52
- end
53
-
54
- def check_file_contain(file, pattern)
55
- Backend::PowerShell::Command.new do
56
- exec "[Io.File]::ReadAllText('#{file}') -match '#{convert_regexp(pattern)}'"
57
- end
58
- end
59
-
60
- def check_file_contain_within file, pattern, from=nil, to=nil
61
- from ||= '^'
62
- to ||= '$'
63
- Backend::PowerShell::Command.new do
64
- using 'crop_text.ps1'
65
- exec %Q[(CropText -text ([Io.File]::ReadAllText('#{file}')) -fromPattern '#{convert_regexp(from)}' -toPattern '#{convert_regexp(to)}') -match '#{pattern}']
66
- end
67
- end
68
-
69
- def get_file_content(file)
70
- "[Io.File]::ReadAllText('#{file}')"
71
- end
72
-
73
- def check_access_by_user(file, user, access)
74
- case access
75
- when 'r'
76
- check_readable(file, user)
77
- when 'w'
78
- check_writable(file, user)
79
- when 'x'
80
- check_executable(file, user)
81
- end
82
- end
83
-
84
- def check_readable(file, by_whom)
85
- Backend::PowerShell::Command.new do
86
- using 'check_file_access_rules.ps1'
87
- exec "CheckFileAccessRules -path '#{file}' -identity '#{get_identity by_whom}' -rules @('FullControl', 'Modify', 'ReadAndExecute', 'Read', 'ListDirectory')"
88
- end
89
- end
90
-
91
- def check_writable(file, by_whom)
92
- Backend::PowerShell::Command.new do
93
- using 'check_file_access_rules.ps1'
94
- exec "CheckFileAccessRules -path '#{file}' -identity '#{get_identity by_whom}' -rules @('FullControl', 'Modify', 'Write')"
95
- end
96
- end
97
-
98
- def check_executable(file, by_whom)
99
- Backend::PowerShell::Command.new do
100
- using 'check_file_access_rules.ps1'
101
- exec "CheckFileAccessRules -path '#{file}' -identity '#{get_identity by_whom}' -rules @('FullControl', 'Modify', 'ReadAndExecute', 'ExecuteFile')"
102
- end
103
- end
104
-
105
- def check_installed(package, version=nil)
106
- version_selection = version.nil? ? "" : "-appVersion '#{version}'"
107
- Backend::PowerShell::Command.new do
108
- using 'find_installed_application.ps1'
109
- exec "(FindInstalledApplication -appName '#{package}' #{version_selection}) -eq $true"
110
- end
111
- end
112
-
113
- def check_service_installed(service)
114
- Backend::PowerShell::Command.new do
115
- using 'find_service.ps1'
116
- exec "@(FindService -name '#{service}').count -gt 0"
117
- end
118
- end
119
-
120
- def check_service_start_mode(service, mode)
121
- Backend::PowerShell::Command.new do
122
- using 'find_service.ps1'
123
- exec "'#{mode}' -match (FindService -name '#{service}').StartMode -and (FindService -name '#{service}') -ne $null"
124
- end
125
- end
126
-
127
- def check_enabled(service, level=nil)
128
- Backend::PowerShell::Command.new do
129
- using 'find_service.ps1'
130
- exec "(FindService -name '#{service}').StartMode -eq 'Auto'"
131
- end
132
- end
133
-
134
- def check_running(service)
135
- Backend::PowerShell::Command.new do
136
- using 'find_service.ps1'
137
- exec "(FindService -name '#{service}').State -eq 'Running'"
138
- end
139
- end
140
-
141
- def check_process(process)
142
- Backend::PowerShell::Command.new do
143
- exec "(Get-Process '#{process}') -ne $null"
144
- end
145
- end
146
-
147
- def check_listening(port)
148
- Backend::PowerShell::Command.new do
149
- using 'is_port_listening.ps1'
150
- exec "IsPortListening -portNumber #{port}"
151
- end
152
- end
153
-
154
- def check_listening_with_protocol(port, protocol)
155
- Backend::PowerShell::Command.new do
156
- using 'is_port_listening.ps1'
157
- exec "IsPortListening -portNumber #{port} -protocol '#{protocol}'"
158
- end
159
- end
160
-
161
- def check_user(user)
162
- user_id, domain = windows_account user
163
- Backend::PowerShell::Command.new do
164
- using 'find_user.ps1'
165
- exec "(FindUser -userName '#{user_id}'#{domain.nil? ? "" : " -domain '#{domain}'"}) -ne $null"
166
- end
167
- end
168
-
169
- def check_group(group)
170
- group_id, domain = windows_account group
171
- Backend::PowerShell::Command.new do
172
- using 'find_group.ps1'
173
- exec "(FindGroup -groupName '#{group_id}'#{domain.nil? ? "" : " -domain '#{domain}'"}) -ne $null"
174
- end
175
- end
176
-
177
- def check_belonging_group(user, group)
178
- user_id, user_domain = windows_account user
179
- group_id, group_domain = windows_account group
180
- Backend::PowerShell::Command.new do
181
- using 'find_user.ps1'
182
- using 'find_group.ps1'
183
- using 'find_usergroup.ps1'
184
- exec "(FindUserGroup -userName '#{user_id}'#{user_domain.nil? ? "" : " -userDomain '#{user_domain}'"} -groupName '#{group_id}'#{group_domain.nil? ? "" : " -groupDomain '#{group_domain}'"}) -ne $null"
185
- end
186
- end
187
-
188
- def check_registry_key(key_name, key_property = {})
189
- if key_property.empty?
190
- cmd = "(Get-Item 'Registry::#{key_name}') -ne $null"
191
- else
192
- if key_property.key? :value
193
- value = convert_key_property_value key_property
194
- cmd = "(Compare-Object (Get-Item 'Registry::#{key_name}').GetValue('#{key_property[:name]}') #{value}) -eq $null"
195
- else
196
- cmd = "(Get-Item 'Registry::#{key_name}').GetValueKind('#{key_property[:name]}') -eq '#{REGISTRY_KEY_TYPES[key_property[:type]]}'"
197
- end
198
- end
199
- Backend::PowerShell::Command.new { exec cmd }
200
- end
201
-
202
- def check_resolvable(name, type)
203
- if type == "hosts"
204
- cmd = "@(Select-String -path (Join-Path -Path $($env:windir) -ChildPath 'system32/drivers/etc/hosts') -pattern '#{name}\\b').count -gt 0"
205
- else
206
- cmd = "@([System.Net.Dns]::GetHostAddresses('#{name}')).count -gt 0"
207
- end
208
- Backend::PowerShell::Command.new { exec cmd }
209
- end
210
-
211
- def check_reachable(host, port, proto, timeout)
212
- if port.nil?
213
- Backend::PowerShell::Command.new do
214
- exec "(New-Object System.Net.NetworkInformation.Ping).send('#{host}').Status -eq 'Success'"
215
- end
216
- else
217
- Backend::PowerShell::Command.new do
218
- using 'is_remote_port_listening.ps1'
219
- exec"(IsRemotePortListening -hostname #{host} -port #{port} -timeout #{timeout} -proto #{proto}) -eq $true"
220
- end
221
- end
222
- end
223
-
224
- def check_windows_feature_enabled(name,provider)
225
-
226
- if provider.nil?
227
- cmd = "@(ListWindowsFeatures -feature #{name}).count -gt 0"
228
- else
229
- cmd = "@(ListWindowsFeatures -feature #{name} -provider #{provider}).count -gt 0"
230
- end
231
-
232
- Backend::PowerShell::Command.new do
233
- using 'list_windows_features.ps1'
234
- exec cmd
235
- end
236
- end
237
-
238
- def check_windows_hot_fix_installed(description, hot_fix_id=nil)
239
- hot_fix_id_match = /(KB\d+)/i.match(description)
240
- hot_fix_id = hot_fix_id_match ? hot_fix_id_match[1] : description if hot_fix_id.nil?
241
-
242
- args = [
243
- '-description', "'#{description}'",
244
- '-hotFixId', "'#{hot_fix_id}'"
245
- ]
246
-
247
- cmd = "(FindInstalledHotFix #{args.join(' ')})"
248
- Backend::PowerShell::Command.new do
249
- using 'find_installed_hot_fix.ps1'
250
- exec "#{cmd} -eq $true"
251
- end
252
- end
253
-
254
- def check_file_version(name,version)
255
- cmd = "((Get-Command '#{name}').FileVersionInfo.ProductVersion -eq '#{version}') -or ((Get-Command '#{name}').FileVersionInfo.FileVersion -eq '#{version}')"
256
- Backend::PowerShell::Command.new { exec cmd }
257
- end
258
-
259
- def check_iis_website_enabled(name)
260
- Backend::PowerShell::Command.new do
261
- using 'find_iis_component.ps1'
262
- exec "(FindIISWebsite -name '#{name}').serverAutoStart -eq $true"
263
- end
264
- end
265
-
266
- def check_iis_website_installed(name)
267
- Backend::PowerShell::Command.new do
268
- using 'find_iis_component.ps1'
269
- exec "@(FindIISWebsite -name '#{name}').count -gt 0"
270
- end
271
- end
272
-
273
- def check_iis_website_running(name)
274
- Backend::PowerShell::Command.new do
275
- using 'find_iis_component.ps1'
276
- exec "(FindIISWebsite -name '#{name}').state -eq 'Started'"
277
- end
278
- end
279
-
280
- def check_iis_website_app_pool(name, app_pool)
281
- Backend::PowerShell::Command.new do
282
- using 'find_iis_component.ps1'
283
- exec "(FindIISWebsite -name '#{name}').applicationPool -match '#{app_pool}'"
284
- end
285
- end
286
-
287
- def check_iis_website_path(name, path)
288
- Backend::PowerShell::Command.new do
289
- using 'find_iis_component.ps1'
290
- exec "[System.Environment]::ExpandEnvironmentVariables( ( FindIISWebsite -name '#{name}' ).physicalPath ).replace('\\', '/' ) -eq ('#{path}'.trimEnd('/').replace('\\', '/'))"
291
- end
292
- end
293
-
294
- def check_iis_app_pool(name)
295
- Backend::PowerShell::Command.new do
296
- using 'find_iis_component.ps1'
297
- exec "@(FindIISAppPool -name '#{name}').count -gt 0"
298
- end
299
- end
300
-
301
- def check_iis_app_pool_dotnet(name, dotnet)
302
- Backend::PowerShell::Command.new do
303
- using 'find_iis_component.ps1'
304
- exec "(FindIISAppPool -name '#{name}').managedRuntimeVersion -match 'v#{dotnet}'"
305
- end
306
- end
307
-
308
- def check_scheduled_task(name)
309
- Backend::PowerShell::Command.new do
310
- using 'find_scheduled_task.ps1'
311
- exec "(FindScheduledTask -name '#{name}').TaskName -eq '\\#{name}'"
312
- end
313
- end
314
-
315
- private
316
-
317
- def item_has_attribute item, attribute
318
- "((Get-Item -Path '#{item}' -Force).attributes.ToString() -Split ', ') -contains '#{attribute}'"
319
- end
320
-
321
- def convert_key_property_value property
322
- case property[:type]
323
- when :type_binary
324
- byte_array = [property[:value]].pack('H*').bytes.to_a
325
- "([byte[]] #{byte_array.join(',')})"
326
- when :type_dword
327
- [property[:value].rjust(8, '0').scan(/[0-9a-f]{2}/i).reverse.join].pack("H*").unpack("l").first
328
- when :type_qword
329
- property[:value].hex
330
- else
331
- string_array = property[:value].split("\n").map {|s| "'#{s}'"}.reduce {|acc, s| "#{acc},#{s}"}
332
- "@(#{string_array})"
333
- end
334
- end
335
-
336
- def windows_account account
337
- match = /((.+)\\)?(.+)/.match account
338
- domain = match[2]
339
- name = match[3]
340
- [name, domain]
341
- end
342
- end
343
- end
344
- end
1
+ module Specinfra::Command::Windows; end