wright 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a0cff940afe911d53174b8b173b8da4bcadb20b
4
- data.tar.gz: 0e2dcf9ded68e473d56dc7c9bf261f6be674b932
3
+ metadata.gz: 47536c6118c669e09c7e4d7c0310c68f2374abdc
4
+ data.tar.gz: 3fec1bac94bc0b78d8aa88a8803787ea1411b71e
5
5
  SHA512:
6
- metadata.gz: b2eb2f9487c34f0d55cbca65effdcab1946e4169c956c668de29408076f4ada2bfe1a6b076cb371e7709dada23d538c01ace02221bea7b2edf57727497b29f41
7
- data.tar.gz: c2729f48749672ddb2e4bee3cc675d1dfb6d39bb1e2d1b69d6c1b58652c3dcffea712acf6ae8ea853d01016343095fd5441a3736c03e0a188192c9e581607680
6
+ metadata.gz: 32ea02f6ac0f991cb76a22c72bfad585fc1500a91d9a6ea0070954d62a4c5ae7063e17d19093987ee3b600422b319b98fe7fb984435fa3ba7c5f7a22b80dec67
7
+ data.tar.gz: dd1df84d7f344d0e2388c4f3e58be1e5bf4397939ad6be6396258e6126dec8d805ba3fc2891f7e05015521af22a8cf5f7f36db3d8793f662edd0a1c21f477544
data/NEWS.md CHANGED
@@ -1,4 +1,11 @@
1
1
  # wright NEWS
2
+ ## 0.4.0 (2015-06-11)
3
+ - Add --dry-run option
4
+ - Add support for virtual packages to apt provider
5
+ - Add yum support to package provider
6
+ - Use GNU passwd group and user providers on CentOS/RHEL
7
+ - Add options attribute to package resource
8
+
2
9
  ## 0.3.2 (2015-06-01)
3
10
  - Expand script file path (#11)
4
11
 
data/README.md CHANGED
@@ -1,80 +1,85 @@
1
1
  wright
2
2
  ======
3
-
4
3
  [![Gem Version](https://img.shields.io/gem/v/wright.svg?style=flat-square)][gem]
5
4
  [![Build Status](https://img.shields.io/travis/sometimesfood/wright.svg?style=flat-square)][travis]
6
5
  [![Code Climate](https://img.shields.io/codeclimate/github/sometimesfood/wright.svg?style=flat-square)][codeclimate]
7
6
  [![Test Coverage](https://img.shields.io/codeclimate/coverage/github/sometimesfood/wright.svg?style=flat-square)][codeclimate]
8
7
  [![Gem Dependencies](https://img.shields.io/gemnasium/sometimesfood/wright.svg?style=flat-square)][gemnasium]
9
8
 
10
- [gem]: https://rubygems.org/gems/wright
11
- [travis]: https://travis-ci.org/sometimesfood/wright
12
- [codeclimate]: https://codeclimate.com/github/sometimesfood/wright
13
- [gemnasium]: https://gemnasium.com/sometimesfood/wright
14
-
15
9
  Lightweight configuration management.
16
10
 
17
- Requirements
18
- ------------
19
-
20
- - Ruby ≥1.9
21
-
22
11
  Getting Started
23
12
  ---------------
13
+ Performing simple administrative tasks with wright is easy.
24
14
 
25
- To start a wright IRB session, simply run:
15
+ ```ruby
16
+ #!/usr/bin/env wright
26
17
 
27
- $ bundle console
18
+ package 'sudo'
28
19
 
29
- In order to create some resources using the wright DSL:
20
+ file '/etc/sudoers.d/env_keep-editor' do |f|
21
+ f.content = "Defaults env_keep += EDITOR\n"
22
+ f.owner = 'root:root'
23
+ f.mode = '440'
24
+ end
25
+ ```
30
26
 
31
- ```ruby
32
- require 'wright'
33
- extend Wright::DSL
27
+ Scripts can also be run directly from the shell.
34
28
 
35
- foo_dir = directory '/tmp/foo'
36
- fstab = symlink '/tmp/foo/fstab' do |s|
37
- s.to = '/etc/fstab'
38
- end
29
+ wright -e "package('tmux')"
39
30
 
40
- puts File.directory? '/tmp/foo'
41
- puts File.symlink? '/tmp/foo/fstab'
31
+ If you would rather see the effects of running a wright script first,
32
+ use the dry-run option:
42
33
 
43
- fstab.remove
44
- foo_dir.remove
45
- ```
34
+ wright --dry-run -e "package('tmux')"
46
35
 
47
- If you don't want to use the DSL:
36
+ For a list of command-line parameters, see
37
+ [the manpage][wright-manpage]. For a more in-depth list of tasks you
38
+ can perform using wright, check the [resource list][wright-resources].
48
39
 
49
- ```ruby
50
- require 'wright'
40
+ Installation
41
+ ------------
42
+ Since wright does not have any runtime dependencies apart from Ruby
43
+ ≥1.9, it can safely be installed system-wide via rubygems:
51
44
 
52
- foo_dir = Wright::Resource::Directory.new('/tmp/foo')
53
- foo_dir.create
54
- fstab = Wright::Resource::Symlink.new('/tmp/foo/fstab')
55
- fstab.to = '/etc/fstab'
56
- fstab.create
45
+ sudo gem install wright
57
46
 
58
- puts File.directory? '/tmp/foo'
59
- puts File.symlink? '/tmp/foo/fstab'
47
+ Installation on Debian-based systems
48
+ ------------------------------------
49
+ If you use a Debian-based GNU/Linux distribution such as Ubuntu, you
50
+ can also install wright via the PPA [sometimesfood/wright][ppa]:
60
51
 
61
- fstab.remove
62
- foo_dir.remove
63
- ```
52
+ sudo apt-get install software-properties-common
53
+ sudo add-apt-repository -y ppa:sometimesfood/wright
54
+ sudo apt-get update && sudo apt-get install wright
55
+
56
+ If you use a Debian-based distribution that is not Ubuntu, you have to
57
+ update your apt sources manually before installing wright:
58
+
59
+ export DISTRO="$(lsb_release -sc)"
60
+ export PPA_LIST="sometimesfood-wright-${DISTRO}.list"
61
+ sudo sed -i "s/${DISTRO}/trusty/g" /etc/apt/sources.list.d/${PPA_LIST}
64
62
 
65
63
  Documentation
66
64
  -------------
65
+ As a wright user, the following documents are probably going to be of
66
+ interest to you:
67
67
 
68
- There is not too much useful documentation that is targeted towards
69
- users at the moment.
68
+ - [wright manpage][wright-manpage]
69
+ - [list of wright resources][wright-resources]
70
+ - [wright is just Ruby][wright-is-ruby]
70
71
 
71
- Run `bundle exec yard` to generate
72
- [HTML docs for wright developers](http://rubydoc.info/gems/wright/).
72
+ As a wright developer, you might also be interested in the
73
+ [wright developer docs](http://www.rubydoc.info/gems/wright/) which
74
+ can also be generated via `bundle exec yard`.
73
75
 
74
- Hacking
75
- -------
76
+ Contributing
77
+ ------------
78
+ Contributions to wright are greatly appreciated. If you would like to
79
+ contribute to wright, please have a look at the
80
+ [contribution guidelines](CONTRIBUTING.md).
76
81
 
77
- To get started with wright, simply install the development
82
+ To start hacking on wright, simply install the development
78
83
  dependencies via bundler:
79
84
 
80
85
  - `bundle install --path .bundle`
@@ -82,15 +87,16 @@ dependencies via bundler:
82
87
 
83
88
  All tests should pass.
84
89
 
85
- Contributing
86
- ------------
87
-
88
- Contributions to wright are greatly appreciated. If you would like to
89
- contribute to wright, please have a look at the
90
- [contribution guidelines](CONTRIBUTING.md).
91
-
92
90
  Copyright
93
91
  ---------
94
-
95
92
  Copyright (c) 2012-2015 Sebastian Boehm. See [LICENSE](LICENSE) for
96
93
  details.
94
+
95
+ [gem]: https://rubygems.org/gems/wright
96
+ [travis]: https://travis-ci.org/sometimesfood/wright
97
+ [codeclimate]: https://codeclimate.com/github/sometimesfood/wright
98
+ [gemnasium]: https://gemnasium.com/sometimesfood/wright
99
+ [ppa]: http://launchpad.net/~sometimesfood/+archive/ubuntu/wright
100
+ [wright-manpage]: http://wright.sometimesfood.org/man/wright.1.html
101
+ [wright-resources]: http://wright.sometimesfood.org/doc/resources.html
102
+ [wright-is-ruby]: http://wright.sometimesfood.org/doc/wright-is-ruby.html
data/lib/wright/cli.rb CHANGED
@@ -6,8 +6,9 @@ module Wright
6
6
  class CLI
7
7
  def initialize(main)
8
8
  @commands = []
9
+ @requires = []
9
10
  @main = main
10
- @parser = option_parser
11
+ set_up_parser
11
12
  end
12
13
 
13
14
  # Runs a wright script with the supplied arguments.
@@ -17,16 +18,17 @@ module Wright
17
18
  arguments = parse(argv)
18
19
  return if @quit
19
20
 
21
+ Wright.activate_dry_run if @dry_run
20
22
  Wright.log.level = @log_level if @log_level
21
23
  @main.extend Wright::DSL
24
+ @requires.each { |r| require r }
22
25
 
23
26
  run_script(arguments)
24
27
  end
25
28
 
26
29
  private
27
30
 
28
- attr_reader :commands
29
- attr_reader :log_level
31
+ attr_reader :commands, :requires, :dry_run, :log_level
30
32
 
31
33
  def parse(argv)
32
34
  # use OptionParser#order! instead of #parse! so CLI#run does not
@@ -44,24 +46,48 @@ module Wright
44
46
  end
45
47
  end
46
48
 
47
- def option_parser
48
- OptionParser.new do |opts|
49
- opts.on('-e COMMAND', 'Run COMMAND') do |e|
50
- @commands << e
51
- end
49
+ def set_up_parser
50
+ @parser = OptionParser.new
51
+ set_up_command_option
52
+ set_up_require_option
53
+ set_up_dry_run_option
54
+ set_up_verbosity_options
55
+ set_up_version_option
56
+ end
52
57
 
53
- opts.on('-v', '--verbose', 'Increase verbosity') do
54
- @log_level = Wright::Logger::DEBUG
55
- end
58
+ def set_up_command_option
59
+ @parser.on('-e COMMAND', 'Run COMMAND') do |e|
60
+ @commands << e
61
+ end
62
+ end
56
63
 
57
- opts.on('-q', '--quiet', 'Decrease verbosity') do
58
- @log_level = Wright::Logger::ERROR
59
- end
64
+ def set_up_require_option
65
+ @parser.on('-r LIBRARY',
66
+ 'Require LIBRARY before running the script') do |r|
67
+ @requires << r
68
+ end
69
+ end
70
+
71
+ def set_up_dry_run_option
72
+ @parser.on('-n', '--dry-run', 'Enable dry-run mode') do
73
+ @dry_run = true
74
+ end
75
+ end
76
+
77
+ def set_up_verbosity_options
78
+ @parser.on('-v', '--verbose', 'Increase verbosity') do
79
+ @log_level = Wright::Logger::DEBUG
80
+ end
81
+
82
+ @parser.on('-q', '--quiet', 'Decrease verbosity') do
83
+ @log_level = Wright::Logger::ERROR
84
+ end
85
+ end
60
86
 
61
- opts.on_tail('--version', 'Show wright version') do
62
- puts "wright version #{Wright::VERSION}"
63
- @quit = true
64
- end
87
+ def set_up_version_option
88
+ @parser.on_tail('--version', 'Show wright version') do
89
+ puts "wright version #{Wright::VERSION}"
90
+ @quit = true
65
91
  end
66
92
  end
67
93
  end
@@ -29,4 +29,11 @@ module Wright # rubocop:disable Documentation
29
29
  ensure
30
30
  @dry_run = saved_dry_run
31
31
  end
32
+
33
+ # @api private
34
+ # Activates dry-run mode.
35
+ # @return [void]
36
+ def self.activate_dry_run
37
+ @dry_run = true
38
+ end
32
39
  end
@@ -12,11 +12,14 @@ module Wright
12
12
  #
13
13
  # @return [void]
14
14
  def create
15
- fail Errno::EEXIST, dirname if regular_file?
15
+ fail Errno::EEXIST, dirname_expanded if regular_file?
16
16
 
17
- dir = @resource.name
18
- unless_uptodate(:create, "directory already created: '#{dir}'") do
19
- create_directory
17
+ dir_permissions = permissions
18
+ unless_uptodate(:create, "directory already created: '#{dir_name}'") do
19
+ unless_dry_run("create directory: '#{dir_name}'") do
20
+ FileUtils.mkdir_p(dirname_expanded)
21
+ dir_permissions.update unless dir_permissions.uptodate?
22
+ end
20
23
  end
21
24
  end
22
25
 
@@ -24,25 +27,22 @@ module Wright
24
27
  #
25
28
  # @return [void]
26
29
  def remove
27
- if ::File.exist?(dirname) && !::File.directory?(dirname)
28
- fail "'#{dirname}' exists but is not a directory"
30
+ if ::File.exist?(dirname_expanded) &&
31
+ !::File.directory?(dirname_expanded)
32
+ fail "'#{dirname_expanded}' exists but is not a directory"
29
33
  end
30
34
 
31
- dir = @resource.name
32
- unless_uptodate(:remove, "directory already removed: '#{dir}'") do
33
- remove_directory
35
+ unless_uptodate(:remove, "directory already removed: '#{dir_name}'") do
36
+ unless_dry_run("remove directory: '#{dir_name}'") do
37
+ FileUtils.rmdir(dirname_expanded)
38
+ end
34
39
  end
35
40
  end
36
41
 
37
42
  private
38
43
 
39
- def uptodate?(action)
40
- case action
41
- when :create
42
- ::File.directory?(dirname) && permissions.uptodate?
43
- when :remove
44
- !::File.exist?(dirname) && !::File.directory?(dirname)
45
- end
44
+ def dir_name
45
+ @resource.name
46
46
  end
47
47
 
48
48
  def permissions
@@ -50,26 +50,22 @@ module Wright
50
50
  :directory)
51
51
  end
52
52
 
53
- def create_directory
54
- dir_permissions = permissions
55
- unless_dry_run("create directory: '#{@resource.name}'") do
56
- FileUtils.mkdir_p(dirname)
57
- dir_permissions.update unless dir_permissions.uptodate?
58
- end
59
- end
60
-
61
- def remove_directory
62
- unless_dry_run("remove directory: '#{@resource.name}'") do
63
- FileUtils.rmdir(dirname)
53
+ def uptodate?(action)
54
+ case action
55
+ when :create
56
+ ::File.directory?(dirname_expanded) && permissions.uptodate?
57
+ when :remove
58
+ !::File.exist?(dirname_expanded) &&
59
+ !::File.directory?(dirname_expanded)
64
60
  end
65
61
  end
66
62
 
67
63
  def regular_file?
68
- ::File.exist?(dirname) && !::File.directory?(dirname)
64
+ ::File.exist?(dirname_expanded) && !::File.directory?(dirname_expanded)
69
65
  end
70
66
 
71
- def dirname
72
- ::File.expand_path(@resource.name)
67
+ def dirname_expanded
68
+ ::File.expand_path(dir_name)
73
69
  end
74
70
  end
75
71
  end
@@ -18,9 +18,12 @@ module Wright
18
18
  # the specified name
19
19
  def create
20
20
  fail_if_directory
21
- file = @resource.name
22
- unless_uptodate(:create, "file already created: '#{file}'") do
23
- create_file
21
+ file_permissions = permissions
22
+ unless_uptodate(:create, "file already created: '#{file_name}'") do
23
+ unless_dry_run("create file: '#{file_name}'") do
24
+ write_content_to_file
25
+ file_permissions.update unless file_permissions.uptodate?
26
+ end
24
27
  end
25
28
  end
26
29
 
@@ -31,25 +34,30 @@ module Wright
31
34
  # specified name
32
35
  def remove
33
36
  fail_if_directory
34
- file = @resource.name
35
- unless_uptodate(:remove, "file already removed: '#{file}'") do
36
- remove_file
37
+ unless_uptodate(:remove, "file already removed: '#{file_name}'") do
38
+ unless_dry_run("remove file: '#{file_name}'") do
39
+ FileUtils.rm(filename_expanded)
40
+ end
37
41
  end
38
42
  end
39
43
 
40
44
  private
41
45
 
42
- def create_file
43
- file_permissions = permissions
44
- unless_dry_run("create file: '#{@resource.name}'") do
45
- write_content_to_file
46
- file_permissions.update unless file_permissions.uptodate?
47
- end
46
+ def file_name
47
+ @resource.name
48
+ end
49
+
50
+ def content
51
+ @resource.content
52
+ end
53
+
54
+ def permissions
55
+ Wright::Util::FilePermissions.create_from_resource(@resource, :file)
48
56
  end
49
57
 
50
58
  def write_content_to_file
51
- tempfile = Tempfile.new(::File.basename(filename))
52
- tempfile.write(@resource.content) if @resource.content
59
+ tempfile = Tempfile.new(::File.basename(filename_expanded))
60
+ tempfile.write(content) if content
53
61
  move_tempfile(tempfile)
54
62
  ensure
55
63
  tempfile.close!
@@ -57,18 +65,8 @@ module Wright
57
65
 
58
66
  def move_tempfile(tempfile)
59
67
  # do not overwrite existing files if content was not specified
60
- return if @resource.content.nil? && ::File.exist?(filename)
61
- FileUtils.mv(tempfile.path, filename)
62
- end
63
-
64
- def remove_file
65
- unless_dry_run("remove file: '#{@resource.name}'") do
66
- FileUtils.rm(filename)
67
- end
68
- end
69
-
70
- def permissions
71
- Wright::Util::FilePermissions.create_from_resource(@resource, :file)
68
+ return if content.nil? && ::File.exist?(filename_expanded)
69
+ FileUtils.mv(tempfile.path, filename_expanded)
72
70
  end
73
71
 
74
72
  def checksum(content)
@@ -76,10 +74,10 @@ module Wright
76
74
  end
77
75
 
78
76
  def content_uptodate?
79
- return false unless ::File.exist?(filename)
80
- content = @resource.content || ''
81
- target_checksum = checksum(content.to_s)
82
- current_checksum = checksum(::File.read(filename))
77
+ return false unless ::File.exist?(filename_expanded)
78
+ target_content = content || ''
79
+ target_checksum = checksum(target_content.to_s)
80
+ current_checksum = checksum(::File.read(filename_expanded))
83
81
  current_checksum == target_checksum
84
82
  end
85
83
 
@@ -88,16 +86,18 @@ module Wright
88
86
  when :create
89
87
  content_uptodate? && permissions.uptodate?
90
88
  when :remove
91
- !::File.exist?(filename) && !::File.symlink?(filename)
89
+ !::File.exist?(filename_expanded) &&
90
+ !::File.symlink?(filename_expanded)
92
91
  end
93
92
  end
94
93
 
95
- def filename
96
- ::File.expand_path(@resource.name)
94
+ def filename_expanded
95
+ ::File.expand_path(file_name)
97
96
  end
98
97
 
99
98
  def fail_if_directory
100
- fail Errno::EISDIR, filename if ::File.directory?(filename)
99
+ return unless ::File.directory?(filename_expanded)
100
+ fail Errno::EISDIR, filename_expanded
101
101
  end
102
102
  end
103
103
  end
@@ -9,28 +9,29 @@ module Wright
9
9
  class DarwinDirectoryService < Wright::Provider::Group
10
10
  private
11
11
 
12
- def add_group(group_name, gid, system)
13
- gid ||= next_system_gid if system
14
- options = gid.nil? ? [] : ['-i', gid.to_s]
12
+ def create_group
13
+ target_gid = gid
14
+ target_gid ||= next_system_gid if system_group?
15
+ options = target_gid.nil? ? [] : ['-i', target_gid.to_s]
15
16
  cmd = 'dseditgroup'
16
17
  args = ['-o', 'create', *options, group_name]
17
18
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
18
19
  end
19
20
 
20
- def delete_group(group_name)
21
+ def remove_group
21
22
  cmd = 'dseditgroup'
22
23
  args = ['-o', 'delete', group_name]
23
24
  exec_or_fail(cmd, args, "cannot remove group '#{group_name}'")
24
25
  end
25
26
 
26
- def set_members(group_name, members)
27
+ def set_members
27
28
  options = ['GroupMembership', *members]
28
29
  cmd = 'dscl'
29
30
  args = ['.', 'create', "/Groups/#{group_name}", *options]
30
31
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
31
32
  end
32
33
 
33
- def set_gid(group_name, gid)
34
+ def set_gid
34
35
  cmd = 'dseditgroup'
35
36
  args = ['-o', 'edit',
36
37
  '-i', gid.to_s,
@@ -41,7 +42,7 @@ module Wright
41
42
  # Overrides Provider::Group#group_data to work around caching
42
43
  # issues with getgrnam(3) on OS X.
43
44
  def group_data
44
- Etc.group { |g| break g if g.name == @resource.name }
45
+ Etc.group { |g| break g if g.name == group_name }
45
46
  end
46
47
 
47
48
  def next_system_gid
@@ -9,28 +9,28 @@ module Wright
9
9
  class GnuPasswd < Wright::Provider::Group
10
10
  private
11
11
 
12
- def add_group(group_name, gid, system)
12
+ def create_group
13
13
  options = []
14
- options << '--system' if system
14
+ options << '--system' if system_group?
15
15
  options += ['-g', gid.to_s] if gid
16
16
  cmd = 'groupadd'
17
17
  args = [*options, group_name]
18
18
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
19
19
  end
20
20
 
21
- def delete_group(group_name)
21
+ def remove_group
22
22
  cmd = 'groupdel'
23
23
  args = [group_name]
24
24
  exec_or_fail(cmd, args, "cannot remove group '#{group_name}'")
25
25
  end
26
26
 
27
- def set_members(group_name, members)
27
+ def set_members
28
28
  cmd = 'gpasswd'
29
29
  args = ['-M', members.join(','), group_name]
30
30
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
31
31
  end
32
32
 
33
- def set_gid(group_name, gid)
33
+ def set_gid
34
34
  cmd = 'groupmod'
35
35
  args = ['-g', gid.to_s, group_name]
36
36
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")