vagrant-yarrs-and-yamls 0.8.3 → 0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +13 -5
  2. data/Gemfile +2 -0
  3. data/README.md +58 -11
  4. data/Yarrs.example.yaml +20 -0
  5. data/example.Vagrantfile +2 -8
  6. data/lib/scripts/apache2.sh +34 -0
  7. data/lib/scripts/apache2_ssl.sh +24 -0
  8. data/lib/scripts/base.sh +32 -0
  9. data/lib/scripts/composer.sh +28 -0
  10. data/lib/scripts/deploy.sh +38 -0
  11. data/lib/scripts/deploy_init.sh +11 -0
  12. data/lib/scripts/export_vars.sh +16 -0
  13. data/lib/scripts/git.sh +11 -0
  14. data/lib/scripts/hhvm.sh +33 -0
  15. data/lib/scripts/install-nodejs-modules.sh +19 -0
  16. data/lib/scripts/mariadb.sh +35 -0
  17. data/lib/scripts/mysql-create-databases.sh +19 -0
  18. data/lib/scripts/mysql.sh +28 -0
  19. data/lib/scripts/mysql_client.sh +22 -0
  20. data/lib/scripts/newrelic_php.sh +37 -0
  21. data/lib/scripts/nginx.sh +26 -0
  22. data/lib/scripts/nginx_site.sh +27 -0
  23. data/lib/scripts/nodejs.sh +24 -0
  24. data/lib/scripts/nvm.sh +30 -0
  25. data/lib/scripts/permissions.sh +18 -0
  26. data/lib/scripts/php.sh +25 -0
  27. data/lib/scripts/php_configure.sh +18 -0
  28. data/lib/scripts/php_xdebug.sh +18 -0
  29. data/lib/scripts/phpbrew.sh +11 -0
  30. data/lib/scripts/postfix.sh +13 -0
  31. data/lib/scripts/pubkeys.sh +35 -0
  32. data/lib/scripts/rvm.sh +35 -0
  33. data/lib/scripts/test.sh +48 -0
  34. data/lib/scripts/tz.sh +8 -0
  35. data/lib/scripts/wp_env.sh +16 -0
  36. data/lib/scripts/wpcli.sh +27 -0
  37. data/lib/templates/apache2.conf +151 -0
  38. data/lib/templates/apache2_vhost_http.conf +8 -0
  39. data/lib/templates/apache2_vhost_https.conf +16 -0
  40. data/lib/templates/apache2_vhost_redirect_http.conf +17 -0
  41. data/lib/templates/apache2_vhost_redirect_https.conf +18 -0
  42. data/lib/templates/gitconfig.conf +32 -0
  43. data/lib/templates/logrotate.conf +14 -0
  44. data/lib/templates/nginx.conf +56 -0
  45. data/lib/templates/nginx_vhost.erb +45 -0
  46. data/lib/templates/proxy_params.conf +3 -0
  47. data/lib/templates/xdebug.ini +6 -0
  48. data/lib/vagrant-yarrs-and-yamls/api.rb +423 -0
  49. data/lib/vagrant-yarrs-and-yamls/plugin.rb +4 -48
  50. data/lib/vagrant-yarrs-and-yamls/version.rb +1 -1
  51. data/vagrant-yarrs-and-yamls.gemspec +1 -1
  52. metadata +51 -8
  53. data/example.Vagrantfile.yml +0 -8
  54. data/lib/vagrant-yarrs-and-yamls/v1.rb +0 -234
data/lib/scripts/tz.sh ADDED
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ echo "tz.sh: provisioning starts"
4
+
5
+ echo $1 > /etc/timezone
6
+ dpkg-reconfigure -f noninteractive tzdata
7
+
8
+ echo "tz.sh: provisioning ends"
@@ -0,0 +1,16 @@
1
+ #!/bin/sh
2
+
3
+ echo "wp_env.sh: provisioning starts"
4
+
5
+ $ENV_PATH=/var/www/.env
6
+
7
+ # get the value of WP_ENV or die
8
+ if [ -f $ENV_PATH ]; then
9
+ source $ENV_PATH 2> /dev/null
10
+ echo $WP_ENV
11
+ else
12
+ echo "WP_ENV not defined yet."
13
+ exit 1
14
+ fi
15
+
16
+ echo "wp_env.sh: provisioning ends"
@@ -0,0 +1,27 @@
1
+ #!/bin/sh
2
+
3
+ echo "wpcli.sh: provisioning starts"
4
+
5
+ # check prereq
6
+ if ! which php > /dev/null 2>&1; then
7
+ echo "wpcli.sh: php not installed :/" 1>&2
8
+ exit 1
9
+ fi
10
+
11
+ # wp-cli
12
+ if ! which wp > /dev/null 2>&1; then
13
+ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
14
+ sudo chmod +x wp-cli.phar
15
+ sudo mv wp-cli.phar /usr/local/bin/wp
16
+ sudo chown root: /usr/local/bin/composer
17
+ fi
18
+
19
+ if ! which wp > /dev/null 2>&1; then
20
+ echo "wpcli.sh: wp-cli failed to install :/" 1>&2
21
+ exit 1
22
+ fi
23
+
24
+ echo "-+-+-+- software versions:"
25
+ wp --version --allow-root
26
+
27
+ echo "wpcli.sh: provisioning ends"
@@ -0,0 +1,151 @@
1
+ # This is the main Apache server configuration file. It contains the
2
+ # configuration directives that give the server its instructions.
3
+ # See http://httpd.apache.org/docs/2.4/ for detailed information about
4
+ # the directives and /usr/share/doc/apache2/README.Debian about Debian specific
5
+ # hints.
6
+
7
+ # Global configuration
8
+ #
9
+
10
+ #
11
+ # The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
12
+ #
13
+ Mutex file:${APACHE_LOCK_DIR} default
14
+
15
+ #
16
+ # PidFile: The file in which the server should record its process
17
+ # identification number when it starts.
18
+ # This needs to be set in /etc/apache2/envvars
19
+ #
20
+ PidFile ${APACHE_PID_FILE}
21
+
22
+ #
23
+ # Timeout: The number of seconds before receives and sends time out.
24
+ #
25
+ Timeout 300
26
+
27
+ #
28
+ # KeepAlive: Whether or not to allow persistent connections (more than
29
+ # one request per connection). Set to "Off" to deactivate.
30
+ #
31
+ KeepAlive On
32
+
33
+ #
34
+ # MaxKeepAliveRequests: The maximum number of requests to allow
35
+ # during a persistent connection. Set to 0 to allow an unlimited amount.
36
+ # We recommend you leave this number high, for maximum performance.
37
+ #
38
+ MaxKeepAliveRequests 100
39
+
40
+ #
41
+ # KeepAliveTimeout: Number of seconds to wait for the next request from the
42
+ # same client on the same connection.
43
+ #
44
+ KeepAliveTimeout 5
45
+
46
+
47
+ # These need to be set in /etc/apache2/envvars
48
+ User ${APACHE_RUN_USER}
49
+ Group ${APACHE_RUN_GROUP}
50
+
51
+ #
52
+ # HostnameLookups: Log the names of clients or just their IP addresses
53
+ # e.g., www.apache.org (on) or 204.62.129.132 (off).
54
+ # The default is off because it'd be overall better for the net if people
55
+ # had to knowingly turn this feature on, since enabling it means that
56
+ # each client request will result in AT LEAST one lookup request to the
57
+ # nameserver.
58
+ #
59
+ HostnameLookups Off
60
+
61
+ # ErrorLog: The location of the error log file.
62
+ # If you do not specify an ErrorLog directive within a <VirtualHost>
63
+ # container, error messages relating to that virtual host will be
64
+ # logged here. If you *do* define an error logfile for a <VirtualHost>
65
+ # container, that host's errors will be logged there and not here.
66
+ #
67
+ ErrorLog ${APACHE_LOG_DIR}/error.log
68
+
69
+ #
70
+ # LogLevel: Control the severity of messages logged to the error_log.
71
+ # Available values: trace8, ..., trace1, debug, info, notice, warn,
72
+ # error, crit, alert, emerg.
73
+ # It is also possible to configure the log level for particular modules, e.g.
74
+ # "LogLevel info ssl:warn"
75
+ #
76
+ LogLevel warn
77
+
78
+ # Include module configuration:
79
+ IncludeOptional mods-enabled/*.load
80
+ IncludeOptional mods-enabled/*.conf
81
+
82
+ # Include list of ports to listen on
83
+ Include ports.conf
84
+
85
+
86
+ # Sets the default security model of the Apache2 HTTPD server. It does
87
+ # not allow access to the root filesystem outside of /usr/share and /var/www.
88
+ # The former is used by web applications packaged in Debian,
89
+ # the latter may be used for local directories served by the web server. If
90
+ # your system is serving content from a sub-directory in /srv you must allow
91
+ # access here, or in any related virtual host.
92
+ <Directory />
93
+ Options FollowSymLinks
94
+ AllowOverride None
95
+ Require all denied
96
+ </Directory>
97
+
98
+ <Directory /usr/share>
99
+ AllowOverride None
100
+ Require all granted
101
+ </Directory>
102
+
103
+ <Directory /var/www/web>
104
+ Options Indexes FollowSymLinks
105
+ AllowOverride All
106
+ Require all granted
107
+ </Directory>
108
+
109
+ # AccessFileName: The name of the file to look for in each directory
110
+ # for additional configuration directives. See also the AllowOverride
111
+ # directive.
112
+ #
113
+ AccessFileName .htaccess
114
+
115
+ #
116
+ # The following lines prevent .htaccess and .htpasswd files from being
117
+ # viewed by Web clients.
118
+ #
119
+ <FilesMatch "^\.ht">
120
+ Require all denied
121
+ </FilesMatch>
122
+
123
+
124
+ #
125
+ # The following directives define some format nicknames for use with
126
+ # a CustomLog directive.
127
+ #
128
+ # These deviate from the Common Log Format definitions in that they use %O
129
+ # (the actual bytes sent including headers) instead of %b (the size of the
130
+ # requested file), because the latter makes it impossible to detect partial
131
+ # requests.
132
+ #
133
+ # Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
134
+ # Use mod_remoteip instead.
135
+ #
136
+ LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
137
+ LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
138
+ LogFormat "%h %l %u %t \"%r\" %>s %O" common
139
+ LogFormat "%{Referer}i -> %U" referer
140
+ LogFormat "%{User-agent}i" agent
141
+
142
+ # Include of directories ignores editors' and dpkg's backup files,
143
+ # see README.Debian for details.
144
+
145
+ # Include generic snippets of statements
146
+ IncludeOptional conf-enabled/*.conf
147
+
148
+ # Include the virtual host configurations:
149
+ IncludeOptional sites-enabled/*.conf
150
+
151
+ # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
@@ -0,0 +1,8 @@
1
+
2
+ <VirtualHost _default_:80>
3
+ DocumentRoot /var/www/web
4
+ ErrorLog ${APACHE_LOG_DIR}/error.log
5
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
6
+ </VirtualHost>
7
+
8
+ # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
@@ -0,0 +1,16 @@
1
+
2
+ <VirtualHost _default_:443>
3
+ DocumentRoot /var/www/web
4
+ ErrorLog ${APACHE_LOG_DIR}/https_error.log
5
+ CustomLog ${APACHE_LOG_DIR}/https_access.log combined
6
+
7
+ ServerName devagency.co
8
+
9
+ SSLEngine on
10
+ SSLProtocol all
11
+ SSLCertificateFile /etc/apache2/ssl/public.crt
12
+ SSLCertificateKeyFile /etc/apache2/ssl/private.key
13
+ SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt
14
+ </VirtualHost>
15
+
16
+ # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
@@ -0,0 +1,17 @@
1
+
2
+ <VirtualHost _default_:443>
3
+ DocumentRoot /var/www/web
4
+ ErrorLog ${APACHE_LOG_DIR}/error.log
5
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
6
+
7
+ RewriteEngine on
8
+ RewriteCond %{HTTPS} == on
9
+ RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
10
+ </VirtualHost>
11
+
12
+
13
+ <VirtualHost _default_:80>
14
+ RedirectMatch 301 "http://%{HTTP_HOST}%{REQUEST_URI}" [L,R=301]
15
+ </VirtualHost>
16
+
17
+ # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
@@ -0,0 +1,18 @@
1
+
2
+ <VirtualHost _default_:80>
3
+ DocumentRoot /var/www/web
4
+ ErrorLog ${APACHE_LOG_DIR}/error.log
5
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
6
+
7
+ ServerName devagency.co
8
+
9
+ RewriteEngine on
10
+ RewriteCond %{HTTPS} !=on
11
+ RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
12
+ </VirtualHost>
13
+
14
+ <VirtualHost _default_:80>
15
+ Redirect "/" "https://%{HTTP_HOST}%{REQUEST_URI}"
16
+ </VirtualHost>
17
+
18
+ # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
@@ -0,0 +1,32 @@
1
+ [push]
2
+ default = current
3
+ [alias]
4
+ co = checkout
5
+ ci = commit
6
+ st = status
7
+ b = branch
8
+ hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
9
+ type = cat-file -t
10
+ dump = cat-file -p
11
+ [color]
12
+ ui = true
13
+ branch = auto
14
+ diff = auto
15
+ status = auto
16
+ interactive = auto
17
+ [color "branch"]
18
+ current = yellow reverse
19
+ local = yellow
20
+ remote = green
21
+ [color "diff"]
22
+ meta = yellow bold
23
+ frag = magenta bold
24
+ old = red
25
+ new = cyan
26
+ [color "status"]
27
+ added = yellow
28
+ changed = green
29
+ untracked = cyan
30
+ [filter "media"]
31
+ clean = git-media-clean %f
32
+ smudge = git-media-smudge %f
@@ -0,0 +1,14 @@
1
+ "/var/www/myserver/releases/current/logs/myserver.out"
2
+ "/var/www/myserver/releases/current/logs/upstart"
3
+ "/var/www/myserver/releases/current/logs/myserver.err" {
4
+ daily
5
+ create 777 www-data www-data
6
+ rotate 7
7
+ compress
8
+ postrotate
9
+ reload myserver >/dev/null 2>&1 || true
10
+ endscript
11
+ }
12
+
13
+
14
+ cp this /etc/logrotate.d/pressvarrs
@@ -0,0 +1,56 @@
1
+ user www-data;
2
+ worker_processes 4;
3
+ pid /var/run/nginx.pid;
4
+ events {
5
+ worker_connections 768;
6
+ # multi_accept on;
7
+ }
8
+ http {
9
+ ##
10
+ # Basic Settings
11
+ ##
12
+ sendfile on;
13
+ tcp_nopush on;
14
+ tcp_nodelay on;
15
+ keepalive_timeout 65;
16
+ types_hash_max_size 2048;
17
+ # server_tokens off;
18
+ # server_names_hash_bucket_size 64;
19
+ # server_name_in_redirect off;
20
+ include /etc/nginx/mime.types;
21
+ default_type application/octet-stream;
22
+ ##
23
+ # Logging Settings
24
+ ##
25
+ access_log /var/log/nginx/access.log;
26
+ error_log /var/log/nginx/error.log;
27
+ ##
28
+ # Gzip Settings
29
+ ##
30
+ gzip on;
31
+ gzip_disable "msie6";
32
+ # gzip_vary on;
33
+ # gzip_proxied any;
34
+ # gzip_comp_level 6;
35
+ # gzip_buffers 16 8k;
36
+ # gzip_http_version 1.1;
37
+ # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
38
+ ##
39
+ # nginx-naxsi config
40
+ ##
41
+ # Uncomment it if you installed nginx-naxsi
42
+ ##
43
+ #include /etc/nginx/naxsi_core.rules;
44
+ ##
45
+ # nginx-passenger config
46
+ ##
47
+ # Uncomment it if you installed nginx-passenger
48
+ ##
49
+ #passenger_root /usr;
50
+ #passenger_ruby /usr/bin/ruby;
51
+ ##
52
+ # Virtual Host Configs
53
+ ##
54
+ include /etc/nginx/conf.d/*.conf;
55
+ include /etc/nginx/sites-enabled/*;
56
+ }
@@ -0,0 +1,45 @@
1
+ server {
2
+ listen 80 default_server;
3
+ listen [::]:80 default_server ipv6only=on;
4
+ charset utf-8;
5
+ <% if ssl? %>
6
+
7
+ listen 443 ssl;
8
+ ssl_certificate /etc/nginx/ssl/<% host %>.crt;
9
+ ssl_certificate_key /etc/nginx/ssl/<% host %>.key;
10
+
11
+ <% end %>
12
+ root <%= path %>;
13
+ index index.html index.php;
14
+ <% if host? %>
15
+
16
+ server_name <% host %>;
17
+
18
+ <% end %>
19
+ location / {
20
+ try_files \$uri \$uri/ /index.php?\$query_string;
21
+ }
22
+
23
+ location = /favicon.ico { access_log off; log_not_found off; }
24
+ location = /robots.txt { access_log off; log_not_found off; }
25
+
26
+ access_log off;
27
+ error_log /var/log/nginx/<% host %>-error.log error;
28
+ sendfile off;
29
+
30
+ location ~ \.php\$ {
31
+ try_files \$uri /index.php =404;
32
+
33
+ fastcgi_split_path_info ^(.+\.php)(/.+)\$;
34
+ fastcgi_pass unix:/var/run/php5-fpm.sock;
35
+ fastcgi_index index.php;
36
+ include fastcgi_params;
37
+ fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
38
+ fastcgi_intercept_errors off;
39
+ fastcgi_buffer_size 16k;
40
+ fastcgi_buffers 4 16k;
41
+ fastcgi_connect_timeout 300;
42
+ fastcgi_send_timeout 300;
43
+ fastcgi_read_timeout 300;
44
+ }
45
+ }
@@ -0,0 +1,3 @@
1
+ proxy_set_header Host $host;
2
+ proxy_set_header X-Real-IP $remote_addr;
3
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -0,0 +1,6 @@
1
+ # Added for xdebug
2
+ zend_extension=/usr/lib/php5/20121212/xdebug.so
3
+ xdebug.remote_enable=1
4
+ xdebug.remote_autostart=1
5
+ xdebug.remote_connect_back=1
6
+ xdebug.scream=1
@@ -0,0 +1,423 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+
4
+ @template_path = File.expand_path('../../templates', __FILE__)
5
+ @scripts_path = File.expand_path('../../scripts', __FILE__)
6
+ @local_template_path = '/tmp/yarrs-and-yamls-templates'
7
+ @temp_path = '/etc/profile.d/vagrant.sh'
8
+ @profile = 'nginx'
9
+
10
+ def yarrs(yamlfile, vagrant_config)
11
+ raise 'Missing required parameters, try: yarrs_and_yamls(\'Yarrs.yaml\', config)' if ! vagrant_config
12
+
13
+ # load yaml config from file provided in Vagrantfile
14
+ config = get_config_from_file(yamlfile)
15
+
16
+ # convert single node to multi-node data structure
17
+ config = { "nodes" => [config] } unless config.include?('nodes')
18
+
19
+ # format nodes into instances
20
+ instances = prepare(config)
21
+
22
+ # loop through each instance and apply settings
23
+ instances.each do |hostname, settings|
24
+
25
+ vagrant_config.vm.define hostname do |node|
26
+
27
+ apply_vagrant_settings(node, settings)
28
+ apply_vagrant_ssh_settings(node, settings)
29
+ apply_vagrant_shell_provisioning(node, settings)
30
+ apply_vagrant_shared_folders(node, settings)
31
+ apply_aws_provider(node, settings)
32
+ apply_digitalocean_providier(node, settings)
33
+ apply_local_scripts(node, settings)
34
+ apply_vagrant_hostupdater(node, settings)
35
+
36
+ end
37
+
38
+ yield hostname, settings if block_given?
39
+ end
40
+
41
+ instances
42
+ end
43
+
44
+ def apply_vagrant_hostupdater(node, settings)
45
+ if defined? VagrantPlugins::HostsUpdater && settings["hostname"] && settings["ip"]
46
+ node.hostsupdater.aliases = get_config_part('sites', settings)
47
+ end
48
+ end
49
+
50
+ def apply_vagrant_settings(node, settings)
51
+ node.vm.box = settings["box"]
52
+ node.vm.box_url = settings["box_url"]
53
+ node.vm.box_check_update = settings["box_check_update"]
54
+ node.vm.boot_timeout = settings["boot_timeout"]
55
+ node.vm.graceful_halt_timeout = settings["graceful_halt_timeout"]
56
+ node.vm.guest = settings["guest"]
57
+ node.vm.post_up_message = settings["post_up_message"]
58
+ node.vm.usable_port_range = settings["usable_port_range"]
59
+
60
+ node.vm.provider :virtualbox do |virtualbox, override|
61
+ virtualbox.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
62
+ virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
63
+ virtualbox.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
64
+ end
65
+
66
+ node.vm.provider :virtualbox do |virtualbox, override|
67
+ virtualbox.gui = true if settings["gui"]
68
+ virtualbox.cpus = settings["cpus"] if settings["cpus"]
69
+ virtualbox.memory = settings["memory"] if settings["memory"]
70
+ end
71
+
72
+ ["vmware_fusion", "vmware_workstation"].each do |vmware|
73
+ node.vm.provider vmware do |vmware, override|
74
+ vmware.vmx["displayName"] = settings["hostname"]
75
+ override.vm.node_url = "http://files.vagrantup.com/precise64_vmware.node"
76
+ vmware.gui = true if settings["gui"]
77
+ vmware.vmx["numvcpus"] = settings["cpus"] if settings["cpus"]
78
+ vmware.vmx["memsize"] = settings["cpus"] if settings["memory"]
79
+ end
80
+ end
81
+
82
+ node.vm.network "private_network", ip: settings["ip"], :netmask => "255.255.255.0" if settings["ip"]
83
+
84
+ if settings["ports"]
85
+ settings["ports"].each do |args|
86
+ args = Hash[args.map{ |key, value| [key.to_sym, value] }]
87
+ node.vm.network "forwarded_port", args
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ def apply_vagrant_ssh_settings(node, settings)
94
+ node.ssh.username = settings["ssh_username"] if settings["ssh_username"]
95
+ node.ssh.password = settings["ssh_password"] if settings["ssh_password"]
96
+ node.ssh.host = settings["ssh_host"] if settings["ssh_host"]
97
+ node.ssh.port = settings["ssh_port"] if settings["ssh_port"]
98
+ node.ssh.guest_port = settings["ssh_guest_port"] if settings["ssh_guest_port"]
99
+ node.ssh.private_key_path = settings["ssh_private_key_path"] if settings["ssh_private_key_path"]
100
+ node.ssh.forward_agent = settings["ssh_forward_agent"] if settings["ssh_forward_agent"]
101
+ node.ssh.forward_x11 = settings["ssh_forward_x11"] if settings["ssh_forward_x11"]
102
+ node.ssh.insert_key = settings["ssh_insert_key"] if settings["ssh_insert_key"]
103
+ node.ssh.proxy_command = settings["ssh_proxy_command"] if settings["ssh_proxy_command"]
104
+ node.ssh.pty = settings["ssh_pty"] if settings["ssh_pty"]
105
+ node.ssh.shell = settings["ssh_shell"] if settings["ssh_shell"]
106
+
107
+ # Configure The Public Key For SSH Access
108
+ if settings["authorize"]
109
+ config.vm.provision "shell" do |s|
110
+ s.inline = "echo $1 | grep -xq \"$1\" /home/vagrant/.ssh/authorized_keys || echo $1 | tee -a /home/vagrant/.ssh/authorized_keys"
111
+ s.args = [File.read(File.expand_path(settings["authorize"]))]
112
+ end
113
+ end
114
+
115
+ # Copy The SSH Private Keys To The Box
116
+ if settings["keys"]
117
+ settings["keys"].each do |key|
118
+ config.vm.provision "shell" do |s|
119
+ s.privileged = false
120
+ s.inline = "echo \"$1\" > /home/vagrant/.ssh/$2 && chmod 600 /home/vagrant/.ssh/$2"
121
+ s.args = [File.read(File.expand_path(key)), key.split('/').last]
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ def apply_vagrant_shell_provisioning(node, settings)
128
+ return unless settings["provision"]
129
+
130
+ settings["provision"].each do |script|
131
+ node.vm.provision "shell" do |s|
132
+ s.inline = script["inline"] if script["inline"]
133
+ s.path = script["path"] if script["path"]
134
+ s.args = script["args"] if script["args"]
135
+ s.privileged = script["privileged"] if script["privileged"]
136
+ s.binary = script["binary"] if script["binary"]
137
+ s.upload_path = script["upload_path"] if script["upload_path"]
138
+ s.keep_color = script["keep_color"] if script["keep_color"]
139
+ s.powershell_args = script["powershell_args"] if script["powershell_args"]
140
+ end
141
+ end
142
+ end
143
+
144
+ def apply_vagrant_shared_folders(node, settings)
145
+ return unless settings["synced_folders"]
146
+
147
+ settings["synced_folders"].each do |item|
148
+ next unless ( item.include?("host") or item.include?("guest") )
149
+ args = item.dup
150
+ args.delete('host')
151
+ args.delete('guest')
152
+ args = Hash[args.map{ |key, value| [key.to_sym, value] }]
153
+ node.vm.synced_folder item["host"], item["guest"], args
154
+ end
155
+ end
156
+
157
+ def apply_aws_provider(node, settings)
158
+ return unless settings["aws"]
159
+ node.vm.provider :aws do |aws, override|
160
+ override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
161
+
162
+ # Required parameters
163
+ aws.ami = settings["aws"]["ami"] if settings["aws"]["ami"]
164
+ aws.instance_type = settings["aws"]["instance_type"] if settings["aws"]["instance_type"]
165
+ aws.keypair_name = settings["aws"]["keypair_name"] if settings["aws"]["keypair_name"]
166
+ override.ssh.username = settings["aws"]["username"] if settings["aws"]["username"]
167
+ override.ssh.private_key_path = settings["aws"]["private_key_path"] if settings["aws"]["private_key_path"]
168
+
169
+ # Alternative approach: add keys into your .bashrc or .zshrc profile
170
+ # export AWS_SECRET_KEY=secret_key
171
+ # export AWS_ACCESS_KEY=secret_key
172
+ aws.access_key_id = settings["aws"]["access_key_id"] || ENV["AWS_ACCESS_KEY"]
173
+ aws.secret_access_key = settings["aws"]["secret_access_key"] || ENV["AWS_SECRET_KEY"]
174
+ aws.session_token = settings["aws"]["session_token"] || ENV["AWS_SESSION_TOKEN"]
175
+
176
+ # optional settings
177
+ aws.region = settings["aws"]["region"] if settings["aws"]["region"]
178
+ aws.availability_zone = settings["aws"]["availability_zone"] if settings["aws"]["availability_zone"]
179
+ aws.security_groups = settings["aws"]["security_groups"] if settings["aws"]["security_groups"]
180
+ aws.tags = settings["aws"]["tags"] if settings["aws"]["tags"]
181
+ aws.subnet_id = settings["aws"]["subnet_id"] if settings["aws"]["subnet_id"]
182
+ aws.availability_zone = settings["aws"]["availability_zone"] if settings["aws"]["availability_zone"]
183
+ aws.elastic_ip = settings["aws"]["elastic_ip"] if settings["aws"]["elastic_ip"]
184
+ aws.use_iam_profile = settings["aws"]["use_iam_profile"] if settings["aws"]["use_iam_profile"]
185
+ aws.private_ip_address = settings["aws"]["private_ip_address"] if settings["aws"]["private_ip_address"]
186
+ aws.user_data = settings["aws"]["user_data"] if settings["aws"]["user_data"]
187
+ aws.iam_instance_profile_name = settings["aws"]["iam_instance_profile_name"] if settings["aws"]["iam_instance_profile_name"]
188
+ aws.iam_instance_profile_arn = settings["aws"]["iam_instance_profile_arn"] if settings["aws"]["iam_instance_profile_arn"]
189
+ aws.instance_package_timeout = settings["aws"]["instance_package_timeout"] if settings["aws"]["instance_package_timeout"]
190
+ aws.instance_ready_timeout = settings["aws"]["instance_ready_timeout"] if settings["aws"]["instance_ready_timeout"]
191
+ end
192
+ end
193
+
194
+ def apply_digitalocean_providier(node, settings)
195
+ return unless settings["digital_ocean"]
196
+
197
+ node.vm.provider :digital_ocean do |digital_ocean, override|
198
+ override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"
199
+
200
+ digital_ocean.token = settings["digital_ocean"].include?("token") ? settings["digital_ocean"]["token"] : ENV["DIGITAL_OCEAN_TOKEN"]
201
+
202
+ # Optional
203
+ override.ssh.private_key_path = settings["digital_ocean"]["private_key_path"]
204
+ override.ssh.username = settings["digital_ocean"]["username"] if settings["digital_ocean"]["username"]
205
+ digital_ocean.ssh_key_name = settings["digital_ocean"].include?("ssh_key_name") ? settings["digital_ocean"]["ssh_key_name"] : 'Vagrant'
206
+ digital_ocean.image = settings["digital_ocean"].include?("image") ? settings["digital_ocean"]["image"] : "ubuntu-14-04-x64"
207
+ digital_ocean.region = settings["digital_ocean"].include?("region") ? settings["digital_ocean"]["region"] : "nyc2"
208
+ digital_ocean.size = settings["digital_ocean"].include?("size") ? settings["digital_ocean"]["size"] : "512mb"
209
+ digital_ocean.ipv6 = settings["digital_ocean"].include?("ipv6") ? settings["digital_ocean"]["ipv6"] : false
210
+ digital_ocean.private_networking = settings["digital_ocean"].include?("private_networking") ? settings["digital_ocean"]["private_networking"] : false
211
+ digital_ocean.backups_enabled = settings["digital_ocean"].include?("backups_enabled") ? settings["digital_ocean"]["backups_enabled"] : false
212
+ digital_ocean.setup = settings["digital_ocean"].include?("setup") ? settings["digital_ocean"]["setup"] : true
213
+ end
214
+ end
215
+
216
+ def get_config_from_file(configfile)
217
+
218
+ config = {}
219
+
220
+ return config unless configfile.index('.yaml')
221
+
222
+ configfile = File.expand_path(configfile)
223
+ localfile = File.expand_path(configfile.dup)
224
+ localfile = localfile.insert(configfile.index('.yaml'), '.local')
225
+
226
+ if File.exists? localfile
227
+ config = YAML.load_file(localfile)
228
+ elsif File.exists? configfile
229
+ config = YAML.load_file(configfile)
230
+ end
231
+
232
+ config
233
+ end
234
+
235
+ def prepare(v=nil)
236
+ boxes = {}
237
+
238
+ return boxes if v["nodes"].empty?
239
+
240
+ v["nodes"].collect do |box|
241
+ next unless box["hostname"]
242
+ boxes[box["hostname"]] = box
243
+ end
244
+
245
+ boxes
246
+ end
247
+
248
+ def apply_local_scripts(node, settings)
249
+ node.vm.synced_folder @template_path, @local_template_path
250
+
251
+ node.vm.provision "shell", inline: "touch #{@temp_path} && chmod +x #{@temp_path}"
252
+
253
+ if settings["timezone"]
254
+ node.vm.provision "shell" do |s|
255
+ s.path = "#{@scripts_path}/tz.sh"
256
+ s.args = [settings["timezone"]]
257
+ end
258
+ end
259
+
260
+ if settings["update"]
261
+ node.vm.provision "shell", path: "#{@scripts_path}/base.sh"
262
+ end
263
+
264
+ # if settings["rvm"]
265
+ # node.vm.provision "shell", path: "#{@scripts_path}/rvm.sh"
266
+ # end
267
+
268
+ if settings["git"]
269
+ if File.exists? settings["git"].to_s
270
+ gitconfig = settings["git"]
271
+ else
272
+ gitconfig = "#{@local_template_path}/gitconfig.conf"
273
+ end
274
+
275
+ node.vm.provision "shell" do |s|
276
+ s.path = "#{@scripts_path}/git.sh"
277
+ s.args = [gitconfig]
278
+ end
279
+ end
280
+
281
+ if settings["mysql_root_password"]
282
+ node.vm.provision "shell", inline: "echo export MYSQL_ROOT_PASSWORD=#{settings["mysql_root_password"]} >> #{@temp_path}"
283
+ end
284
+
285
+ if settings["databases"]
286
+ node.vm.provision "shell", path: "#{@scripts_path}/mysql.sh"
287
+ node.vm.provision "shell" do |s|
288
+ s.path = "#{@scripts_path}/mysql-create-databases.sh"
289
+ s.args = settings["databases"]
290
+ end
291
+ end
292
+
293
+ if settings["variables"]
294
+ settings["variables"].each do |pair|
295
+ node.vm.provision "shell" do |s|
296
+ s.path = "#{@scripts_path}/export_vars.sh"
297
+ s.args = [ pair["key"], pair["value"] ]
298
+ end
299
+ end
300
+ end
301
+
302
+ if settings["nodejs"]
303
+ node.vm.provision "shell", path: "#{@scripts_path}/nodejs.sh"
304
+
305
+ if settings["nodejs"].kind_of?(Hash)
306
+ settings["nodejs"].each do |key, value|
307
+ if "global" == key
308
+ node.vm.provision "shell" do |s|
309
+ s.path = "#{@scripts_path}/install-nodejs-modules.sh"
310
+ s.args = [value]
311
+ end
312
+ end
313
+ end
314
+ end
315
+ end
316
+
317
+ @profile = settings["webserver"] if settings["webserver"]
318
+ @profile = settings["profile"] if settings["profile"]
319
+
320
+ if File.exists?("#{@scripts_path}/#{@profile}.sh")
321
+ node.vm.provision "shell", path: "#{@scripts_path}/#{@profile}.sh"
322
+ end
323
+
324
+ if settings["php"]
325
+ node.vm.provision "shell", path: "#{@scripts_path}/php.sh"
326
+ node.vm.provision "shell" do |s|
327
+ s.path = "#{@scripts_path}/php_configure.sh"
328
+ s.args = ["master"]
329
+ end
330
+
331
+ if settings["php"].include?('xdebug')
332
+ xdebugconfig = "#{@local_template_path}/xdebug.ini"
333
+
334
+ node.vm.provision "shell" do |s|
335
+ s.path = "#{@scripts_path}/php_xdebug.sh"
336
+ s.args = [xdebugconfig]
337
+ end
338
+ end
339
+
340
+ node.vm.provision "shell", path: "#{@scripts_path}/composer.sh" if settings["php"].include?('composer')
341
+
342
+ node.vm.provision "shell", path: "#{@scripts_path}/wpcli.sh" if settings["php"].include?('wp')
343
+ end
344
+
345
+ if settings["sites"]
346
+ settings["sites"].each do |opts|
347
+ opts = Hash[opts.map{ |key, value| [key.to_sym, value] }]
348
+ @site = create_site(opts)
349
+
350
+ next unless ! @site[:host].empty? && ! @site[:path].empty? && ! @site[:config].empty?
351
+
352
+ backup_file = "#{Dir.pwd}/.#{@profile}-#{@site[:host]}.conf"
353
+ File.open(backup_file, File::RDWR|File::CREAT) do |file|
354
+ file.write(@site[:config].to_s)
355
+ end
356
+
357
+ node.vm.provision "shell" do |s|
358
+ s.name = "nginx_site.sh: #{@site[:host]}, #{@site[:path]}"
359
+ s.path = "#{@scripts_path}/nginx_site.sh"
360
+ s.args = ["#{@site[:host]}", "#{@site[:path]}", "#{@site[:config]}"]
361
+ end
362
+ end
363
+ end
364
+
365
+ node.vm.provision "shell", inline: "rm -rf /etc/profile.d/vagrant.sh"
366
+
367
+ end
368
+
369
+ def get_config_part(key, config)
370
+ result = nil
371
+
372
+ if 'sites' == key && config.include?(key)
373
+ sites = []
374
+
375
+ config["sites"].each do |opts|
376
+ opts = Hash[opts.map{ |key, value| [key.to_sym, value] }]
377
+ site = create_site(opts)
378
+
379
+ next unless ! site[:host].empty? && ! site[:path].empty? && ! site[:config].empty?
380
+
381
+ sites.push(site[:host])
382
+ end
383
+
384
+ result = sites
385
+ end
386
+
387
+ result
388
+ end
389
+
390
+ def create_site(opts)
391
+ site = {
392
+ host: '',
393
+ path: '',
394
+ port: 80,
395
+ ssl: false,
396
+ template: "#{@template_path}/nginx_vhost.erb",
397
+ config: '',
398
+ vhost: '',
399
+ }
400
+
401
+ opts[:host] = opts[:map] || opts[:host]
402
+ opts[:path] = opts[:to] || opts[:path]
403
+
404
+ opts.each do |key, value|
405
+ if !!key.to_s.index('.')
406
+ site[:host] = key
407
+ end
408
+ if !!value.to_s.index('/')
409
+ opts[:path] = value
410
+ end
411
+ end
412
+
413
+ site.each do |key, val|
414
+ if opts[key.to_sym]
415
+ site[key.to_sym] = opts[key.to_sym]
416
+ end
417
+ end
418
+
419
+ site[:config] = ERB.new(File.read(site[:template]))
420
+ .result(OpenStruct.new(site).instance_eval { binding })
421
+
422
+ site
423
+ end