pvcglue 0.1.39 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/README.md +12 -3
- data/bin/pvc +4 -2
- data/lib/pvcglue.rb +106 -21
- data/lib/pvcglue/bootstrap.rb +1 -1
- data/lib/pvcglue/cli.rb +28 -17
- data/lib/pvcglue/cloud.rb +243 -56
- data/lib/pvcglue/configuration.rb +43 -5
- data/lib/pvcglue/connection.rb +236 -0
- data/lib/pvcglue/custom_hashie.rb +3 -0
- data/lib/pvcglue/db.rb +19 -13
- data/lib/pvcglue/digital_ocean.rb +21 -0
- data/lib/pvcglue/env.rb +52 -28
- data/lib/pvcglue/manager.rb +38 -25
- data/lib/pvcglue/minion.rb +182 -0
- data/lib/pvcglue/nodes.rb +1 -1
- data/lib/pvcglue/{packages → old_packages}/bootstrap.rb +15 -15
- data/lib/pvcglue/{packages → old_packages}/env.rb +8 -8
- data/lib/pvcglue/old_packages/firewall.rb +48 -0
- data/lib/pvcglue/old_packages/manager.rb +116 -0
- data/lib/pvcglue/{packages → old_packages}/monit-bootstrap.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/monit-web.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/nginx.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/nodejs.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/passenger.rb +0 -0
- data/lib/pvcglue/old_packages/postgresql.rb +10 -0
- data/lib/pvcglue/{packages → old_packages}/role_db.rb +9 -9
- data/lib/pvcglue/{packages → old_packages}/role_lb.rb +6 -6
- data/lib/pvcglue/{packages → old_packages}/role_memcached.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/role_redis.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/role_web.rb +9 -9
- data/lib/pvcglue/old_packages/rvm.rb +78 -0
- data/lib/pvcglue/{packages → old_packages}/timezone.rb +0 -0
- data/lib/pvcglue/{packages → old_packages}/ubuntu.rb +0 -0
- data/lib/pvcglue/packages.rb +192 -71
- data/lib/pvcglue/packages/apt.rb +74 -0
- data/lib/pvcglue/packages/apt_repos.rb +48 -0
- data/lib/pvcglue/packages/apt_update.rb +18 -0
- data/lib/pvcglue/packages/apt_upgrade.rb +20 -0
- data/lib/pvcglue/packages/authorized_keys.rb +33 -0
- data/lib/pvcglue/packages/bundler.rb +14 -0
- data/lib/pvcglue/packages/dir_base.rb +16 -0
- data/lib/pvcglue/packages/dir_shared.rb +16 -0
- data/lib/pvcglue/packages/firewall.rb +30 -46
- data/lib/pvcglue/packages/load_balancer.rb +71 -0
- data/lib/pvcglue/packages/maintenance_mode.rb +28 -0
- data/lib/pvcglue/packages/manager.rb +101 -99
- data/lib/pvcglue/packages/postgresql.rb +36 -8
- data/lib/pvcglue/packages/roles.rb +23 -0
- data/lib/pvcglue/packages/ruby.rb +13 -0
- data/lib/pvcglue/packages/rvm.rb +18 -71
- data/lib/pvcglue/packages/secrets.rb +36 -0
- data/lib/pvcglue/packages/ssh_key_check.rb +11 -0
- data/lib/pvcglue/packages/ssl.rb +45 -0
- data/lib/pvcglue/packages/ssl_acme.rb +29 -0
- data/lib/pvcglue/packages/swap.rb +14 -0
- data/lib/pvcglue/packages/unattended_upgrades.rb +20 -0
- data/lib/pvcglue/packages/users.rb +20 -0
- data/lib/pvcglue/packages/web.rb +50 -0
- data/lib/pvcglue/stack.rb +166 -0
- data/lib/pvcglue/templates/50unattended-upgrades.erb +63 -0
- data/lib/pvcglue/templates/capfile.erb +4 -1
- data/lib/pvcglue/templates/deploy.rb.erb +3 -2
- data/lib/pvcglue/templates/lb.sites-enabled.erb +15 -9
- data/lib/pvcglue/templates/letsencrypt-webroot.erb +3 -0
- data/lib/pvcglue/templates/pg_hba.conf.erb +1 -2
- data/lib/pvcglue/templates/postgresql.conf.erb +376 -291
- data/lib/pvcglue/templates/stage-deploy.rb.erb +2 -2
- data/lib/pvcglue/templates/web.bashrc.erb +16 -5
- data/lib/pvcglue/templates/web.nginx.conf.erb +1 -1
- data/lib/pvcglue/templates/web.sites-enabled.erb +1 -1
- data/lib/pvcglue/version.rb +1 -1
- data/pvcglue.gemspec +17 -12
- metadata +125 -22
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'toml'
|
2
|
+
apt_package 'htop' # DONE
|
3
|
+
apt_package 'ufw' # DONE
|
4
|
+
|
5
|
+
package 'bootstrap-manager' do # DONE
|
6
|
+
# TODO: firewall and ssh port config
|
7
|
+
depends_on 'authenticate-host' # DONE
|
8
|
+
depends_on 'htop' # DONE
|
9
|
+
# depends_on 'ufw'
|
10
|
+
#depends_on 'deploy-user'
|
11
|
+
#depends_on 'sshd-config'
|
12
|
+
#depends_on 'firewall-config'
|
13
|
+
depends_on 'pvcglue-user' # DONE
|
14
|
+
depends_on 'manager-copy-id' # DONE
|
15
|
+
end
|
16
|
+
|
17
|
+
package 'authenticate-host' do # DONE
|
18
|
+
apply do
|
19
|
+
sudo "ls" # side-effect will add host to known_hosts
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
package 'pvcglue-user' do # DONE
|
24
|
+
apply do
|
25
|
+
# Local variables used to improve readability of bash commands :)
|
26
|
+
user_name = Pvcglue::Manager.user_name
|
27
|
+
home_dir = Pvcglue::Manager.home_dir
|
28
|
+
manager_dir = Pvcglue::Manager.manager_dir
|
29
|
+
ssh_dir = Pvcglue::Manager.ssh_dir
|
30
|
+
|
31
|
+
sudo "useradd -d #{home_dir} -m -U #{user_name}"
|
32
|
+
sudo "usermod -s /bin/bash #{user_name}"
|
33
|
+
sudo "mkdir -p #{manager_dir} && chown #{user_name}:#{user_name} #{manager_dir} && chmod 700 #{manager_dir}"
|
34
|
+
sudo "mkdir -p #{ssh_dir} && chown #{user_name}:#{user_name} #{ssh_dir} && chmod 700 #{ssh_dir}"
|
35
|
+
end
|
36
|
+
|
37
|
+
remove do
|
38
|
+
raise "removing user not supported, yet. It needs some 'Are you *really* sure?' stuff."
|
39
|
+
# user_name = Pvcglue::Manager.user_name
|
40
|
+
# home_dir = Pvcglue::Manager.home_dir
|
41
|
+
#sudo "userdel -f #{user_name}"
|
42
|
+
#sudo "rm -rf #{home_dir}"
|
43
|
+
end
|
44
|
+
|
45
|
+
validate do
|
46
|
+
user_name = Pvcglue::Manager.user_name
|
47
|
+
# home_dir = Pvcglue::Manager.home_dir
|
48
|
+
#sudo "userdel -f #{user_name}"; sudo "rm -rf #{home_dir}"; raise "User has been deleted"
|
49
|
+
sudo("getent passwd #{user_name}") =~ /^#{user_name}:/
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
package 'manager-copy-id' do # DONE
|
54
|
+
validate do
|
55
|
+
authorized_keys_file_name = Pvcglue::Manager.authorized_keys_file_name
|
56
|
+
user_key = `cat ~/.ssh/id_rsa.pub`.strip
|
57
|
+
auth = run("cat #{authorized_keys_file_name}")
|
58
|
+
auth.include?(user_key)
|
59
|
+
end
|
60
|
+
|
61
|
+
apply do
|
62
|
+
authorized_keys_file_name = Pvcglue::Manager.authorized_keys_file_name
|
63
|
+
user_name = Pvcglue::Manager.user_name
|
64
|
+
copy_id = %Q[cat ~/.ssh/id_rsa.pub | ssh -o BatchMode=yes -o StrictHostKeyChecking=no #{node.get(:user)}@#{node.host} "cat >> #{authorized_keys_file_name}"]
|
65
|
+
system "#{copy_id}"
|
66
|
+
run(%Q[cat "" >> #{authorized_keys_file_name}])
|
67
|
+
sudo "chown #{user_name}:#{user_name} #{authorized_keys_file_name} && chmod 600 #{authorized_keys_file_name}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
package 'manager-push' do # DONE
|
72
|
+
apply do
|
73
|
+
if File.exists?(::Pvcglue.cloud.local_file_name)
|
74
|
+
# scp foobar.txt your_username@remotehost.edu:/some/remote/directory
|
75
|
+
cmd = %{scp #{::Pvcglue.cloud.local_file_name} #{node.get(:user)}@#{node.host}:#{::Pvcglue::Manager.manager_file_name}}
|
76
|
+
puts "Running `#{cmd}`"
|
77
|
+
|
78
|
+
unless system cmd
|
79
|
+
raise("Error: #{$?}")
|
80
|
+
end
|
81
|
+
|
82
|
+
run(%Q[chmod 600 #{::Pvcglue::Manager.manager_file_name}])
|
83
|
+
else
|
84
|
+
puts "Local file not found: #{::Pvcglue.cloud.local_file_name}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
package 'manager-pull' do # DONE
|
90
|
+
apply do
|
91
|
+
# scp your_username@remotehost.edu:foobar.txt /some/local/directory
|
92
|
+
cmd = %{scp #{node.get(:user)}@#{node.host}:#{::Pvcglue::Manager.manager_file_name} #{::Pvcglue.cloud.local_file_name}}
|
93
|
+
puts "Running `#{cmd}`"
|
94
|
+
|
95
|
+
unless system cmd
|
96
|
+
raise("Error: #{$?}")
|
97
|
+
end
|
98
|
+
|
99
|
+
puts "Saved as: #{::Pvcglue.cloud.local_file_name}"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
package 'manager-get-config' do # DONE
|
104
|
+
apply do
|
105
|
+
data = run("cat #{::Pvcglue::Manager.manager_file_name}")
|
106
|
+
#puts "*"*80
|
107
|
+
#puts data
|
108
|
+
#puts "*"*80
|
109
|
+
if data.empty?
|
110
|
+
raise "Remote manager file not found: #{::Pvcglue::Manager.manager_file_name}"
|
111
|
+
else
|
112
|
+
::Pvcglue.cloud.data = TOML.parse(data)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,10 @@
|
|
1
|
+
apt_package 'postgresql' do # DONE
|
2
|
+
action('start') { sudo 'service postgresql start' }
|
3
|
+
action('stop') { sudo 'service postgresql stop' }
|
4
|
+
action('restart') { sudo('service postgresql restart') }
|
5
|
+
end
|
6
|
+
|
7
|
+
package 'postgres' do # DONE
|
8
|
+
depends_on 'postgresql', 'libpq-dev'
|
9
|
+
end
|
10
|
+
|
@@ -1,12 +1,12 @@
|
|
1
1
|
package 'db' do
|
2
|
-
depends_on 'env-initialized'
|
3
|
-
depends_on 'postgresql'
|
4
|
-
depends_on 'postgresql-conf'
|
5
|
-
depends_on 'postgresql-app-stage-conf'
|
6
|
-
depends_on 'monit-bootstrap'
|
2
|
+
depends_on 'env-initialized' # DONE
|
3
|
+
depends_on 'postgresql' # DONE
|
4
|
+
depends_on 'postgresql-conf' # DONE
|
5
|
+
depends_on 'postgresql-app-stage-conf' # DONE
|
6
|
+
depends_on 'monit-bootstrap' # LATER
|
7
7
|
end
|
8
8
|
|
9
|
-
package 'postgresql-conf' do
|
9
|
+
package 'postgresql-conf' do # DONE
|
10
10
|
file({
|
11
11
|
:template => Pvcglue.template_file_name('postgresql.conf.erb'),
|
12
12
|
:destination => '/etc/postgresql/9.1/main/postgresql.conf',
|
@@ -26,7 +26,7 @@ package 'postgresql-conf' do
|
|
26
26
|
}) { trigger 'postgresql:restart' }
|
27
27
|
end
|
28
28
|
|
29
|
-
package 'postgresql-app-stage-conf' do
|
29
|
+
package 'postgresql-app-stage-conf' do # DONE
|
30
30
|
# TODO: Add `verify` method so it will be faster, and won't display errors
|
31
31
|
apply do
|
32
32
|
username = Pvcglue.cloud.stage_env['DB_USER_POSTGRES_USERNAME']
|
@@ -39,7 +39,7 @@ package 'postgresql-app-stage-conf' do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
package 'postgresql-app-stage-db-drop' do
|
42
|
+
package 'postgresql-app-stage-db-drop' do # LATER
|
43
43
|
apply do
|
44
44
|
username = Pvcglue.cloud.stage_env['DB_USER_POSTGRES_USERNAME']
|
45
45
|
db_name = username # just for clarity in later statements. This also must match database.yml.
|
@@ -78,7 +78,7 @@ package 'postgresql-app-stage-db-drop' do
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
package 'postgresql-root-password' do
|
81
|
+
package 'postgresql-root-password' do # LATER
|
82
82
|
apply do
|
83
83
|
# TODO: Use this to implement setting of the root password
|
84
84
|
# sudo(%q[sudo -u postgres psql -c "ALTER ROLE postgres WITH PASSWORD 'zzz';"])
|
@@ -1,9 +1,9 @@
|
|
1
1
|
package 'lb' do
|
2
|
-
depends_on 'nginx'
|
3
|
-
depends_on 'ssl-cert'
|
4
|
-
depends_on 'lb-config'
|
5
|
-
depends_on 'lb-maintenance-files'
|
6
|
-
depends_on 'monit-bootstrap'
|
2
|
+
depends_on 'nginx' # DONE
|
3
|
+
depends_on 'ssl-cert' # LATER
|
4
|
+
depends_on 'lb-config' # DONE
|
5
|
+
depends_on 'lb-maintenance-files' # DONE
|
6
|
+
depends_on 'monit-bootstrap' # LATER
|
7
7
|
|
8
8
|
validate do
|
9
9
|
trigger('nginx:running')
|
@@ -53,7 +53,7 @@ package 'maintenance_mode' do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
package 'bypass_mode' do
|
56
|
+
package 'bypass_mode' do # LATER
|
57
57
|
apply do
|
58
58
|
if Pvcglue.cloud.bypass_mode == 'off'
|
59
59
|
run "touch #{Pvcglue.cloud.maintenance_bypass_mode_file_name}"
|
File without changes
|
File without changes
|
@@ -1,16 +1,16 @@
|
|
1
1
|
package 'web' do
|
2
2
|
# rvm/ruby install based on http://ryanbigg.com/2010/12/ubuntu-ruby-rvm-rails-and-you/
|
3
|
-
depends_on 'swap' # needed for deployment/asset building on < 1GB machines
|
4
|
-
depends_on 'build-essential'
|
5
|
-
depends_on 'git'
|
6
|
-
depends_on 'rvm'
|
7
|
-
depends_on 'no-rdoc'
|
3
|
+
depends_on 'swap' # LATER # needed for deployment/asset building on < 1GB machines
|
4
|
+
depends_on 'build-essential' # DONE
|
5
|
+
depends_on 'git' # DONE
|
6
|
+
depends_on 'rvm' # DONE
|
7
|
+
depends_on 'no-rdoc' # DONE
|
8
8
|
|
9
9
|
|
10
|
-
depends_on 'rvm-ruby'
|
11
|
-
depends_on 'bundler'
|
12
|
-
depends_on 'nginx'
|
13
|
-
depends_on 'phusion-passenger'
|
10
|
+
depends_on 'rvm-ruby' # DONE
|
11
|
+
depends_on 'bundler' # DONE
|
12
|
+
depends_on 'nginx' # DONE
|
13
|
+
depends_on 'phusion-passenger' # DONE
|
14
14
|
depends_on 'app-env'
|
15
15
|
depends_on 'web-site-config'
|
16
16
|
|
@@ -0,0 +1,78 @@
|
|
1
|
+
package 'rvm' do # DONE
|
2
|
+
depends_on 'curl' # DONE
|
3
|
+
depends_on 'rvm-bashrc' # DONE
|
4
|
+
|
5
|
+
validate do
|
6
|
+
run('type rvm | head -n 1') =~ /rvm is a function/
|
7
|
+
end
|
8
|
+
|
9
|
+
apply do
|
10
|
+
run 'gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3'
|
11
|
+
run 'gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3' # Do it again, the first time only sets things up, and does not import the keys
|
12
|
+
# run 'curl -sSL https://rvm.io/mpapis.asc | gpg --import -'
|
13
|
+
run '\curl -sSL https://get.rvm.io | bash -s stable --with-default-gems="bundler"'
|
14
|
+
run "rvm requirements"
|
15
|
+
end
|
16
|
+
|
17
|
+
remove do
|
18
|
+
run 'yes "yes" | rvm implode'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
package 'rvm-bashrc' do # DONE
|
23
|
+
file({
|
24
|
+
:template => Pvcglue.template_file_name('web.bashrc.erb'),
|
25
|
+
:destination => '/home/deploy/.bashrc',
|
26
|
+
:create_dirs => false,
|
27
|
+
:permissions => 0644,
|
28
|
+
:user => 'deploy',
|
29
|
+
:group => 'deploy'
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
package 'gem' do # ???
|
34
|
+
depends_on 'rvm-ruby'
|
35
|
+
action 'exists' do |gem_name|
|
36
|
+
run("gem list -i #{gem_name}") =~ /true/
|
37
|
+
end
|
38
|
+
action 'install' do |gem_name|
|
39
|
+
sudo "gem install #{gem_name} --no-ri --no-rdoc"
|
40
|
+
end
|
41
|
+
action 'uninstall' do |gem_name|
|
42
|
+
sudo "gem uninstall #{gem_name} -x -a"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
package 'bundler' do # ???
|
47
|
+
depends_on 'gem'
|
48
|
+
apply { trigger 'gem:install', 'bundler' }
|
49
|
+
remove { trigger 'gem:remove', 'bundler' }
|
50
|
+
validate { trigger 'gem:exists', 'bundler' }
|
51
|
+
end
|
52
|
+
|
53
|
+
package 'rvm-ruby' do # DONE
|
54
|
+
depends_on 'rvm'
|
55
|
+
|
56
|
+
validate do
|
57
|
+
run('rvm list strings') =~ /#{Pvcglue.configuration.ruby_version.gsub('.', '\.')}/
|
58
|
+
end
|
59
|
+
|
60
|
+
apply do
|
61
|
+
run "rvm install #{Pvcglue.configuration.ruby_version}"
|
62
|
+
# run "rvm --default use 2.0.0"
|
63
|
+
end
|
64
|
+
|
65
|
+
remove do
|
66
|
+
run "rvm remove --archive --gems #{Pvcglue.configuration.ruby_version}"
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
package 'no-rdoc' do # DONE
|
72
|
+
file({
|
73
|
+
:template => Pvcglue.template_file_name('gemrc.erb'),
|
74
|
+
:destination => '/home/deploy/.gemrc',
|
75
|
+
:create_dirs => false
|
76
|
+
})
|
77
|
+
end
|
78
|
+
|
File without changes
|
File without changes
|
data/lib/pvcglue/packages.rb
CHANGED
@@ -1,85 +1,206 @@
|
|
1
1
|
module Pvcglue
|
2
2
|
class Packages
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
3
|
+
|
4
|
+
def self.apply(minion, options = {})
|
5
|
+
package = new(minion, options)
|
6
|
+
unless package.run
|
7
|
+
raise package.full_error_message if package.errors?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_accessor :errors
|
12
|
+
attr_accessor :options
|
13
|
+
|
14
|
+
def initialize(minion, options = {})
|
15
|
+
@minion = minion
|
16
|
+
@options = options
|
17
|
+
@errors = []
|
18
|
+
end
|
19
|
+
|
20
|
+
def errors?
|
21
|
+
errors.size > 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def full_error_message
|
25
|
+
errors.join('. ')
|
26
|
+
end
|
27
|
+
|
28
|
+
def minion
|
29
|
+
@minion
|
30
|
+
end
|
31
|
+
|
32
|
+
def user_name
|
33
|
+
@minion.remote_user_name
|
34
|
+
end
|
35
|
+
|
36
|
+
def run
|
37
|
+
begin
|
38
|
+
Pvcglue.logger_package_description = self.class.name
|
39
|
+
unless installed?
|
40
|
+
install!
|
41
|
+
if post_install_check?
|
42
|
+
post_install!
|
41
43
|
else
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
puts e.message
|
48
|
-
puts node.inspect
|
49
|
-
puts data.inspect
|
50
|
-
puts "*"*80
|
44
|
+
# TODO: Better error message
|
45
|
+
|
46
|
+
errors << 'Install failed post install check.'
|
47
|
+
Pvcglue.logger.error { full_error_message }
|
48
|
+
return false
|
51
49
|
end
|
52
50
|
end
|
51
|
+
ensure
|
52
|
+
Pvcglue.logger_package_description = ''
|
53
53
|
end
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
57
|
+
def installed?
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
61
|
+
def install!
|
62
|
+
false
|
63
|
+
end
|
64
|
+
|
65
|
+
def post_install_check?
|
66
|
+
# override to do a different (more time consuming/more detailed) check
|
67
|
+
installed?
|
68
|
+
end
|
69
|
+
|
70
|
+
def post_install!
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def has_role?(roles)
|
75
|
+
minion.has_role?(roles)
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_roles?(roles)
|
79
|
+
minion.has_role?(roles)
|
80
|
+
end
|
81
|
+
|
82
|
+
def connection
|
83
|
+
@minion.connection
|
84
|
+
end
|
85
|
+
|
86
|
+
def minion_state_file_name
|
87
|
+
".minion_state_#{user_name}.toml"
|
54
88
|
end
|
55
|
-
end
|
56
89
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
puts "Error loading #{file}: #{e.message}"
|
76
|
-
raise
|
90
|
+
def load_state_data
|
91
|
+
if connection.file_exists?(:root, minion_state_file_name)
|
92
|
+
data = connection.read_from_file(:root, minion_state_file_name)
|
93
|
+
else
|
94
|
+
data = ''
|
95
|
+
end
|
96
|
+
# puts data
|
97
|
+
connection.minion_state_data = TOML.parse(data, symbolize_keys: true)
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
def get_minion_state_data
|
102
|
+
unless connection.minion_state_data
|
103
|
+
if Pvcglue.reset_minion_state?
|
104
|
+
Pvcglue.logger.warn('Minion state data reset.')
|
105
|
+
connection.minion_state_data = {}
|
106
|
+
else
|
107
|
+
load_state_data
|
77
108
|
end
|
78
|
-
packages_loaded << File.basename(file, ".rb")
|
79
109
|
end
|
80
|
-
puts "Packages loaded: #{packages_loaded.sort.join(' ')}."
|
81
|
-
suite
|
82
110
|
end
|
111
|
+
|
112
|
+
def get_minion_state(key)
|
113
|
+
get_minion_state_data
|
114
|
+
connection.minion_state_data[key]
|
115
|
+
end
|
116
|
+
|
117
|
+
def set_minion_state(key, value)
|
118
|
+
get_minion_state_data
|
119
|
+
connection.minion_state_data[key] = value
|
120
|
+
connection.write_to_file(:root, TOML.dump(connection.minion_state_data), minion_state_file_name)
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
# def self.apply(package, context, nodes, user = 'deploy', package_filter = nil)
|
125
|
+
# # puts nodes.inspect
|
126
|
+
# orca_suite = OrcaSuite.init(package_filter)
|
127
|
+
# nodes.each do |node, data|
|
128
|
+
# old_current_node = ::Pvcglue.cloud.current_node_without_nil_check # this is being called recursively, so keep the original data...kinda a hack for now
|
129
|
+
# orca_node = ::Orca::Node.new(node, data[:public_ip], {user: user, port: Pvcglue.cloud.port_in_context(context)})
|
130
|
+
# # puts "#"*800
|
131
|
+
# # puts orca_node.name
|
132
|
+
# # puts package.to_s
|
133
|
+
# # puts "^"*80
|
134
|
+
# ::Pvcglue.cloud.current_node = {node => data}
|
135
|
+
# tries = 3
|
136
|
+
# begin
|
137
|
+
# begin
|
138
|
+
# # puts "="*800
|
139
|
+
# # puts orca_node.name
|
140
|
+
# # puts package.to_s
|
141
|
+
# # puts "^"*80
|
142
|
+
# orca_suite.run(orca_node.name, package.to_s, :apply)
|
143
|
+
# ensure
|
144
|
+
# # puts "-"*800
|
145
|
+
# # puts orca_node.name
|
146
|
+
# # puts package.to_s
|
147
|
+
# # puts "^"*80
|
148
|
+
# ::Pvcglue.cloud.current_node = old_current_node
|
149
|
+
#
|
150
|
+
# # ::Pvcglue.cloud.current_node = nil
|
151
|
+
# ::Pvcglue.cloud.current_hostname = nil
|
152
|
+
# end
|
153
|
+
# rescue Exception => e
|
154
|
+
# tries -= 1
|
155
|
+
# if tries > 0
|
156
|
+
# puts "\n"*10
|
157
|
+
# puts "*"*80
|
158
|
+
# puts "ERROR, retrying..."
|
159
|
+
# puts e.message
|
160
|
+
# puts "*"*80
|
161
|
+
# retry
|
162
|
+
# else
|
163
|
+
# puts "\n"*10
|
164
|
+
# puts "*"*80
|
165
|
+
# puts "ERROR, not retrying, fatal."
|
166
|
+
# puts e.message
|
167
|
+
# e.backtrace.each { |line| puts line }
|
168
|
+
# puts e.message
|
169
|
+
# puts node.inspect
|
170
|
+
# puts data.inspect
|
171
|
+
# puts "*"*80
|
172
|
+
# end
|
173
|
+
# end
|
174
|
+
# end
|
175
|
+
# end
|
83
176
|
end
|
84
177
|
|
178
|
+
# class OrcaSuite
|
179
|
+
#
|
180
|
+
# def self.init(package_filter)
|
181
|
+
# ::Orca.verbose(package_filter != 'manager') # show details for all packages except manager, for now
|
182
|
+
#
|
183
|
+
# # Load orca extensions
|
184
|
+
# orca_file = File.join(File.dirname(__FILE__), 'all_the_things.rb')
|
185
|
+
# ENV['ORCA_FILE'] = orca_file
|
186
|
+
# suite = ::Orca::Suite.new
|
187
|
+
# suite.load_file(orca_file)
|
188
|
+
# packages_loaded = []
|
189
|
+
#
|
190
|
+
# Dir[File.join(Pvcglue::gem_dir, 'lib', 'pvcglue', 'packages', '*.rb')].each do |file|
|
191
|
+
# # package filter is used to load the manager package by itself when stage is not specified
|
192
|
+
# next if package_filter && package_filter != File.basename(file, ".rb")
|
193
|
+
# begin
|
194
|
+
# suite.load_file(file)
|
195
|
+
# rescue Exception => e
|
196
|
+
# puts "Error loading #{file}: #{e.message}"
|
197
|
+
# raise
|
198
|
+
# end
|
199
|
+
# packages_loaded << File.basename(file, ".rb")
|
200
|
+
# end
|
201
|
+
# puts "Packages loaded: #{packages_loaded.sort.join(' ')}."
|
202
|
+
# suite
|
203
|
+
# end
|
204
|
+
# end
|
205
|
+
|
85
206
|
end
|