wright 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +7 -0
- data/README.md +60 -54
- data/lib/wright/cli.rb +44 -18
- data/lib/wright/dry_run.rb +7 -0
- data/lib/wright/provider/directory.rb +26 -30
- data/lib/wright/provider/file.rb +34 -34
- data/lib/wright/provider/group/darwin_directory_service.rb +8 -7
- data/lib/wright/provider/group/gnu_passwd.rb +5 -5
- data/lib/wright/provider/group.rb +53 -36
- data/lib/wright/provider/package/apt.rb +32 -8
- data/lib/wright/provider/package/homebrew.rb +6 -5
- data/lib/wright/provider/package/yum.rb +39 -0
- data/lib/wright/provider/package.rb +30 -16
- data/lib/wright/provider/symlink.rb +32 -33
- data/lib/wright/provider/user/darwin_directory_service.rb +14 -17
- data/lib/wright/provider/user/gnu_passwd.rb +20 -21
- data/lib/wright/provider/user.rb +58 -41
- data/lib/wright/resource/group.rb +1 -0
- data/lib/wright/resource/package.rb +16 -3
- data/lib/wright/resource/user.rb +1 -0
- data/lib/wright/resource.rb +4 -2
- data/lib/wright/util/user.rb +34 -2
- data/lib/wright/version.rb +1 -1
- data/man/wright.1 +15 -11
- data/spec/cli_spec.rb +18 -0
- data/spec/provider/group/darwin_directory_service_spec.rb +76 -220
- data/spec/provider/group/gnu_passwd_spec.rb +36 -189
- data/spec/provider/group_spec.rb +180 -27
- data/spec/provider/package/apt/apt-cache_policy_dmenu.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_dmenu.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_dmenu.stdout +4 -0
- data/spec/provider/package/apt/apt-cache_policy_htop.stdout +3 -3
- data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stdout +6 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image.stdout +4 -0
- data/spec/provider/package/apt/apt-cache_policy_suckless-tools.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stdout +6 -0
- data/spec/provider/package/apt/apt-cache_showpkg_dmenu.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stdout +9 -0
- data/spec/provider/package/apt/apt-cache_showpkg_htop.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_htop.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_htop.stdout +20 -0
- data/spec/provider/package/apt/apt-cache_showpkg_linux-image.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stdout +11 -0
- data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stdout +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stdout +26 -0
- data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.return +1 -0
- data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stderr +0 -0
- data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stdout +15 -0
- data/spec/provider/package/apt_spec.rb +82 -14
- data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.return +1 -0
- data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stderr +0 -0
- data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stdout +7 -0
- data/spec/provider/package/homebrew/brew_uninstall_--force_lame.return +1 -0
- data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stderr +0 -0
- data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stdout +1 -0
- data/spec/provider/package/homebrew_spec.rb +33 -6
- data/spec/provider/package/yum/rpm_-q_httpd.return +1 -0
- data/spec/provider/package/yum/rpm_-q_httpd.stderr +0 -0
- data/spec/provider/package/yum/rpm_-q_httpd.stdout +1 -0
- data/spec/provider/package/yum/rpm_-q_zsh.return +1 -0
- data/spec/provider/package/yum/rpm_-q_zsh.stderr +0 -0
- data/spec/provider/package/yum/rpm_-q_zsh.stdout +1 -0
- data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.return +1 -0
- data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stderr +0 -0
- data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stdout +37 -0
- data/spec/provider/package/yum/yum_install_-y_nano.return +1 -0
- data/spec/provider/package/yum/yum_install_-y_nano.stderr +0 -0
- data/spec/provider/package/yum/yum_install_-y_nano.stdout +36 -0
- data/spec/provider/package/yum/yum_install_-y_not-a-real-package.return +1 -0
- data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stderr +1 -0
- data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stdout +6 -0
- data/spec/provider/package/yum/yum_install_with_options.return +1 -0
- data/spec/provider/package/yum/yum_install_with_options.stderr +0 -0
- data/spec/provider/package/yum/yum_install_with_options.stdout +53 -0
- data/spec/provider/package/yum/yum_remove_-y_screen.return +1 -0
- data/spec/provider/package/yum/yum_remove_-y_screen.stderr +0 -0
- data/spec/provider/package/yum/yum_remove_-y_screen.stdout +31 -0
- data/spec/provider/package/yum/yum_remove_with_options.return +1 -0
- data/spec/provider/package/yum/yum_remove_with_options.stderr +0 -0
- data/spec/provider/package/yum/yum_remove_with_options.stdout +30 -0
- data/spec/provider/package/yum_spec.rb +130 -0
- data/spec/provider/user/darwin_directory_service_spec.rb +12 -10
- data/spec/provider/user/gnu_passwd_spec.rb +9 -9
- data/spec/provider/user_spec.rb +26 -18
- data/spec/resource/package_spec.rb +8 -0
- data/spec/resource_spec.rb +17 -9
- metadata +153 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47536c6118c669e09c7e4d7c0310c68f2374abdc
|
4
|
+
data.tar.gz: 3fec1bac94bc0b78d8aa88a8803787ea1411b71e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
15
|
+
```ruby
|
16
|
+
#!/usr/bin/env wright
|
26
17
|
|
27
|
-
|
18
|
+
package 'sudo'
|
28
19
|
|
29
|
-
|
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
|
-
|
32
|
-
require 'wright'
|
33
|
-
extend Wright::DSL
|
27
|
+
Scripts can also be run directly from the shell.
|
34
28
|
|
35
|
-
|
36
|
-
fstab = symlink '/tmp/foo/fstab' do |s|
|
37
|
-
s.to = '/etc/fstab'
|
38
|
-
end
|
29
|
+
wright -e "package('tmux')"
|
39
30
|
|
40
|
-
|
41
|
-
|
31
|
+
If you would rather see the effects of running a wright script first,
|
32
|
+
use the dry-run option:
|
42
33
|
|
43
|
-
|
44
|
-
foo_dir.remove
|
45
|
-
```
|
34
|
+
wright --dry-run -e "package('tmux')"
|
46
35
|
|
47
|
-
|
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
|
-
|
50
|
-
|
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
|
-
|
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
|
-
|
59
|
-
|
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
|
-
|
62
|
-
|
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
|
-
|
69
|
-
|
68
|
+
- [wright manpage][wright-manpage]
|
69
|
+
- [list of wright resources][wright-resources]
|
70
|
+
- [wright is just Ruby][wright-is-ruby]
|
70
71
|
|
71
|
-
|
72
|
-
[
|
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
|
-
|
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
|
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
|
-
|
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
|
48
|
-
OptionParser.new
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
data/lib/wright/dry_run.rb
CHANGED
@@ -12,11 +12,14 @@ module Wright
|
|
12
12
|
#
|
13
13
|
# @return [void]
|
14
14
|
def create
|
15
|
-
fail Errno::EEXIST,
|
15
|
+
fail Errno::EEXIST, dirname_expanded if regular_file?
|
16
16
|
|
17
|
-
|
18
|
-
unless_uptodate(:create, "directory already created: '#{
|
19
|
-
|
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?(
|
28
|
-
|
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
|
-
|
32
|
-
|
33
|
-
|
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
|
40
|
-
|
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
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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?(
|
64
|
+
::File.exist?(dirname_expanded) && !::File.directory?(dirname_expanded)
|
69
65
|
end
|
70
66
|
|
71
|
-
def
|
72
|
-
::File.expand_path(
|
67
|
+
def dirname_expanded
|
68
|
+
::File.expand_path(dir_name)
|
73
69
|
end
|
74
70
|
end
|
75
71
|
end
|
data/lib/wright/provider/file.rb
CHANGED
@@ -18,9 +18,12 @@ module Wright
|
|
18
18
|
# the specified name
|
19
19
|
def create
|
20
20
|
fail_if_directory
|
21
|
-
|
22
|
-
unless_uptodate(:create, "file already created: '#{
|
23
|
-
|
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
|
35
|
-
|
36
|
-
|
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
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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(
|
52
|
-
tempfile.write(
|
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
|
61
|
-
FileUtils.mv(tempfile.path,
|
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?(
|
80
|
-
|
81
|
-
target_checksum = checksum(
|
82
|
-
current_checksum = checksum(::File.read(
|
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?(
|
89
|
+
!::File.exist?(filename_expanded) &&
|
90
|
+
!::File.symlink?(filename_expanded)
|
92
91
|
end
|
93
92
|
end
|
94
93
|
|
95
|
-
def
|
96
|
-
::File.expand_path(
|
94
|
+
def filename_expanded
|
95
|
+
::File.expand_path(file_name)
|
97
96
|
end
|
98
97
|
|
99
98
|
def fail_if_directory
|
100
|
-
|
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
|
13
|
-
|
14
|
-
|
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
|
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
|
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
|
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 ==
|
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
|
12
|
+
def create_group
|
13
13
|
options = []
|
14
|
-
options << '--system' if
|
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
|
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
|
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
|
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}'")
|