salted-rails 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/README.md +65 -20
  2. data/init.sh +64 -0
  3. data/lib/salted-rails.rb +4 -6
  4. data/lib/salted-rails/capistrano_helper.rb +106 -0
  5. data/lib/salted-rails/cloud_vbguest_installer.rb +14 -0
  6. data/lib/salted-rails/config.rb +212 -0
  7. data/lib/salted-rails/helper_base.rb +90 -0
  8. data/lib/salted-rails/vagrant_helper.rb +159 -0
  9. data/lib/salted-rails/version.rb +3 -0
  10. data/lib/salted_rails_base.rb +6 -0
  11. data/pillar/capistrano/top.sls +1 -1
  12. data/pillar/common.sls +5 -0
  13. data/pillar/vagrant/top.sls +1 -1
  14. data/salt/bin/change_mirror.sh +29 -20
  15. data/salt/bin/fix_hostname.sh +6 -0
  16. data/salt/bin/provision +37 -0
  17. data/salt/capistrano/deploy_requirements.sls +5 -0
  18. data/salt/capistrano/minion +8 -4
  19. data/salt/capistrano/top.sls +1 -5
  20. data/salt/ci/cruisecontrolrb.sls +72 -0
  21. data/salt/ci/teamcity/etc/init.d/teamcity +17 -0
  22. data/salt/ci/teamcity/init.sls +58 -0
  23. data/salt/databases/client.sls +18 -0
  24. data/salt/{common.sls → databases/init.sls} +1 -16
  25. data/salt/databases/phpmyadmin/etc/nginx/{sites-available → admin.d}/phpmyadmin.conf +1 -1
  26. data/salt/databases/phpmyadmin/init.sls +2 -11
  27. data/salt/databases/server.sls +19 -0
  28. data/salt/editors/gvim.sls +5 -0
  29. data/salt/editors/rubymine.sls +51 -0
  30. data/salt/gui/init.sls +3 -0
  31. data/salt/gui/lxde.sls +5 -0
  32. data/salt/gui/x2go.sls +23 -0
  33. data/salt/lang/java/etc/profile.d/java.sh +2 -0
  34. data/salt/lang/java/init.sls +48 -0
  35. data/salt/lang/php/composer.sls +0 -3
  36. data/salt/lang/ruby.sls +3 -3
  37. data/salt/lang/ruby.sls.bak +3 -3
  38. data/salt/railsapp/gems.sls +16 -3
  39. data/salt/railsapp/init.sls +1 -0
  40. data/salt/railsapp/mysql_database.sls +11 -6
  41. data/salt/salt/minion/init.sls +19 -18
  42. data/salt/vagrant/minion +8 -4
  43. data/salt/vagrant/minion.sls +4 -5
  44. data/salt/vagrant/top.sls +32 -6
  45. data/salt/www/admin/etc/nginx/nginx.conf +53 -0
  46. data/salt/{databases/phpmyadmin → www/admin}/etc/nginx/sites-available/.gitignore +0 -0
  47. data/salt/www/admin/etc/nginx/sites-available/phpmyadmin.conf +7 -0
  48. data/salt/www/admin/init.sls +31 -0
  49. data/salt/www/nginx/init.sls +17 -4
  50. data/salt/www/users.sls +4 -0
  51. data/salted-rails.gemspec +1 -1
  52. metadata +30 -13
  53. data/lib/salted_rails/capistrano.rb +0 -8
  54. data/lib/salted_rails/vagrant_helper.rb +0 -169
  55. data/lib/salted_rails/version.rb +0 -5
  56. data/salt/capistrano.sls +0 -0
  57. data/salt/develop/init.sls +0 -3
  58. data/salt/echo_pillar.sls +0 -9
  59. data/salt/run-standalone +0 -3
  60. data/salt/vagrant.sls +0 -0
@@ -0,0 +1,90 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+ #
4
+
5
+ require 'erb'
6
+ require 'yaml'
7
+ require 'fileutils'
8
+
9
+ module SaltedRails
10
+ class HelperBase
11
+
12
+ attr_accessor :config
13
+
14
+ def initialize(config)
15
+ @config = config
16
+ @config.logger.info "SaltedRails: Helper created with config.rails_root = #{@config.rails_root}"
17
+ end
18
+
19
+ private
20
+
21
+ # Add ruby version and gemfiles
22
+
23
+ # def create_empty_custom_files
24
+ # @config.logger.info 'SaltedRails: Checking stubbed custom files exist'
25
+ #
26
+ # # Create custom files
27
+ # [ 'pillar/vagrant', 'pillar/capistrano', 'salt/vagrant', 'salt/capistrano'].each do |custom|
28
+ # file = @config.rails_root + 'config/' + custom + '.sls'
29
+ # dir = File.dirname(file)
30
+ # unless File.directory? dir
31
+ # FileUtils.mkdir_p dir
32
+ # end
33
+ # unless File.exists? file
34
+ # @config.logger.info "SaltedRails: Creating empty #{file}"
35
+ # File.open(file, 'w') do |f_out|
36
+ # f_out.puts '# Custom data'
37
+ # end
38
+ # end
39
+ # end
40
+ # end
41
+
42
+ def pillarize_application_configuration
43
+ @config.logger.info 'SaltedRails: Creating pillar application data'
44
+
45
+ # Destination
46
+ salt_dir = @config.rails_root + 'tmp/salt/'
47
+ FileUtils.rm_rf salt_dir if File.directory? salt_dir
48
+ FileUtils.mkdir_p salt_dir unless File.directory? salt_dir
49
+ pillar_dir = @config.rails_root + 'tmp/pillar/'
50
+ FileUtils.rm_rf pillar_dir if File.directory? pillar_dir
51
+ FileUtils.mkdir_p pillar_dir unless File.directory? pillar_dir
52
+ pillar_app_file = pillar_dir + 'railsapp.sls'
53
+ @config.files.each do |f|
54
+ basename = File.basename(f)
55
+ dest = salt_dir + "files/" + basename
56
+ dir = File.dirname(dest)
57
+ unless File.directory? dir
58
+ FileUtils.mkdir_p dir
59
+ end
60
+ FileUtils.cp(@config.rails_root + f, dest)
61
+ end
62
+ @config.copy_from_home.each do |f|
63
+ dest = salt_dir + "home/" + f
64
+ dir = File.dirname(dest)
65
+ unless File.directory? dir
66
+ FileUtils.mkdir_p dir
67
+ end
68
+ if !File.exist?(dest) or (File.mtime(ENV['HOME'] + '/' + f) > File.mtime(dest))
69
+ @config.logger.info "SaltedRails: Copying #{f} to #{dest}"
70
+ FileUtils.cp_r(ENV['HOME'] + '/' + f, dest)
71
+ end
72
+ end
73
+ %w{ authorized_keys known_hosts }.each do |f|
74
+ file = salt_dir + "home/.ssh/" + f
75
+ FileUtils.mv(file, file + '.from_home') if File.exist? file
76
+ end
77
+ File.open(pillar_app_file, 'w') do |f_out|
78
+ if_command = 'if'
79
+ @config.machines.each do |machine_config|
80
+ f_out.puts "{% #{if_command} grains['fqdn'] == '#{machine_config.hostname}' %}"
81
+ if_command = 'elif'
82
+ f_out.puts machine_config.to_yaml
83
+ end
84
+ f_out.puts "{% else %}" unless @config.machines.empty?
85
+ f_out.puts @config.to_yaml
86
+ f_out.puts "{% endif %}" unless @config.machines.empty?
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,159 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+ #
4
+
5
+ require "salted-rails/helper_base"
6
+
7
+ module SaltedRails
8
+ class VagrantHelper < HelperBase
9
+
10
+ def initialize(config)
11
+ super(config)
12
+ end
13
+
14
+ def configure_vagrant(vagrant_config)
15
+ port_offset = 0
16
+ configure_virtualbox(vagrant_config)
17
+ configure_vbguest(vagrant_config)
18
+ configure_ubuntu_mirror(vagrant_config)
19
+ configure_digital_ocean(vagrant_config)
20
+ if @config.machines.empty?
21
+ configure_gui(vagrant_config) if @config.gui?
22
+ configure_hostname(vagrant_config)
23
+ configure_ports(vagrant_config, port_offset)
24
+ configure_memory(vagrant_config, @config.memory)
25
+ else
26
+ @config.machines.each do |machine_config|
27
+ machine_config.logger.info "Configuring machine #{machine_config.machine}, hostname: #{machine_config.hostname}"
28
+ vagrant_config.vm.define(machine_config.machine.to_sym) do |vagrant_vm_config|
29
+ configure_gui(vagrant_vm_config) if @config.gui?
30
+ configure_hostname(vagrant_vm_config, machine_config)
31
+ configure_ports(vagrant_vm_config, port_offset, machine_config)
32
+ configure_memory(vagrant_vm_config, machine_config.memory, machine_config)
33
+ port_offset += 1
34
+ end
35
+ end
36
+ end
37
+ # create_empty_custom_files
38
+ pillarize_application_configuration
39
+ fix_hostname(vagrant_config)
40
+ configure_salt(vagrant_config)
41
+ end
42
+
43
+ def configure_ubuntu_mirror(vagrant_config, config = @config)
44
+ config.logger.info "Configuring ubuntu mirror (#{config.mirror})"
45
+ vagrant_config.vm.provision "shell" do |s|
46
+ s.path = config.salt_root + 'salt/bin/change_mirror.sh'
47
+ s.args = "'#{config.mirror}'"
48
+ end
49
+ end
50
+
51
+ def configure_hostname(vagrant_config, config = @config)
52
+ config.logger.info "Configuring hostname (#{config.hostname})"
53
+ vagrant_config.vm.hostname = config.hostname
54
+ end
55
+
56
+ def fix_hostname(vagrant_config, config = @config)
57
+ vagrant_config.vm.provision "shell" do |s|
58
+ s.path = config.salt_root + 'salt/bin/fix_hostname.sh'
59
+ end
60
+ end
61
+
62
+ def configure_vbguest(vagrant_config, config = @config)
63
+ begin
64
+ require 'vagrant-vbguest'
65
+ require 'salted-rails/cloud_vbguest_installer'
66
+ vagrant_config.vbguest.installer = SaltedRails::CloudVbguestInstaller
67
+ vagrant_config.vbguest.auto_update = false
68
+ config.logger.info 'Configured vbguest installer'
69
+ rescue LoadError
70
+ config.logger.info 'Skipping vbguest (plugin not available)'
71
+ end
72
+ end
73
+
74
+
75
+ def configure_virtualbox(vagrant_config, config = @config)
76
+ config.logger.info 'Configuring virtualbox box (UbuntuCloud_12.04_32bit)'
77
+ vagrant_config.vm.box = 'UbuntuCloud_12.04_32bit'
78
+ vagrant_config.vm.box_url = 'http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-i386-disk1.box'
79
+ end
80
+
81
+ def configure_digital_ocean(vagrant_config, config = @config)
82
+ config.logger.info "Configuring digital ocean provider (#{config.machine})"
83
+ vagrant_config.vm.provider :digital_ocean do |provider, override|
84
+ override.ssh.username = 'vagrant'
85
+ override.vm.box = 'digital_ocean'
86
+ override.vm.box_url = 'https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box'
87
+ provider.image = 'Ubuntu 12.04 x32'
88
+ provider.region = config.region
89
+ provider.ca_path = config.ca_path if config.ca_path
90
+ override.vm.synced_folder '.', '/vagrant', :disabled => true if config.disable_vagrant_sync
91
+ if config.private_key_path
92
+ override.ssh.private_key_path = config.private_key_path
93
+ private_key_name = 'Vagrant ' + config.private_key_path.sub(/~\//, '').sub(/\.ssh\//, '').sub(/^id_/, '').gsub(/\W+/, ' ')
94
+ provider.ssh_key_name = private_key_name.strip
95
+ end
96
+ override.ssh.forward_agent = config.forward_agent
97
+ end
98
+ end
99
+
100
+ def configure_gui(vagrant_config)
101
+ vagrant_config.vm.provider "virtualbox" do |v|
102
+ v.gui = true
103
+ end
104
+ end
105
+
106
+ def configure_salt(vagrant_config, config = @config)
107
+ config.logger.info "Configuring saltstack (#{config.machine})"
108
+ vagrant_config.vm.synced_folder config.rails_root + 'config/salt/', '/srv/salt/config/'
109
+ vagrant_config.vm.synced_folder config.rails_root + 'config/pillar/', '/srv/pillar/config/'
110
+ vagrant_config.vm.synced_folder config.rails_root + 'tmp/salt/', '/srv/salt/generated/'
111
+ vagrant_config.vm.synced_folder config.rails_root + 'tmp/pillar/', '/srv/pillar/generated/'
112
+ vagrant_config.vm.synced_folder config.salt_root + 'salt/', '/srv/salt/salted-rails/'
113
+ vagrant_config.vm.synced_folder config.salt_root + 'pillar/', '/srv/pillar/salted-rails/'
114
+ # Bootstrap salt
115
+ ## config.vm.provision :shell, :inline => 'salt-call --version || wget -O - http://bootstrap.saltstack.org | sudo sh'
116
+ # Provisioning #2: masterless highstate call
117
+ vagrant_config.vm.provision :salt do |salt|
118
+ config.logger.info 'Configuring salt provisioner'
119
+ minion_file = config.rails_root + 'config/salt/vagrant/minion'
120
+ minion_file = config.salt_root + 'salt/vagrant/minion' unless File.exist?(minion_file)
121
+ salt.minion_config = minion_file
122
+ salt.run_highstate = true
123
+ salt.verbose = !! config.logger
124
+ # current package (salt-minion_0.17.0.1-1precise_all.deb) in ppa:saltstack/salt is broken as of Oct 10 2013:
125
+ # Unable to run multiple states and returns unhelpfull messages about list and get
126
+ salt.install_type = 'git'
127
+ salt.install_args = 'v0.16.4'
128
+ end
129
+ end
130
+
131
+ def configure_ports(vagrant_config, port_offset=0, config = @config)
132
+ config.ports.each do |port|
133
+ host_port = port_offset + port + (port < 3000 ? 3000 : 0)
134
+ vagrant_config.vm.network :forwarded_port, :guest => port, :host => host_port, auto_correct: true
135
+ end
136
+ end
137
+
138
+ def configure_memory(vagrant_config, memory, config = @config)
139
+ config.logger.info "Configuring memory = %d" % config.memory.to_i
140
+ vagrant_config.vm.provider :virtual_box do |vb|
141
+ vb.customize ["modifyvm", :id, "--memory", config.memory]
142
+ end
143
+ vagrant_config.vm.provider :digital_ocean do |provider, override|
144
+ # configure to closest value
145
+ if config.memory >= 3000
146
+ # 32 bit linux doesn't use anything more than this anyway
147
+ provider.size = '4GB'
148
+ elsif config.memory >= 1500
149
+ provider.size = '2GB'
150
+ elsif config.memory >= 750
151
+ provider.size = '1GB'
152
+ else
153
+ provider.size = '512MB'
154
+ end
155
+ end
156
+ end
157
+
158
+ end
159
+ end
@@ -0,0 +1,3 @@
1
+ module SaltedRails
2
+ VERSION = "0.0.5"
3
+ end
@@ -4,6 +4,12 @@ if defined? Vagrant
4
4
  end
5
5
  else
6
6
  class SaltedRailsBase
7
+ def name(v)
8
+ end
9
+
10
+ def config(name, &block)
11
+ end
12
+
7
13
  end
8
14
  end
9
15
 
@@ -1,5 +1,5 @@
1
1
  base:
2
2
  '*':
3
3
  - common
4
- - application
4
+ - railsapp
5
5
  - capistrano
data/pillar/common.sls CHANGED
@@ -12,4 +12,9 @@ www_dir: /srv/www/
12
12
 
13
13
  mysql-version: 5.5
14
14
 
15
+ teamcity-version: 8.0.4
16
+
17
+ rubymine-version: 5.4.3
18
+
19
+
15
20
  # vim: filetype=sls
@@ -1,5 +1,5 @@
1
1
  base:
2
2
  '*':
3
3
  - common
4
- - application
4
+ - railsapp
5
5
  - vagrant
@@ -3,25 +3,34 @@
3
3
  # Changes from the default to given mirror (unable to do it more than once)
4
4
 
5
5
  case "$1" in
6
- [a-z][a-z]|usa)
7
- echo "Configuring mirror for region: $1"
8
- exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#http://'"$1"'.archive.ubuntu.com/ubuntu/#' /etc/apt/sources.list
9
- ;;
10
- mirror)
11
- echo "Configuring automatic selection of mirror"
12
- exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list
13
- ;;
14
- internode)
15
- echo "Configuring mirror for ISP: $1"
16
- exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#http://mirror.internode.on.net/pub/ubuntu/ubuntu/#' /etc/apt/sources.list
17
- ;;
18
- [hmf]*://*ubuntu*)
19
- echo "Configuring mirror for $1"
20
- exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#'"$1"'#' /etc/apt/sources.list
21
- ;;
22
- *)
23
- echo Invalid mirror ignored! >&2
24
- exit 1
6
+ ''|-h)
7
+ exec echo "usage: $0 country|mirror|auto|internode|url"
25
8
  ;;
26
9
  esac
27
-
10
+ if grep 'http://archive.ubuntu.com/ubuntu' /etc/apt/sources.list > /dev/null; then
11
+ case "$1" in
12
+ [a-z][a-z]|usa)
13
+ echo "Configuring mirror for region: $1"
14
+ exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#http://'"$1"'.archive.ubuntu.com/ubuntu/#' /etc/apt/sources.list
15
+ ;;
16
+ mirror|auto)
17
+ echo "Configuring automatic selection of mirror"
18
+ exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list
19
+ ;;
20
+ internode)
21
+ echo "Configuring mirror for ISP: $1"
22
+ exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#http://mirror.internode.on.net/pub/ubuntu/ubuntu/#' /etc/apt/sources.list
23
+ ;;
24
+ [hmf]*://*ubuntu*)
25
+ echo "Configuring mirror for $1"
26
+ exec sed -i.original -e 's#http://[archivesecurity]*.ubuntu.com/ubuntu#'"$1"'#' /etc/apt/sources.list
27
+ ;;
28
+ *)
29
+ echo "Invalid mirror ($1) ignored!" >&2
30
+ exit 1
31
+ ;;
32
+ esac
33
+ else
34
+ echo "/etc/apt/sources.list has already been changed (leaving as is)"
35
+ fi
36
+ exit 0
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+ #
3
+ # Removes domain from /etc/hostname
4
+
5
+ sed -i "s@\..*\$@@" /etc/hostname
6
+ hostname -F /etc/hostname
@@ -0,0 +1,37 @@
1
+ #!/bin/bash
2
+
3
+ case "$1" in
4
+ run)
5
+ shift
6
+ case "$#" in
7
+ 0)
8
+ echo "Running all states ..."
9
+ sudo salt-call saltutil.sync_all
10
+ sudo salt-call state.highstate
11
+ ;;
12
+ *)
13
+ for file; do
14
+ echo "Running $file ..."
15
+ sudo salt-call state.sls "$file"
16
+ done
17
+ ;;
18
+ esac
19
+ ;;
20
+ grains)
21
+ sudo salt-call grains.items
22
+ ;;
23
+ pillar)
24
+ sudo salt-call pillar.items
25
+ ;;
26
+ packages)
27
+ dpkg --get-selections | sed -n 's/\s\s*install//p'
28
+ ;;
29
+ install|remove|purge|update|upgrade|clean|autoremove)
30
+ sudo apt-get "$@"
31
+ ;;
32
+ *)
33
+ echo "usage: $0 grains|pillar|run [state]|packages|install package|remove package|purge package|autoclean|autoremove\n"
34
+ ;;
35
+ esac
36
+
37
+
@@ -0,0 +1,5 @@
1
+ deploy:
2
+ pkg.installed:
3
+ - pkgs:
4
+ - git
5
+
@@ -5,10 +5,14 @@ state_auto_order: True
5
5
 
6
6
  file_roots:
7
7
  base:
8
- - /srv/salt/capistrano
9
- - /srv/salt
8
+ - /srv/salt/config/capistrano
9
+ - /srv/salt/salted-rails/capistrano
10
+ - /srv/salt/salted-rails
11
+ - /srv/salt/generated
10
12
 
11
13
  pillar_roots:
12
14
  base:
13
- - /srv/pillar/capistrano
14
- - /srv/pillar
15
+ - /srv/pillar/config/capistrano
16
+ - /srv/pillar/salted-rails/capistrano
17
+ - /srv/pillar/salted-rails
18
+ - /srv/pillar/generated
@@ -1,8 +1,4 @@
1
1
  base:
2
2
  '*':
3
- - common
4
- - capistrano
5
-
6
- # if GUI:
7
- # www.chromium
3
+ - TODO.SETUP.CAPISTRANO
8
4
 
@@ -0,0 +1,72 @@
1
+ include:
2
+ - lang.ruby
3
+
4
+ {{ pillar['homedir'] }}/local:
5
+ file.directory:
6
+ - makedirs: True
7
+ - user: {{ pillar['username'] }}
8
+ - group: {{ pillar['username'] }}
9
+
10
+ cruisecontrolrb-install:
11
+ git.latest:
12
+ - name: https://github.com/thoughtworks/cruisecontrol.rb
13
+ - target: {{ pillar['homedir'] }}/local/cruisecontrol.rb
14
+ - runas: {{ pillar['username'] }}
15
+ - group: {{ pillar['username'] }}
16
+ - require:
17
+ - file.directory: {{ pillar['homedir'] }}/local
18
+ cmd.run:
19
+ # Run twice if first fails (weirdness with installing ruby-debug)
20
+ - name: {{ pillar['homedir'] }}/.rbenv/shims/bundle install || {{ pillar['homedir'] }}/.rbenv/shims/bundle install
21
+ - cwd: {{ pillar['homedir'] }}/local/cruisecontrol.rb
22
+ - user: {{ pillar['username'] }}
23
+ - group: {{ pillar['username'] }}
24
+ - watch:
25
+ - git: cruisecontrolrb-install
26
+
27
+ cruisecontrolrb-create-service:
28
+ cmd.run:
29
+ - name: cp -f {{ pillar['homedir'] }}/local/cruisecontrol.rb/daemon/cruise /etc/init.d/cruise && chmod +x /etc/init.d/cruise
30
+ - watch:
31
+ - cmd: cruisecontrolrb-install
32
+
33
+ cruisecontrolrb-fix-user:
34
+ file.sed:
35
+ - name: /etc/init.d/cruise
36
+ - before: CRUISE_USER = .*
37
+ - after: CRUISE_USER='{{ pillar['username'] }}'
38
+ - limit: CRUISE_USER =
39
+ - watch:
40
+ - cmd: cruisecontrolrb-create-service
41
+
42
+ cruisecontrolrb-fix-home:
43
+ file.sed:
44
+ - name: /etc/init.d/cruise
45
+ - before: CRUISE_HOME = .*
46
+ - after: CRUISE_HOME='{{ pillar['homedir'] }}/local/cruisecontrol.rb'
47
+ - limit: CRUISE_HOME =
48
+ - watch:
49
+ - cmd: cruisecontrolrb-create-service
50
+
51
+ cruisecontrolrb-fix-shebang:
52
+ file.sed:
53
+ - name: /etc/init.d/cruise
54
+ - before: '#!/usr/bin/env.*'
55
+ - after: '#!{{ pillar['homedir'] }}/.rbenv/shims/ruby'
56
+ - watch:
57
+ - cmd: cruisecontrolrb-create-service
58
+
59
+ cruisecontrolrb-register-service:
60
+ cmd.run:
61
+ - name: update-rc.d cruise defaults
62
+ - watch:
63
+ - file.sed: cruisecontrolrb-fix-home
64
+ - file.sed: cruisecontrolrb-fix-user
65
+ - file.sed: cruisecontrolrb-fix-shebang
66
+ service.running:
67
+ - name: cruise
68
+ - watch:
69
+ - cmd: cruisecontrolrb-register-service
70
+ - require:
71
+ - sls: lang.ruby
72
+