dust-deploy 0.14.1 → 0.15.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.
- data/changelog.md +15 -0
- data/lib/dust/recipes/chrony.rb +4 -4
- data/lib/dust/recipes/cjdroute.rb +10 -8
- data/lib/dust/recipes/users.rb +75 -0
- data/lib/dust/server.rb +40 -11
- data/lib/dust/version.rb +1 -1
- metadata +3 -3
- data/lib/dust/recipes/ssh_authorized_keys.rb +0 -69
data/changelog.md
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
Changelog
|
2
2
|
=============
|
3
3
|
|
4
|
+
0.15.0
|
5
|
+
------------
|
6
|
+
|
7
|
+
- node.create_user -> node.migrate_user (supports now more options, make sure to migrate from :home -> 'home' if you use options
|
8
|
+
- introduces users recipe
|
9
|
+
- removes ssh_authorized_keys in favor of new users recipe (migrate your .yaml files!)
|
10
|
+
|
11
|
+
recipes:
|
12
|
+
users:
|
13
|
+
myuser: { ssh_keys: kk, chmod: 0750, authorized_keys: [ user1, user2 ] }
|
14
|
+
deploy: { shell: /bin/bash, home: /var/www, ssh_keys: deploy, skel: deploy }
|
15
|
+
daemon: { system: true }
|
16
|
+
unwanted_user: { remove: true }
|
17
|
+
|
18
|
+
|
4
19
|
0.14.1
|
5
20
|
------------
|
6
21
|
|
data/lib/dust/recipes/chrony.rb
CHANGED
@@ -9,7 +9,7 @@ class Chrony < Recipe
|
|
9
9
|
end
|
10
10
|
|
11
11
|
# install package
|
12
|
-
@node.install_package('chrony')
|
12
|
+
return false unless @node.install_package('chrony')
|
13
13
|
|
14
14
|
# set config file and service name according to distribution used
|
15
15
|
if @node.uses_apt?
|
@@ -52,9 +52,9 @@ class Chrony < Recipe
|
|
52
52
|
'logdir' => '/var/log/chrony',
|
53
53
|
'logchange' => 0.5,
|
54
54
|
'maxupdateskew' => 100.0, # Stop bad estimates upsetting machine clock.
|
55
|
-
'dumponexit' => '', # Dump measurements when daemon exits.
|
56
|
-
'dumpdir' => '/var/lib/chrony',
|
57
|
-
'rtconutc' => '' # CMOS clock is on UTC (GMT)
|
55
|
+
# 'dumponexit' => '', # Dump measurements when daemon exits.
|
56
|
+
# 'dumpdir' => '/var/lib/chrony',
|
57
|
+
# 'rtconutc' => '' # CMOS clock is on UTC (GMT)
|
58
58
|
}
|
59
59
|
|
60
60
|
if @node.uses_rpm?
|
@@ -11,21 +11,23 @@ class Cjdroute< Recipe
|
|
11
11
|
|
12
12
|
# clean up building directory, if --restart is given
|
13
13
|
# using --restart, since there's no --cleanup
|
14
|
-
return unless make_clean if @options.restart?
|
14
|
+
# return unless make_clean if @options.restart?
|
15
15
|
|
16
16
|
# compiling action
|
17
17
|
return unless run_make
|
18
18
|
|
19
|
-
stop_cjdroute
|
20
|
-
|
21
|
-
# copy binary
|
22
|
-
return unless @node.mkdir @config['bin_dir']
|
23
|
-
return unless @node.cp "#{@config['build_dir']}/build/cjdroute", "#{@config['bin_dir']}/cjdroute"
|
24
|
-
|
25
19
|
# create the config file and place it into etc_dir
|
26
20
|
return unless generate_config
|
27
21
|
|
28
|
-
|
22
|
+
if options.restart?
|
23
|
+
stop_cjdroute
|
24
|
+
|
25
|
+
# copy binary
|
26
|
+
return unless @node.mkdir @config['bin_dir']
|
27
|
+
return unless @node.cp "#{@config['build_dir']}/build/cjdroute", "#{@config['bin_dir']}/cjdroute"
|
28
|
+
|
29
|
+
start_cjdroute
|
30
|
+
end
|
29
31
|
end
|
30
32
|
|
31
33
|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Users < Recipe
|
2
|
+
|
3
|
+
desc 'users:deploy', 'creates users and user settings (incl. ssh keys)'
|
4
|
+
def deploy
|
5
|
+
@config.each do |user, options|
|
6
|
+
# just create the user, without any arguments
|
7
|
+
options = {} if options.nil? or options.is_a? TrueClass
|
8
|
+
next unless @node.manage_user(user, options)
|
9
|
+
|
10
|
+
# don't deploy anything if the user just has been removed
|
11
|
+
unless options['remove']
|
12
|
+
deploy_ssh_keys(user, options['ssh_keys']) if options['ssh_keys']
|
13
|
+
deploy_authorized_keys(user, options['authorized_keys']) if options['authorized_keys']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# deploys ssh keys to users homedir
|
22
|
+
def deploy_ssh_keys(user, key_dir)
|
23
|
+
ssh_dir = create_ssh_dir(user)
|
24
|
+
@node.messages.add("deploying ssh keys for #{user}\n")
|
25
|
+
|
26
|
+
Dir["#{@template_path}/#{key_dir}/*"].each do |file|
|
27
|
+
destination = "#{ssh_dir}/#{File.basename(file)}"
|
28
|
+
@node.scp(file, destination, :indent => 2)
|
29
|
+
@node.chown("#{user}:#{user}", destination)
|
30
|
+
|
31
|
+
# chmod private key
|
32
|
+
if File.basename(file) =~ /^(id_rsa|id_dsa|id_ecdsa)$/
|
33
|
+
msg = @node.messages.add('setting private key access to 0600', :indent => 3)
|
34
|
+
msg.parse_result(@node.chmod('0600', destination, :quiet => true))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# generates and deploy authorized_keys to users homedir
|
40
|
+
def deploy_authorized_keys(user, ssh_users)
|
41
|
+
@node.messages.add("generating authorized_keys for #{user}\n")
|
42
|
+
ssh_dir = create_ssh_dir(user)
|
43
|
+
authorized_keys = generate_authorized_keys(ssh_users)
|
44
|
+
@node.write("#{ssh_dir}/authorized_keys", authorized_keys)
|
45
|
+
@node.chown("#{user}:#{user}", "#{ssh_dir}/authorized_keys")
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_ssh_dir(user)
|
49
|
+
ssh_dir = @node.get_home(user) + '/.ssh'
|
50
|
+
@node.mkdir(ssh_dir)
|
51
|
+
@node.chown("#{user}:#{user}", ssh_dir)
|
52
|
+
ssh_dir
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_authorized_keys(ssh_users)
|
56
|
+
# load users and their ssh keys from yaml file
|
57
|
+
users = YAML.load_file("#{@template_path}/public_keys.yaml")
|
58
|
+
authorized_keys = ''
|
59
|
+
|
60
|
+
# create the authorized_keys hash for this user
|
61
|
+
ssh_users.to_array.each do |ssh_user|
|
62
|
+
users[ssh_user]['name'] ||= ssh_user
|
63
|
+
msg = @node.messages.add("adding user #{users[ssh_user]['name']}", :indent => 2)
|
64
|
+
users[ssh_user]['keys'].each do |key|
|
65
|
+
authorized_keys << "#{key}"
|
66
|
+
authorized_keys << " #{users[ssh_user]['name']}" if users[ssh_user]['name']
|
67
|
+
authorized_keys << " <#{users[ssh_user]['email']}>" if users[ssh_user]['email']
|
68
|
+
authorized_keys << "\n"
|
69
|
+
end
|
70
|
+
msg.ok
|
71
|
+
end
|
72
|
+
|
73
|
+
authorized_keys
|
74
|
+
end
|
75
|
+
end
|
data/lib/dust/server.rb
CHANGED
@@ -713,19 +713,48 @@ module Dust
|
|
713
713
|
msg.parse_result(exec("id #{user}")[:exit_code])
|
714
714
|
end
|
715
715
|
|
716
|
-
# create
|
717
|
-
def
|
718
|
-
options = default_options.merge
|
719
|
-
options
|
720
|
-
|
716
|
+
# manages users (create, modify)
|
717
|
+
def manage_user(user, options = {})
|
718
|
+
options = default_options.merge(options)
|
719
|
+
options = { 'home' => nil, 'shell' => nil, 'uid' => nil, 'remove' => false,
|
720
|
+
'gid' => nil, 'groups' => nil, 'system' => false }.merge(options)
|
721
|
+
|
722
|
+
# delete user from system
|
723
|
+
if options['remove']
|
724
|
+
if user_exists?(user, :quiet => true)
|
725
|
+
msg = messages.add("deleting user #{user} from system", :indent => options[:indent])
|
726
|
+
return msg.parse_result(exec("userdel --remove #{user}")[:exit_code])
|
727
|
+
end
|
728
|
+
|
729
|
+
return messages.add("user #{user} not present in system").ok
|
730
|
+
end
|
721
731
|
|
722
|
-
|
732
|
+
if user_exists?(user, :quiet => true)
|
733
|
+
args = ""
|
734
|
+
args << " --move-home --home #{options['home']}" if options['home']
|
735
|
+
args << " --shell #{options['shell']}" if options['shell']
|
736
|
+
args << " --uid #{options['uid']}" if options['uid']
|
737
|
+
args << " --gid #{options['gid']}" if options['gid']
|
738
|
+
args << " --append --groups #{Array(options['groups']).join(',')}" if options['groups']
|
739
|
+
|
740
|
+
unless args.empty?
|
741
|
+
msg = messages.add("modifying user #{user}", :indent => options[:indent])
|
742
|
+
return msg.parse_result(exec("usermod #{user} #{args}")[:exit_code])
|
743
|
+
end
|
723
744
|
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
745
|
+
else
|
746
|
+
args = ""
|
747
|
+
args = "--create-home" unless options['system']
|
748
|
+
args << " --system" if options['system']
|
749
|
+
args << " --home #{options['home']}" if options['home'] and not options['system']
|
750
|
+
args << " --shell #{options['shell']}" if options['shell']
|
751
|
+
args << " --uid #{options['uid']}" if options['uid']
|
752
|
+
args << " --gid #{options['gid']}" if options['gid']
|
753
|
+
args << " --groups #{Array(options['groups']).join(',')}" if options['groups']
|
754
|
+
|
755
|
+
msg = messages.add("creating user #{user}", :indent => options[:indent])
|
756
|
+
return msg.parse_result(exec("useradd #{user} #{args}")[:exit_code])
|
757
|
+
end
|
729
758
|
end
|
730
759
|
|
731
760
|
# returns the home directory of this user
|
data/lib/dust/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dust-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -199,11 +199,11 @@ files:
|
|
199
199
|
- lib/dust/recipes/resolv_conf.rb
|
200
200
|
- lib/dust/recipes/ruby_rvm.rb
|
201
201
|
- lib/dust/recipes/skel.rb
|
202
|
-
- lib/dust/recipes/ssh_authorized_keys.rb
|
203
202
|
- lib/dust/recipes/ssh_config.rb
|
204
203
|
- lib/dust/recipes/sshd.rb
|
205
204
|
- lib/dust/recipes/sudoers.rb
|
206
205
|
- lib/dust/recipes/sysctl.rb
|
206
|
+
- lib/dust/recipes/users.rb
|
207
207
|
- lib/dust/recipes/zabbix_agent.rb
|
208
208
|
- lib/dust/runner.rb
|
209
209
|
- lib/dust/server.rb
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
class SshAuthorizedKeys < Recipe
|
4
|
-
desc 'ssh_authorized_keys:deploy', 'configures ssh authorized_keys'
|
5
|
-
def deploy
|
6
|
-
|
7
|
-
@config.each do |remote_user, ssh_users|
|
8
|
-
@node.messages.add("generating authorized_keys for #{remote_user}\n")
|
9
|
-
authorized_keys = generate_authorized_keys ssh_users
|
10
|
-
deploy_authorized_keys remote_user, authorized_keys
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def generate_authorized_keys ssh_users
|
18
|
-
# load users and their ssh keys from yaml file
|
19
|
-
users = YAML.load_file "#{@template_path}/users.yaml"
|
20
|
-
authorized_keys = ''
|
21
|
-
|
22
|
-
# create the authorized_keys hash for this user
|
23
|
-
ssh_users.to_array.each do |ssh_user|
|
24
|
-
users[ssh_user]['name'] ||= ssh_user
|
25
|
-
msg = @node.messages.add("adding user #{users[ssh_user]['name']}", :indent => 2)
|
26
|
-
users[ssh_user]['keys'].each do |key|
|
27
|
-
authorized_keys << "#{key}"
|
28
|
-
authorized_keys << " #{users[ssh_user]['name']}" if users[ssh_user]['name']
|
29
|
-
authorized_keys << " <#{users[ssh_user]['email']}>" if users[ssh_user]['email']
|
30
|
-
authorized_keys << "\n"
|
31
|
-
end
|
32
|
-
msg.ok
|
33
|
-
end
|
34
|
-
|
35
|
-
authorized_keys
|
36
|
-
end
|
37
|
-
|
38
|
-
# deploy the authorized_keys file for this user
|
39
|
-
# creating user if not existent
|
40
|
-
def deploy_authorized_keys user, authorized_keys
|
41
|
-
# create user, if not existent
|
42
|
-
return unless @node.create_user user
|
43
|
-
|
44
|
-
home = @node.get_home user
|
45
|
-
# check and create necessary directories
|
46
|
-
return unless @node.mkdir("#{home}/.ssh")
|
47
|
-
|
48
|
-
# deploy authorized_keys
|
49
|
-
return unless @node.write "#{home}/.ssh/authorized_keys", authorized_keys
|
50
|
-
|
51
|
-
# check permissions
|
52
|
-
@node.chown "#{user}:#{user}", "#{home}/.ssh"
|
53
|
-
end
|
54
|
-
|
55
|
-
# remove authorized_keys files for all other users
|
56
|
-
# TODO: add this option
|
57
|
-
def cleanup
|
58
|
-
if options.cleanup?
|
59
|
-
@node.messages.add("deleting other authorized_keys files\n")
|
60
|
-
@node.get_system_users(:quiet => true).each do |user|
|
61
|
-
next if users.keys.include? user
|
62
|
-
home = @node.get_home user
|
63
|
-
if @node.file_exists? "#{home}/.ssh/authorized_keys", :quiet => true
|
64
|
-
@node.rm "#{home}/.ssh/authorized_keys", :indent => 2
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|