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.
- 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]
|
|
5
4
|
[][travis]
|
|
6
5
|
[][codeclimate]
|
|
7
6
|
[][codeclimate]
|
|
8
7
|
[][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}'")
|