wright 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +7 -0
  3. data/README.md +60 -54
  4. data/lib/wright/cli.rb +44 -18
  5. data/lib/wright/dry_run.rb +7 -0
  6. data/lib/wright/provider/directory.rb +26 -30
  7. data/lib/wright/provider/file.rb +34 -34
  8. data/lib/wright/provider/group/darwin_directory_service.rb +8 -7
  9. data/lib/wright/provider/group/gnu_passwd.rb +5 -5
  10. data/lib/wright/provider/group.rb +53 -36
  11. data/lib/wright/provider/package/apt.rb +32 -8
  12. data/lib/wright/provider/package/homebrew.rb +6 -5
  13. data/lib/wright/provider/package/yum.rb +39 -0
  14. data/lib/wright/provider/package.rb +30 -16
  15. data/lib/wright/provider/symlink.rb +32 -33
  16. data/lib/wright/provider/user/darwin_directory_service.rb +14 -17
  17. data/lib/wright/provider/user/gnu_passwd.rb +20 -21
  18. data/lib/wright/provider/user.rb +58 -41
  19. data/lib/wright/resource/group.rb +1 -0
  20. data/lib/wright/resource/package.rb +16 -3
  21. data/lib/wright/resource/user.rb +1 -0
  22. data/lib/wright/resource.rb +4 -2
  23. data/lib/wright/util/user.rb +34 -2
  24. data/lib/wright/version.rb +1 -1
  25. data/man/wright.1 +15 -11
  26. data/spec/cli_spec.rb +18 -0
  27. data/spec/provider/group/darwin_directory_service_spec.rb +76 -220
  28. data/spec/provider/group/gnu_passwd_spec.rb +36 -189
  29. data/spec/provider/group_spec.rb +180 -27
  30. data/spec/provider/package/apt/apt-cache_policy_dmenu.return +1 -0
  31. data/spec/provider/package/apt/apt-cache_policy_dmenu.stderr +0 -0
  32. data/spec/provider/package/apt/apt-cache_policy_dmenu.stdout +4 -0
  33. data/spec/provider/package/apt/apt-cache_policy_htop.stdout +3 -3
  34. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.return +1 -0
  35. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stderr +0 -0
  36. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stdout +6 -0
  37. data/spec/provider/package/apt/apt-cache_policy_linux-image.return +1 -0
  38. data/spec/provider/package/apt/apt-cache_policy_linux-image.stderr +0 -0
  39. data/spec/provider/package/apt/apt-cache_policy_linux-image.stdout +4 -0
  40. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.return +1 -0
  41. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stderr +0 -0
  42. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stdout +6 -0
  43. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.return +1 -0
  44. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stderr +0 -0
  45. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stdout +9 -0
  46. data/spec/provider/package/apt/apt-cache_showpkg_htop.return +1 -0
  47. data/spec/provider/package/apt/apt-cache_showpkg_htop.stderr +0 -0
  48. data/spec/provider/package/apt/apt-cache_showpkg_htop.stdout +20 -0
  49. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.return +1 -0
  50. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stderr +0 -0
  51. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stdout +11 -0
  52. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.return +1 -0
  53. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stderr +0 -0
  54. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stdout +1 -0
  55. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.return +1 -0
  56. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stderr +0 -0
  57. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stdout +26 -0
  58. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.return +1 -0
  59. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stderr +0 -0
  60. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stdout +15 -0
  61. data/spec/provider/package/apt_spec.rb +82 -14
  62. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.return +1 -0
  63. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stderr +0 -0
  64. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stdout +7 -0
  65. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.return +1 -0
  66. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stderr +0 -0
  67. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stdout +1 -0
  68. data/spec/provider/package/homebrew_spec.rb +33 -6
  69. data/spec/provider/package/yum/rpm_-q_httpd.return +1 -0
  70. data/spec/provider/package/yum/rpm_-q_httpd.stderr +0 -0
  71. data/spec/provider/package/yum/rpm_-q_httpd.stdout +1 -0
  72. data/spec/provider/package/yum/rpm_-q_zsh.return +1 -0
  73. data/spec/provider/package/yum/rpm_-q_zsh.stderr +0 -0
  74. data/spec/provider/package/yum/rpm_-q_zsh.stdout +1 -0
  75. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.return +1 -0
  76. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stderr +0 -0
  77. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stdout +37 -0
  78. data/spec/provider/package/yum/yum_install_-y_nano.return +1 -0
  79. data/spec/provider/package/yum/yum_install_-y_nano.stderr +0 -0
  80. data/spec/provider/package/yum/yum_install_-y_nano.stdout +36 -0
  81. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.return +1 -0
  82. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stderr +1 -0
  83. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stdout +6 -0
  84. data/spec/provider/package/yum/yum_install_with_options.return +1 -0
  85. data/spec/provider/package/yum/yum_install_with_options.stderr +0 -0
  86. data/spec/provider/package/yum/yum_install_with_options.stdout +53 -0
  87. data/spec/provider/package/yum/yum_remove_-y_screen.return +1 -0
  88. data/spec/provider/package/yum/yum_remove_-y_screen.stderr +0 -0
  89. data/spec/provider/package/yum/yum_remove_-y_screen.stdout +31 -0
  90. data/spec/provider/package/yum/yum_remove_with_options.return +1 -0
  91. data/spec/provider/package/yum/yum_remove_with_options.stderr +0 -0
  92. data/spec/provider/package/yum/yum_remove_with_options.stdout +30 -0
  93. data/spec/provider/package/yum_spec.rb +130 -0
  94. data/spec/provider/user/darwin_directory_service_spec.rb +12 -10
  95. data/spec/provider/user/gnu_passwd_spec.rb +9 -9
  96. data/spec/provider/user_spec.rb +26 -18
  97. data/spec/resource/package_spec.rb +8 -0
  98. data/spec/resource_spec.rb +17 -9
  99. metadata +153 -16
@@ -6,13 +6,15 @@ module Wright
6
6
  # Group provider. Used as a base class for {Resource::Group}
7
7
  # providers.
8
8
  class Group < Wright::Provider
9
- # Adds the group.
9
+ # Creates or updates the group.
10
10
  #
11
11
  # @return [void]
12
12
  def create
13
- group = @resource.name
14
- unless_uptodate(:create, "group already created: '#{group}'") do
15
- create_group
13
+ unless_uptodate(:create, "group already created: '#{group_name}'") do
14
+ unless_dry_run("create group: '#{group_name}'") do
15
+ ensure_group_exists
16
+ set_members unless members_uptodate?
17
+ end
16
18
  end
17
19
  end
18
20
 
@@ -20,14 +22,39 @@ module Wright
20
22
  #
21
23
  # @return [void]
22
24
  def remove
23
- group = @resource.name
24
- unless_uptodate(:remove, "group already removed: '#{group}'") do
25
- remove_group
25
+ unless_uptodate(:remove, "group already removed: '#{group_name}'") do
26
+ unless_dry_run("remove group: '#{group_name}'") do
27
+ remove_group
28
+ end
26
29
  end
27
30
  end
28
31
 
29
32
  private
30
33
 
34
+ def group_name
35
+ @resource.name
36
+ end
37
+
38
+ def gid
39
+ @resource.gid
40
+ end
41
+
42
+ def members
43
+ @resource.members
44
+ end
45
+
46
+ def system_group?
47
+ @resource.system
48
+ end
49
+
50
+ def ensure_group_exists
51
+ if group_exists?
52
+ set_gid unless gid_uptodate?
53
+ else
54
+ create_group
55
+ end
56
+ end
57
+
31
58
  # @api public
32
59
  # Checks if the group is up-to-date for a given action.
33
60
  #
@@ -48,37 +75,16 @@ module Wright
48
75
  end
49
76
  end
50
77
 
51
- def create_group
52
- group = @resource.name
53
- unless_dry_run("create group: '#{group}'") do
54
- if group_exists?
55
- set_gid(group, @resource.gid) unless gid_uptodate?
56
- else
57
- add_group(group, @resource.gid, @resource.system)
58
- end
59
- set_members(group, @resource.members) unless members_uptodate?
60
- end
61
- end
62
-
63
- def remove_group
64
- group = @resource.name
65
- unless_dry_run("remove group: '#{group}'") do
66
- delete_group(group)
67
- end
68
- end
69
-
70
78
  def group_data
71
- Etc.getgrnam(@resource.name)
72
- rescue ArgumentError
73
- nil
79
+ Wright::Util::User.safe_getgrnam(group_name)
74
80
  end
75
81
 
76
82
  def gid_uptodate?
77
- @resource.gid.nil? || group_data.gid == @resource.gid
83
+ gid.nil? || group_data.gid == gid
78
84
  end
79
85
 
80
86
  def members_uptodate?
81
- @resource.members.nil? || group_data.mem == @resource.members
87
+ members.nil? || group_data.mem == members
82
88
  end
83
89
 
84
90
  def group_exists?
@@ -86,11 +92,22 @@ module Wright
86
92
  end
87
93
 
88
94
  def set_members
89
- group = @resource.name
90
- new_members = @resource.members - group_data.mem
91
- unwanted_members = group_data.mem - @resource.members
92
- new_members.each { |m| add_member(m, group) }
93
- unwanted_members.each { |m| remove_member(m, group) }
95
+ new_members = members - group_data.mem
96
+ unwanted_members = group_data.mem - members
97
+ new_members.each { |m| add_member(m, group_name) }
98
+ unwanted_members.each { |m| remove_member(m, group_name) }
99
+ end
100
+
101
+ def create_group
102
+ fail NotImplementedError
103
+ end
104
+
105
+ def remove_group
106
+ fail NotImplementedError
107
+ end
108
+
109
+ def set_gid
110
+ fail NotImplementedError
94
111
  end
95
112
 
96
113
  def add_member(_member, _group)
@@ -1,3 +1,5 @@
1
+ require 'ostruct'
2
+
1
3
  require 'wright/provider'
2
4
  require 'wright/provider/package'
3
5
 
@@ -9,33 +11,55 @@ module Wright
9
11
  class Apt < Wright::Provider::Package
10
12
  # @return [Array<String>] the installed package versions
11
13
  def installed_versions
12
- package = @resource.name
13
- err = "Cannot determine installed versions for package '#{package}'"
14
- apt_policy = exec_or_fail('apt-cache', ['policy', package], err)
14
+ package = "package '#{package_name}'"
15
+ err = "Cannot determine installed versions for #{package}"
16
+ apt_policy = exec_or_fail('apt-cache', ['policy', package_name], err)
15
17
 
16
18
  version_re = /(?!\(none\)).*/
17
19
  installed_re = /^ Installed: (?<version>#{version_re})$/
18
20
  match = installed_re.match(apt_policy)
19
- match ? [match['version']] : []
21
+ match ? [match['version']] : virtual_package_versions
20
22
  end
21
23
 
22
24
  private
23
25
 
24
26
  def install_package
25
- apt_get(:install, @resource.name, @resource.version)
27
+ apt_get(:install, package_options, package_name, package_version)
26
28
  end
27
29
 
28
30
  def remove_package
29
- apt_get(:remove, @resource.name)
31
+ apt_get(:remove, package_options, package_name)
30
32
  end
31
33
 
32
- def apt_get(action, package, version = nil)
34
+ def apt_get(action, options, package, version = nil)
33
35
  package_version = version.nil? ? '' : "=#{version}"
34
36
  cmd = 'apt-get'
35
- args = [action.to_s, '-qy', package + package_version]
37
+ args = [*options, action.to_s, '-qy', package + package_version]
36
38
  exec_or_fail(cmd, args, "cannot #{action} package '#{package}'")
37
39
  end
38
40
 
41
+ def virtual_package_versions
42
+ virtual_package_installed? ? ['virtual'] : []
43
+ end
44
+
45
+ # @todo replace the OpenStruct hack below by a direct
46
+ # instantiation of {Wright::Resource::Package} as soon as
47
+ # the resource-provider mapping can be changed more easily
48
+ def virtual_package_installed?
49
+ reverse_provides.any? do |name, version|
50
+ resource = OpenStruct.new(name: name, version: version)
51
+ package = Wright::Provider::Package::Apt.new(resource)
52
+ package.installed?
53
+ end
54
+ end
55
+
56
+ def reverse_provides
57
+ err = 'Error executing apt-cache'
58
+ showpkg = exec_or_fail('apt-cache', ['showpkg', package_name], err)
59
+ packages = showpkg.partition("Reverse Provides: \n").last.split("\n")
60
+ Hash[packages.map { |p| p.split(' ', 2) }]
61
+ end
62
+
39
63
  def env
40
64
  { 'DEBIAN_FRONTEND' => 'noninteractive' }
41
65
  end
@@ -13,7 +13,7 @@ module Wright
13
13
  # @return [Array<String>] the installed package versions
14
14
  def installed_versions
15
15
  cmd = 'brew'
16
- args = ['info', '--json=v1', @resource.name]
16
+ args = ['info', '--json=v1', package_name]
17
17
  cmd_stdout, _, cmd_status = Wright::Util.bundler_clean_env do
18
18
  Open3.capture3(env, cmd, *args)
19
19
  end
@@ -28,11 +28,11 @@ module Wright
28
28
  private
29
29
 
30
30
  def install_package
31
- brew(:install, @resource.name, @resource.version)
31
+ brew(:install, package_name, package_version)
32
32
  end
33
33
 
34
34
  def remove_package
35
- brew(:uninstall, @resource.name)
35
+ brew(:uninstall, package_name)
36
36
  end
37
37
 
38
38
  def brew(action, package, version = nil)
@@ -40,13 +40,14 @@ module Wright
40
40
 
41
41
  Wright::Util.bundler_clean_env do
42
42
  error_message = "cannot #{action} package '#{package}'"
43
- exec_or_fail('brew', [action.to_s, package], error_message)
43
+ args = [action.to_s, *package_options, package]
44
+ exec_or_fail('brew', args, error_message)
44
45
  end
45
46
  end
46
47
 
47
48
  def ignore_version(version)
48
49
  return unless version
49
- package_info = "#{@resource.name} (#{version})"
50
+ package_info = "#{package_name} (#{version})"
50
51
  Wright.log.warn "ignoring package version: '#{package_info}'"
51
52
  end
52
53
  end
@@ -0,0 +1,39 @@
1
+ require 'open3'
2
+
3
+ require 'wright/provider'
4
+ require 'wright/provider/package'
5
+
6
+ module Wright
7
+ class Provider
8
+ class Package
9
+ # Yum package provider. Used as a provider for
10
+ # {Resource::Package} on Fedora-based systems.
11
+ class Yum < Wright::Provider::Package
12
+ # @return [Array<String>] the installed package versions
13
+ def installed_versions
14
+ version_format = '%{VERSION}-%{RELEASE}'
15
+ rpm_args = %W(-q #{package_name} --qf #{version_format})
16
+ stdout, _, status = Open3.capture3(env, 'rpm', *rpm_args)
17
+ status.success? ? [stdout] : []
18
+ end
19
+
20
+ private
21
+
22
+ def install_package
23
+ yum(:install, package_options, package_name, package_version)
24
+ end
25
+
26
+ def remove_package
27
+ yum(:remove, package_options, package_name)
28
+ end
29
+
30
+ def yum(action, options, package, version = nil)
31
+ cmd = 'yum'
32
+ package_version = version.nil? ? '' : "-#{version}"
33
+ args = [*options, action.to_s, '-y', package + package_version]
34
+ exec_or_fail(cmd, args, "cannot #{action} package '#{package}'")
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -9,9 +9,9 @@ module Wright
9
9
  #
10
10
  # @return [void]
11
11
  def install
12
- package = @resource.name
13
- unless_uptodate(:install, "package already installed: '#{package}'") do
14
- unless_dry_run("install package: '#{package}'") do
12
+ unless_uptodate(:install,
13
+ "package already installed: '#{package_name}'") do
14
+ unless_dry_run("install package: '#{package_name}'") do
15
15
  install_package
16
16
  end
17
17
  end
@@ -21,9 +21,9 @@ module Wright
21
21
  #
22
22
  # @return [void]
23
23
  def remove
24
- package = @resource.name
25
- unless_uptodate(:remove, "package already removed: '#{package}'") do
26
- unless_dry_run("remove package: '#{package}'") do
24
+ unless_uptodate(:remove,
25
+ "package already removed: '#{package_name}'") do
26
+ unless_dry_run("remove package: '#{package_name}'") do
27
27
  remove_package
28
28
  end
29
29
  end
@@ -34,8 +34,30 @@ module Wright
34
34
  fail NotImplementedError
35
35
  end
36
36
 
37
+ # @return [Bool] true if the package is installed, false
38
+ # otherwise
39
+ def installed?
40
+ if package_version
41
+ installed_versions.include?(package_version)
42
+ else
43
+ !installed_versions.empty?
44
+ end
45
+ end
46
+
37
47
  private
38
48
 
49
+ def package_name
50
+ @resource.name
51
+ end
52
+
53
+ def package_version
54
+ @resource.version
55
+ end
56
+
57
+ def package_options
58
+ @resource.options
59
+ end
60
+
39
61
  # @api public
40
62
  # Checks if the package is up-to-date for a given action.
41
63
  #
@@ -48,22 +70,14 @@ module Wright
48
70
  def uptodate?(action)
49
71
  case action
50
72
  when :install
51
- package_installed?
73
+ installed?
52
74
  when :remove
53
- !package_installed?
75
+ !installed?
54
76
  else
55
77
  fail ArgumentError, "invalid action '#{action}'"
56
78
  end
57
79
  end
58
80
 
59
- def package_installed?
60
- if @resource.version
61
- installed_versions.include?(@resource.version)
62
- else
63
- !installed_versions.empty?
64
- end
65
- end
66
-
67
81
  def install_package
68
82
  fail NotImplementedError
69
83
  end
@@ -10,11 +10,13 @@ module Wright
10
10
  #
11
11
  # @return [void]
12
12
  def create
13
- fail Errno::EEXIST, link_name if regular_file?
13
+ fail Errno::EEXIST, link_name_expanded if regular_file?
14
14
 
15
- symlink = symlink_to_s(@resource.name, @resource.to)
15
+ symlink = symlink_to_s
16
16
  unless_uptodate(:create, "symlink already created: #{symlink}") do
17
- create_link
17
+ unless_dry_run("create symlink: #{symlink}") do
18
+ Wright::Util::File.ln_sfn(link_to_expanded, link_name_expanded)
19
+ end
18
20
  end
19
21
  end
20
22
 
@@ -22,54 +24,51 @@ module Wright
22
24
  #
23
25
  # @return [void]
24
26
  def remove
25
- fail "'#{link_name}' is not a symlink" if regular_file?
27
+ fail "'#{link_name_expanded}' is not a symlink" if regular_file?
26
28
 
27
- symlink = @resource.name
28
- unless_uptodate(:remove, "symlink already removed: '#{symlink}'") do
29
- remove_symlink
29
+ unless_uptodate(:remove, "symlink already removed: '#{link_name}'") do
30
+ unless_dry_run("remove symlink: '#{link_name}'") do
31
+ FileUtils.rm(link_name_expanded)
32
+ end
30
33
  end
31
34
  end
32
35
 
33
36
  private
34
37
 
35
- def uptodate?(action)
36
- case action
37
- when :create
38
- ::File.symlink?(link_name) &&
39
- ::File.readlink(link_name) == link_to
40
- when :remove
41
- !::File.symlink?(link_name)
42
- end
38
+ def link_name
39
+ @resource.name
43
40
  end
44
41
 
45
- def create_link
46
- symlink = symlink_to_s(@resource.name, @resource.to)
47
- unless_dry_run("create symlink: #{symlink}") do
48
- Wright::Util::File.ln_sfn(link_to, link_name)
49
- end
42
+ def link_to
43
+ @resource.to
50
44
  end
51
45
 
52
- def symlink_to_s(link_name, target)
53
- "'#{link_name}' -> '#{target}'"
46
+ def link_to_expanded
47
+ return nil if link_to.nil?
48
+ Wright::Util::File.expand_tilde_path(link_to)
54
49
  end
55
50
 
56
- def remove_symlink
57
- unless_dry_run("remove symlink: '#{@resource.name}'") do
58
- FileUtils.rm(link_name)
59
- end
51
+ def link_name_expanded
52
+ Wright::Util::File.expand_tilde_path(link_name)
60
53
  end
61
54
 
62
- def regular_file?
63
- ::File.exist?(link_name) && !::File.symlink?(link_name)
55
+ def symlink_to_s
56
+ "'#{link_name}' -> '#{link_to}'"
64
57
  end
65
58
 
66
- def link_to
67
- return nil if @resource.to.nil?
68
- Wright::Util::File.expand_tilde_path(@resource.to)
59
+ def uptodate?(action)
60
+ case action
61
+ when :create
62
+ ::File.symlink?(link_name_expanded) &&
63
+ ::File.readlink(link_name_expanded) == link_to_expanded
64
+ when :remove
65
+ !::File.symlink?(link_name_expanded)
66
+ end
69
67
  end
70
68
 
71
- def link_name
72
- Wright::Util::File.expand_tilde_path(@resource.name)
69
+ def regular_file?
70
+ ::File.exist?(link_name_expanded) &&
71
+ !::File.symlink?(link_name_expanded)
73
72
  end
74
73
  end
75
74
  end
@@ -9,53 +9,50 @@ module Wright
9
9
  class DarwinDirectoryService < User
10
10
  private
11
11
 
12
- def add_user
13
- user = @resource.name
12
+ def create_user
14
13
  attributes = default_attributes.merge(resource_attributes)
15
14
  attributes.each do |k, v|
16
15
  args = dscl_args(:create, k, v)
17
- exec_or_fail('dscl', args, "cannot create user '#{user}'")
16
+ exec_or_fail('dscl', args, "cannot create user '#{user_name}'")
18
17
  end
19
18
  end
20
19
 
21
20
  def update_user
22
- user = @resource.name
23
21
  resource_attributes.each do |k, v|
24
22
  args = dscl_args(:create, k, v)
25
- exec_or_fail('dscl', args, "cannot create user '#{user}'")
23
+ exec_or_fail('dscl', args, "cannot create user '#{user_name}'")
26
24
  end
27
25
  end
28
26
 
29
- def delete_user
30
- user = @resource.name
27
+ def remove_user
31
28
  exec_or_fail('dscl',
32
- %W(. -delete /Users/#{user}),
33
- "cannot remove user '#{user}'")
29
+ %W(. -delete /Users/#{user_name}),
30
+ "cannot remove user '#{user_name}'")
34
31
  end
35
32
 
36
33
  def dscl_args(cmd, key, value)
37
- %W(. -#{cmd} /Users/#{@resource.name} #{key} #{value})
34
+ %W(. -#{cmd} /Users/#{user_name} #{key} #{value})
38
35
  end
39
36
 
40
37
  def default_attributes
41
- uid_range = @resource.system ? 1...500 : 500...1000
38
+ uid_range = system_user? ? 1...500 : 500...1000
42
39
  {
43
40
  'UniqueID' => Wright::Util::User.next_free_uid(uid_range),
44
41
  'UserShell' => '/bin/bash',
45
42
  'RealName' => '',
46
- 'NFSHomeDirectory' => "/Users/#{@resource.name}",
43
+ 'NFSHomeDirectory' => "/Users/#{user_name}",
47
44
  'PrimaryGroupID' => Wright::Util::User.group_to_gid('staff'),
48
45
  'Password' => '*'
49
46
  }
50
47
  end
51
48
 
52
49
  def resource_attributes
53
- gid = Wright::Util::User.group_to_gid(@resource.primary_group)
50
+ gid = Wright::Util::User.group_to_gid(primary_group)
54
51
  {
55
- 'UniqueID' => @resource.uid,
56
- 'UserShell' => @resource.shell,
57
- 'RealName' => @resource.full_name,
58
- 'NFSHomeDirectory' => @resource.home,
52
+ 'UniqueID' => uid,
53
+ 'UserShell' => shell,
54
+ 'RealName' => full_name,
55
+ 'NFSHomeDirectory' => home,
59
56
  'PrimaryGroupID' => gid
60
57
  }.reject { |_k, v| v.nil? }
61
58
  end
@@ -9,44 +9,43 @@ module Wright
9
9
  class GnuPasswd < Wright::Provider::User
10
10
  private
11
11
 
12
- def add_user
13
- user = @resource.name
12
+ def create_user
14
13
  exec_or_fail('useradd',
15
- [*user_options, user],
16
- "cannot create user '#{user}'")
14
+ [*user_options, user_name],
15
+ "cannot create user '#{user_name}'")
17
16
  end
18
17
 
19
18
  def update_user
20
- user = @resource.name
21
19
  exec_or_fail('usermod',
22
- [*user_options, user],
23
- "cannot create user '#{user}'")
20
+ [*user_options, user_name],
21
+ "cannot create user '#{user_name}'")
22
+ end
23
+
24
+ def remove_user
25
+ exec_or_fail('userdel',
26
+ [user_name],
27
+ "cannot remove user '#{user_name}'")
24
28
  end
25
29
 
26
30
  def user_options
27
31
  options = {
28
- '-u' => @resource.uid,
29
- '-g' => @resource.primary_group,
32
+ '-u' => uid,
33
+ '-g' => primary_group,
30
34
  '-c' => comment,
31
- '-G' => groups,
32
- '-s' => @resource.shell,
33
- '-d' => @resource.home
35
+ '-G' => group_list,
36
+ '-s' => shell,
37
+ '-d' => home
34
38
  }.reject { |_k, v| v.nil? }.flatten
35
- options << '-r' if @resource.system
39
+ options << '-r' if system_user?
36
40
  options.map(&:to_s)
37
41
  end
38
42
 
39
43
  def comment
40
- @resource.full_name.nil? ? nil : "#{@resource.full_name},,,"
41
- end
42
-
43
- def groups
44
- @resource.groups.nil? ? nil : @resource.groups.join(',')
44
+ full_name.nil? ? nil : "#{full_name},,,"
45
45
  end
46
46
 
47
- def delete_user
48
- user = @resource.name
49
- exec_or_fail('userdel', [user], "cannot remove user '#{user}'")
47
+ def group_list
48
+ groups.nil? ? nil : groups.join(',')
50
49
  end
51
50
  end
52
51
  end