salted-rails 0.0.4 → 0.0.5
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/README.md +65 -20
- data/init.sh +64 -0
- data/lib/salted-rails.rb +4 -6
- data/lib/salted-rails/capistrano_helper.rb +106 -0
- data/lib/salted-rails/cloud_vbguest_installer.rb +14 -0
- data/lib/salted-rails/config.rb +212 -0
- data/lib/salted-rails/helper_base.rb +90 -0
- data/lib/salted-rails/vagrant_helper.rb +159 -0
- data/lib/salted-rails/version.rb +3 -0
- data/lib/salted_rails_base.rb +6 -0
- data/pillar/capistrano/top.sls +1 -1
- data/pillar/common.sls +5 -0
- data/pillar/vagrant/top.sls +1 -1
- data/salt/bin/change_mirror.sh +29 -20
- data/salt/bin/fix_hostname.sh +6 -0
- data/salt/bin/provision +37 -0
- data/salt/capistrano/deploy_requirements.sls +5 -0
- data/salt/capistrano/minion +8 -4
- data/salt/capistrano/top.sls +1 -5
- data/salt/ci/cruisecontrolrb.sls +72 -0
- data/salt/ci/teamcity/etc/init.d/teamcity +17 -0
- data/salt/ci/teamcity/init.sls +58 -0
- data/salt/databases/client.sls +18 -0
- data/salt/{common.sls → databases/init.sls} +1 -16
- data/salt/databases/phpmyadmin/etc/nginx/{sites-available → admin.d}/phpmyadmin.conf +1 -1
- data/salt/databases/phpmyadmin/init.sls +2 -11
- data/salt/databases/server.sls +19 -0
- data/salt/editors/gvim.sls +5 -0
- data/salt/editors/rubymine.sls +51 -0
- data/salt/gui/init.sls +3 -0
- data/salt/gui/lxde.sls +5 -0
- data/salt/gui/x2go.sls +23 -0
- data/salt/lang/java/etc/profile.d/java.sh +2 -0
- data/salt/lang/java/init.sls +48 -0
- data/salt/lang/php/composer.sls +0 -3
- data/salt/lang/ruby.sls +3 -3
- data/salt/lang/ruby.sls.bak +3 -3
- data/salt/railsapp/gems.sls +16 -3
- data/salt/railsapp/init.sls +1 -0
- data/salt/railsapp/mysql_database.sls +11 -6
- data/salt/salt/minion/init.sls +19 -18
- data/salt/vagrant/minion +8 -4
- data/salt/vagrant/minion.sls +4 -5
- data/salt/vagrant/top.sls +32 -6
- data/salt/www/admin/etc/nginx/nginx.conf +53 -0
- data/salt/{databases/phpmyadmin → www/admin}/etc/nginx/sites-available/.gitignore +0 -0
- data/salt/www/admin/etc/nginx/sites-available/phpmyadmin.conf +7 -0
- data/salt/www/admin/init.sls +31 -0
- data/salt/www/nginx/init.sls +17 -4
- data/salt/www/users.sls +4 -0
- data/salted-rails.gemspec +1 -1
- metadata +30 -13
- data/lib/salted_rails/capistrano.rb +0 -8
- data/lib/salted_rails/vagrant_helper.rb +0 -169
- data/lib/salted_rails/version.rb +0 -5
- data/salt/capistrano.sls +0 -0
- data/salt/develop/init.sls +0 -3
- data/salt/echo_pillar.sls +0 -9
- data/salt/run-standalone +0 -3
- data/salt/vagrant.sls +0 -0
data/README.md
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
# Salted-Rails
|
2
2
|
|
3
|
-
Salted-Rails: Provision
|
3
|
+
Salted-Rails: Provision a vagrant machine for rails using salt.
|
4
4
|
|
5
|
-
This gem inspects
|
5
|
+
This gem inspects your rails app configuration to work out what needs to be installed in the virtual machine.
|
6
6
|
|
7
|
-
THIS GEM IS IN
|
7
|
+
THIS GEM IS IN ALPHA STAGE! THINGS MAY CHANGE AND BREAK WITHOUT NOTICE!
|
8
|
+
|
9
|
+
It Inspects:
|
10
|
+
* .ruby-version / .rvmrc to control the version of ruby installed (using rbenv)
|
11
|
+
* config/database.yml to create users and databases
|
12
|
+
* Gemfile and Gemfile.lock to preload gems into the system, and trigger the installation of packages required by gems
|
8
13
|
|
9
14
|
This configures vagrant in the way that I personally like:
|
10
15
|
* ubunutu 12.04 (LTS) 32bit from cloud-images.ubuntu.com (up to date packages and more memory free for systems < 4GB memory)
|
@@ -23,18 +28,62 @@ Add as a vagrant plugin
|
|
23
28
|
|
24
29
|
vagrant plugin add salted-rails
|
25
30
|
|
26
|
-
And then adjust your Vagrantfile as follows:
|
31
|
+
And then adjust your Vagrantfile as follows (accepting all the defaults, one machine):
|
32
|
+
|
33
|
+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
34
|
+
|
35
|
+
if defined? SaltedRails::Config
|
36
|
+
salted_config = SaltedRails::Config.new(File.dirname(__FILE__))
|
37
|
+
salted_config.configure_vagrant(config)
|
38
|
+
end
|
39
|
+
|
40
|
+
# .... etc ....
|
41
|
+
end
|
42
|
+
|
43
|
+
Or for a more complicated example:
|
27
44
|
|
28
|
-
require 'salted_rails/vagrant_helper'
|
29
|
-
vagrant_helper = SaltedRails::VagrantHelper.new(File.dirname(__FILE__))
|
30
45
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
46
|
+
|
47
|
+
if defined? SaltedRails::Config
|
48
|
+
salted_config = SaltedRails::Config.new(File.dirname(__FILE__))
|
49
|
+
|
50
|
+
# On the guest run the following to copy all these files/firectories to vagrant home directory
|
51
|
+
# cd /srv/salt/generated/home ; cp -R .[a-z]* ~vagrant
|
52
|
+
# note .ssh/known_hosts and .ssh/authorized_hosts are renamed with .copy_from_home appended
|
53
|
+
salted_config.copy_from_home = %w{ .vim .vimrc .gitconfig .ssh .tmux .tmux.conf }
|
54
|
+
|
55
|
+
# if you have multiple ssh keys, you can select which one
|
56
|
+
salted_config.private_key_path = '~/.ssh/id_rsa_project' if File.exist? '~/.ssh/id_rsa_project'
|
57
|
+
|
58
|
+
# override default domain
|
59
|
+
salted_config.domain = 'mydomain.com'
|
60
|
+
|
61
|
+
# Define a machine dev
|
62
|
+
salted_config.define('dev') do |machine_config|
|
63
|
+
end
|
64
|
+
|
65
|
+
salted_config.define('qa') do |machine_config|
|
66
|
+
# use my ISP's mirror
|
67
|
+
salted_config.mirror = 'internode'
|
68
|
+
|
69
|
+
# explicitly specify memory
|
70
|
+
machine_config.memory = 1024
|
71
|
+
|
72
|
+
# add extra roles, which will install extra packages and increase teh defsault memory allocation
|
73
|
+
|
74
|
+
# two continuous integration packages
|
75
|
+
# browse http://localhost:8111
|
76
|
+
machine_config.roles <<= 'teamcity'
|
77
|
+
|
78
|
+
# browse http://localhost:3333
|
79
|
+
machine_config.roles <<= 'curisecontrolrb'
|
80
|
+
|
81
|
+
# gui also configures virtualbox for standard rather than headless mode
|
82
|
+
machine_config.roles <<= 'gui'
|
83
|
+
end
|
84
|
+
|
85
|
+
salted_config.configure_vagrant(config)
|
86
|
+
end
|
38
87
|
end
|
39
88
|
|
40
89
|
You can add configuration that applies to all your projects to `~/.vagrant.d/Vagrantfile`, eg:
|
@@ -46,7 +95,7 @@ You can add configuration that applies to all your projects to `~/.vagrant.d/Vag
|
|
46
95
|
end
|
47
96
|
end
|
48
97
|
|
49
|
-
The
|
98
|
+
The mirror value can also be:
|
50
99
|
* 'mirror' - Configures mirror: option to auto select from http://mirrors.ubuntu.com/mirrors.txt
|
51
100
|
* 'internode' - an australian ISP (mine ;)
|
52
101
|
* a country code - eg 'au', 'uk', 'us' etc
|
@@ -72,12 +121,8 @@ TODO: write the helper and then configure capistrano to use it ...
|
|
72
121
|
|
73
122
|
TODO: Write usage instructions here
|
74
123
|
|
75
|
-
|
76
|
-
|
77
|
-
The configuration files are also copied to `salt/railsapp/files/`.
|
78
|
-
|
79
|
-
If you move `RAILS_ROOT/tmp/salt` and `RAILS_ROOT/tmp/pillar` into a RAILS_ROOT/salt directory then you can adjust the other files as desired.
|
80
|
-
In that case only the `pillar/application.sls` and `salt/railsapp/files/*` files will be refreshed when they become stale (rather than all files).
|
124
|
+
This gem generates pillar and salt files in RAILS_ROOT/tmp/salt and RAILS_ROOT/tmp/pillar respectively from your application configuration files.
|
125
|
+
The files it generates are based on `.ruby-version`, `config/database.yml` and `Gemfile` as well
|
81
126
|
|
82
127
|
## Contributing
|
83
128
|
|
data/init.sh
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
msg='OK: Vagrant has been setup: ready for vagrant up [--provider=digital_ocean]'
|
4
|
+
|
5
|
+
if which VirtualBox; then
|
6
|
+
echo Found Virtualbox
|
7
|
+
else
|
8
|
+
echo ACTION REQUIRED: Please install Virtualbox 4.2.18 or later from https://www.virtualbox.org/wiki/Downloads
|
9
|
+
msg='(PLEASE RERUN SCRIPT AFTERWARDS)'
|
10
|
+
fi
|
11
|
+
|
12
|
+
if which vagrant; then
|
13
|
+
echo Found vagrant
|
14
|
+
echo Checking vagrant plugins are installed ...
|
15
|
+
|
16
|
+
vagrant plugin list > /tmp/t$$
|
17
|
+
for plugin in deep_merge vagrant-digitalocean vagrant-vbguest # salted-rails
|
18
|
+
do
|
19
|
+
if grep $plugin < /tmp/t$$; then
|
20
|
+
vagrant plugin update $plugin
|
21
|
+
else
|
22
|
+
vagrant plugin install $plugin
|
23
|
+
fi
|
24
|
+
done
|
25
|
+
|
26
|
+
else
|
27
|
+
echo ACTION REQUIRED: Please install vagrant 1.3.4 or later from http://www.vagrantup.com/
|
28
|
+
msg='(PLEASE RERUN SCRIPT AFTERWARDS)'
|
29
|
+
fi
|
30
|
+
|
31
|
+
if [ -f Vagrantfile.example ]; then
|
32
|
+
if [ -f Vagrantfile ]; then
|
33
|
+
echo Found Vagrantfile '(previously copied from example)'
|
34
|
+
else
|
35
|
+
echo Copying Vagrantfile.example to Vagrantfile '(so you can customize it)'
|
36
|
+
cp Vagrantfile.example Vagrantfile
|
37
|
+
fi
|
38
|
+
else
|
39
|
+
echo ERROR: setup_vagrant Must be run in rails root directory '(Vagrantfile.example not found)'
|
40
|
+
msg='(PLEASE RERUN SCRIPT FROM CORRECT DIRECTORY)'
|
41
|
+
fi
|
42
|
+
|
43
|
+
mkdir -p $HOME/.vagrant.d
|
44
|
+
|
45
|
+
if [ -f "$HOME/.vagrant.d/Vagrantfile" ]; then
|
46
|
+
echo Found global Vagrantfile
|
47
|
+
else
|
48
|
+
echo "About to set up ~/.vagrant.d/Vagrantfile"
|
49
|
+
echo -n "Enter your digital ocean client key (defaul none): "
|
50
|
+
read client_id
|
51
|
+
echo -n "Enter your digital ocean API key (defaul none): "
|
52
|
+
read api_key
|
53
|
+
echo "
|
54
|
+
Vagrant.configure('2') do |config|
|
55
|
+
config.vm.provider :digital_ocean do |provider|
|
56
|
+
provider.client_id = '$client_id'
|
57
|
+
provider.api_key = '$api_key'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
" > $HOME/.vagrant.d/Vagrantfile
|
61
|
+
fi
|
62
|
+
echo
|
63
|
+
echo "$msg"
|
64
|
+
exit 0
|
data/lib/salted-rails.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
require "
|
2
|
-
require "
|
1
|
+
require "salted-rails/version"
|
2
|
+
require "salted-rails/config"
|
3
|
+
require "salted-rails/vagrant_helper"
|
3
4
|
|
4
|
-
|
5
|
-
name "Salted Rails"
|
5
|
+
module SaltedRails
|
6
6
|
end
|
7
|
-
|
8
|
-
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'erb'
|
6
|
+
require 'yaml'
|
7
|
+
require 'fileutils'
|
8
|
+
require 'salted-rails/helper_base'
|
9
|
+
|
10
|
+
module SaltedRails
|
11
|
+
class CapistranoHelper < HelperBase
|
12
|
+
|
13
|
+
def initialize(rails_root, logger = Log4r::Logger.new("salted_rails::capistrano_helper"))
|
14
|
+
super(rail_root, logger)
|
15
|
+
end
|
16
|
+
|
17
|
+
# def configure_vagrant(config)
|
18
|
+
# config.vm.box = 'UbuntuCloud_12.04_32bit'
|
19
|
+
# config.vm.box_url = 'http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-i386-disk1.box'
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# def configure_ubuntu_mirror(config, mirror = 'mirror://mirrors.ubuntu.com/mirrors.txt')
|
23
|
+
# config.vm.provision "shell" do |s|
|
24
|
+
# s.path = @salt_root + 'salt/bin/change_mirror.sh'
|
25
|
+
# s.args = "'#{mirror}'"
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# def configure_digital_ocean(config, private_key_path = '~/.ssh/id_rsa', disable_vagrant_sync = true)
|
30
|
+
# @logger.info 'Configuring digital ocean provider' if @logger
|
31
|
+
# @has_digital_ocean = 1
|
32
|
+
# config.vm.provider :digital_ocean do |provider, override|
|
33
|
+
# override.ssh.username = 'vagrant'
|
34
|
+
# override.vm.box = 'digital_ocean'
|
35
|
+
# override.vm.box_url = 'https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box'
|
36
|
+
# provider.image = 'Ubuntu 12.04 x32'
|
37
|
+
# provider.region = 'San Francisco 1'
|
38
|
+
# provider.ca_path = '/etc/ssl/certs/ca-certificates.crt' if File.exist?('/etc/ssl/certs/ca-certificates.crt')
|
39
|
+
# override.vm.synced_folder '.', '/vagrant', :disabled => true if disable_vagrant_sync
|
40
|
+
# override.ssh.private_key_path = private_key_path
|
41
|
+
# @private_key_name = 'Vagrant ' + private_key_path.sub(/~\//, '').sub(/\.ssh\//, '').sub(/^id_/, '').gsub(/\W+/, ' ')
|
42
|
+
# provider.ssh_key_name = @private_key_name if @private_key_name
|
43
|
+
# override.ssh.forward_agent = true
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# def configure_salt(config)
|
48
|
+
# pillarize_application_configuration
|
49
|
+
# config.vm.synced_folder @salt_root + 'config/salt/', '/srv/salt/config/'
|
50
|
+
# config.vm.synced_folder @salt_root + 'config/pillar/', '/srv/pillar/config/'
|
51
|
+
# config.vm.synced_folder @salt_root + 'salt/', '/srv/salt/salted-rails/'
|
52
|
+
# config.vm.synced_folder @salt_root + 'pillar/', '/srv/pillar/salted-rails/'
|
53
|
+
# # Bootstrap salt
|
54
|
+
# ## config.vm.provision :shell, :inline => 'salt-call --version || wget -O - http://bootstrap.saltstack.org | sudo sh'
|
55
|
+
# # Provisioning #2: masterless highstate call
|
56
|
+
# config.vm.provision :salt do |salt|
|
57
|
+
# @logger.info 'Configuring salt provisioner' if @logger
|
58
|
+
# minion_file = @rails_root + 'config/salt/vagrant/minion'
|
59
|
+
# minion_file = @salt_root + 'salt/vagrant/minion' unless File.exists? minion_file
|
60
|
+
# salt.minion_config = minion_file
|
61
|
+
# salt.run_highstate = true
|
62
|
+
# salt.verbose = !! @logger
|
63
|
+
# end
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# def configure_ports(vm_config, port_offset=0)
|
67
|
+
# vm_config.vm.network :forwarded_port, :guest => 3000 + port_offset, :host => 3000, auto_correct: true
|
68
|
+
# [ 80, 443, 880 ].each do |port|
|
69
|
+
# vm_config.vm.network :forwarded_port, :guest => port, :host => 3000+port + port_offset, auto_correct: true
|
70
|
+
# end
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
# def configure_gui(vm_config, memory = 1024)
|
74
|
+
# @gui = true
|
75
|
+
# configure_memory(memory)
|
76
|
+
# vm_config.vm.boot_mode == :gui
|
77
|
+
# vm_config.vm.provision :salt do |salt|
|
78
|
+
# minion_file = @rails_root + 'config/salt/vagrant/gui_minion'
|
79
|
+
# minion_file = @salt_root + 'salt/vagrant/gui_minion' unless File.exists? minion_file
|
80
|
+
# salt.minion_config = minion_file
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# def configure_memory(memory = 1024)
|
85
|
+
# config.vm.provider :virtualbox do |vb|
|
86
|
+
# vb.customize ["modifyvm", :id, "--memory", memory]
|
87
|
+
# end
|
88
|
+
# config.vm.provider :digital_ocean do |provider, override|
|
89
|
+
# if memory >= 8000
|
90
|
+
# provider.size = '8GB'
|
91
|
+
# elsif memory >= 4000
|
92
|
+
# provider.size = '4GB'
|
93
|
+
# elsif memory >= 2000
|
94
|
+
# provider.size = '2GB'
|
95
|
+
# elsif memory >= 1000
|
96
|
+
# provider.size = '1GB'
|
97
|
+
# else
|
98
|
+
# provider.size = '512MB'
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
# end
|
102
|
+
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module SaltedRails
|
2
|
+
class CloudVbguestInstaller < VagrantVbguest::Installers::Ubuntu
|
3
|
+
def install(opts=nil, &block)
|
4
|
+
communicate.sudo("apt-get -y -q purge virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11", opts, &block)
|
5
|
+
@vb_uninstalled = true
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def running?(opts=nil, &block)
|
10
|
+
return false if @vb_uninstalled
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
module SaltedRails
|
8
|
+
class Config
|
9
|
+
|
10
|
+
attr_accessor :private_key_path
|
11
|
+
attr_accessor :machine
|
12
|
+
attr_accessor :hostname
|
13
|
+
attr_accessor :domain
|
14
|
+
attr_accessor :rails_root
|
15
|
+
attr_accessor :salt_root
|
16
|
+
attr_accessor :mirror
|
17
|
+
attr_accessor :logger
|
18
|
+
attr_accessor :memory
|
19
|
+
attr_accessor :ports
|
20
|
+
attr_accessor :disable_vagrant_sync
|
21
|
+
attr_accessor :ca_path
|
22
|
+
attr_accessor :region
|
23
|
+
attr_accessor :forward_agent
|
24
|
+
attr_accessor :files
|
25
|
+
attr_accessor :databases
|
26
|
+
attr_accessor :roles
|
27
|
+
attr_accessor :gems
|
28
|
+
attr_accessor :ruby_version
|
29
|
+
attr_accessor :java_version
|
30
|
+
attr_accessor :php_version
|
31
|
+
attr_accessor :machines
|
32
|
+
attr_accessor :copy_from_home
|
33
|
+
|
34
|
+
def sanitize_dns_name(name)
|
35
|
+
dns_name = name.downcase.gsub(/[^-0-9a-z]+/,'-').sub(/^-+/, '').sub(/-+$/, '')
|
36
|
+
end
|
37
|
+
|
38
|
+
# pass vm.ui for the logger if you want debugging info
|
39
|
+
def initialize(rails_root, machine = 'default')
|
40
|
+
@logger = Log4r::Logger.new("vagrant::salted-rails")
|
41
|
+
@machine = machine
|
42
|
+
@rails_root = rails_root
|
43
|
+
@rails_root += '/' unless @rails_root =~ /\/$/
|
44
|
+
@salt_root = nil
|
45
|
+
# see salt/vagrant/top.sls for other roles
|
46
|
+
@roles = %w{ app web db }
|
47
|
+
@domain = nil
|
48
|
+
@private_key_path = nil
|
49
|
+
@mirror = nil
|
50
|
+
@memory = nil
|
51
|
+
@ports = [ 80, 443, 880, 3000 ]
|
52
|
+
@disable_vagrant_sync = true
|
53
|
+
@ca_path = nil
|
54
|
+
@region = nil
|
55
|
+
@forward_agent = true
|
56
|
+
@files = [ '.ruby-version', '.java-version', '.php-version', '.rvmrc', 'config/database.yml', 'Gemfile', 'Gemfile.lock' ].select{ |f| File.exist?(@rails_root + f) }
|
57
|
+
@copy_from_home = [ ]
|
58
|
+
|
59
|
+
ENV['REMOTE_MACHINE'] = 'true'
|
60
|
+
database_file = @rails_root + 'config/database.yml'
|
61
|
+
@databases = YAML.load(ERB.new(IO.read(database_file)).result) rescue { }
|
62
|
+
ENV['REMOTE_MACHINE'] = nil
|
63
|
+
|
64
|
+
@gems = { }
|
65
|
+
if File.exists? @rails_root + 'Gemfile'
|
66
|
+
File.foreach(@rails_root + 'Gemfile') do |line|
|
67
|
+
if line =~ /^\s*gem\s*['"]([^'"]+)['"][,\s]*(['"]([^'"]+)['"])?/
|
68
|
+
gem = $1
|
69
|
+
version = $3.to_s
|
70
|
+
version = true if version == '' or version !~ /\d/
|
71
|
+
@gems[gem] = version
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
@databases.each do |key, details|
|
76
|
+
@gems[details['adapter']] = true
|
77
|
+
end
|
78
|
+
|
79
|
+
@ruby_version = nil
|
80
|
+
@java_version = nil
|
81
|
+
@php_version = nil
|
82
|
+
|
83
|
+
@machines = [ ]
|
84
|
+
@hostname = nil
|
85
|
+
end
|
86
|
+
|
87
|
+
def gui?
|
88
|
+
@roles.include? 'gui'
|
89
|
+
end
|
90
|
+
|
91
|
+
def normalize
|
92
|
+
unless @memory
|
93
|
+
@memory = 512
|
94
|
+
{
|
95
|
+
'gui' => 1536,
|
96
|
+
'teamcity' => 1536,
|
97
|
+
'cruisecontrolrb' => 512
|
98
|
+
}.each do |role, extra|
|
99
|
+
@memory += extra if @roles.include?(role)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
unless @domain
|
103
|
+
if @hostname
|
104
|
+
@domain = @hostname.sub(/^[^.]*\.?/, '')
|
105
|
+
else
|
106
|
+
@domain = sanitize_dns_name(File.basename(File.expand_path(@rails_root).sub(/\/$/, '').sub(/\/(app|site|web|www|website)\d*$/, ''))) + '.test'
|
107
|
+
@domain = 'railsapp.test' if @domain == '.test'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
if @hostname.nil? or @hostname == ''
|
111
|
+
if @machine == 'default'
|
112
|
+
@hostname = @domain
|
113
|
+
else
|
114
|
+
@hostname = sanitize_dns_name(@machine.to_s)
|
115
|
+
if @hostname == ''
|
116
|
+
@hostname = @domain
|
117
|
+
else
|
118
|
+
@hostname <<= '.' + @domain
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
@ruby_version ||= File.open(@rails_root + '.ruby-version', 'r') do |f_in|
|
123
|
+
f_in.gets.gsub(/\s/,'')
|
124
|
+
end rescue nil
|
125
|
+
@ruby_version ||= File.open(@rails_root + '.rvmrc', 'r') do |f_in|
|
126
|
+
while !ruby_version && (line = f_in.gets)
|
127
|
+
ruby_version = $1 if line =~ /^\s*environment_id=['"]([^"'@]+)/
|
128
|
+
end
|
129
|
+
end rescue nil
|
130
|
+
@ruby_version ||= '1.9.3'
|
131
|
+
|
132
|
+
@java_version ||= File.open(@rails_root + '.java-version', 'r') do |f_in|
|
133
|
+
f_in.gets.gsub(/\s/,'')
|
134
|
+
end rescue nil
|
135
|
+
|
136
|
+
@php_version ||= File.open(@rails_root + '.php-version', 'r') do |f_in|
|
137
|
+
f_in.gets.gsub(/\s/,'')
|
138
|
+
end rescue nil
|
139
|
+
|
140
|
+
@private_key_path ||= '~/.ssh/id_rsa'
|
141
|
+
@mirror ||= 'auto'
|
142
|
+
@salt_root ||= File.dirname(__FILE__) + '/../../'
|
143
|
+
@ca_path ||= '/etc/ssl/certs/ca-certificates.crt'
|
144
|
+
@ca_path = nil unless File.exist?(@ca_path)
|
145
|
+
@region ||= 'San Francisco 1'
|
146
|
+
|
147
|
+
@machines.each {|m| m.normalize}
|
148
|
+
|
149
|
+
{
|
150
|
+
'teamcity' => 8111,
|
151
|
+
'cruisecontrolrb' => 3333
|
152
|
+
}.each do |role, port|
|
153
|
+
@ports << port if @roles.include?(role) and not @ports.include?(port)
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
def define(machine, &block)
|
159
|
+
obj = self.clone
|
160
|
+
obj.machine = machine
|
161
|
+
obj.machines = [ ]
|
162
|
+
obj.logger = @logger
|
163
|
+
@machines << obj
|
164
|
+
yield(obj) if block_given?
|
165
|
+
end
|
166
|
+
|
167
|
+
# Clone
|
168
|
+
def clone
|
169
|
+
obj = self.dup
|
170
|
+
obj.roles = @roles.dup
|
171
|
+
obj.ports = @ports.dup
|
172
|
+
obj.files = @files.dup
|
173
|
+
obj.copy_from_home = @copy_from_home.dup
|
174
|
+
obj.databases = @databases.dup
|
175
|
+
obj.gems = @gems.dup
|
176
|
+
obj
|
177
|
+
end
|
178
|
+
|
179
|
+
def to_hash
|
180
|
+
{
|
181
|
+
'domain' => @domain,
|
182
|
+
'mirror' => @mirror,
|
183
|
+
'machine' => @machine,
|
184
|
+
'hostname' => @hostname,
|
185
|
+
'memory' => @memory,
|
186
|
+
'disable_vagrant_sync' => @disable_vagrant_sync,
|
187
|
+
'region' => @region,
|
188
|
+
'forward_agent' => @forward_agent,
|
189
|
+
'files' => @files,
|
190
|
+
'databases' => @databases,
|
191
|
+
'gems' => @gems,
|
192
|
+
'ruby_version' => @ruby_version,
|
193
|
+
'java_version' => @java_version,
|
194
|
+
'php_version' => @php_version,
|
195
|
+
'roles' => @roles
|
196
|
+
}
|
197
|
+
end
|
198
|
+
|
199
|
+
def to_yaml
|
200
|
+
normalize
|
201
|
+
self.to_hash.to_yaml
|
202
|
+
end
|
203
|
+
|
204
|
+
def configure_vagrant(config)
|
205
|
+
require 'salted-rails/vagrant_helper'
|
206
|
+
normalize
|
207
|
+
helper = SaltedRails::VagrantHelper.new(self)
|
208
|
+
helper.configure_vagrant(config)
|
209
|
+
end
|
210
|
+
|
211
|
+
end
|
212
|
+
end
|