131 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'json'
 | |
| begin
 | |
|   secrets = JSON.parse(File.read('secrets.json'))
 | |
|   puts 'Loading secrets file'
 | |
| rescue
 | |
|   secrets = {}
 | |
|   puts 'Secrets file not found'
 | |
| end
 | |
| 
 | |
| class ::Hash
 | |
|   def deep_merge(second)
 | |
|     second.each do |key, value|
 | |
|       if value.class == Hash and self[key.to_sym]
 | |
|         self[key.to_sym].deep_merge(value)
 | |
|       else
 | |
|         self[key.to_sym] = value
 | |
|       end
 | |
|     end
 | |
|     return self
 | |
|   end
 | |
| end
 | |
| 
 | |
| # -*- mode: ruby -*-
 | |
| # vi: set ft=ruby :
 | |
| 
 | |
| # All Vagrant configuration is done below. The "2" in Vagrant.configure
 | |
| # configures the configuration version (we support older styles for
 | |
| # backwards compatibility). Please don't change it unless you know what
 | |
| # you're doing.
 | |
| Vagrant.configure("2") do |config|
 | |
|   # The most common configuration options are documented and commented below.
 | |
|   # For a complete reference, please see the online documentation at
 | |
|   # https://docs.vagrantup.com.
 | |
| 
 | |
|   # Every Vagrant development environment requires a box. You can search for
 | |
|   # boxes at https://vagrantcloud.com/search.
 | |
|   config.vm.box = "ubuntu/bionic64"
 | |
|   config.vm.synced_folder '.', '/vagrant' # The vagrant dir just stopped automounting
 | |
| 
 | |
|   # Create a forwarded port mapping which allows access to a specific port
 | |
|   # within the machine from a port on the host machine. In the example below,
 | |
|   # accessing "localhost:8080" will access port 80 on the guest machine.
 | |
|   # NOTE: This will enable public access to the opened port
 | |
|   config.vm.network "forwarded_port", guest: 80, host: 8000
 | |
|   config.vm.network "forwarded_port", guest: 443, host: 8443
 | |
|   config.vm.network "forwarded_port", guest: 3000, host: 8300
 | |
| 
 | |
| 
 | |
|   # Provider-specific configuration so you can fine-tune various
 | |
|   # backing providers for Vagrant. These expose provider-specific options.
 | |
|   # Example for VirtualBox:
 | |
|   #
 | |
|   config.vm.provider 'virtualbox' do |vb|
 | |
|     # Customize the amount of memory on the VM:
 | |
|     vb.memory = '1024'
 | |
|     vb.cpus = "2"
 | |
|     # vb.default_nic_type = "virtio"
 | |
|     vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
 | |
|   end
 | |
|   #
 | |
|   # View the documentation for the provider you are using for more
 | |
|   # information on available options.
 | |
| 
 | |
|   # Enable provisioning with a shell script. Additional provisioners such as
 | |
|   # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
 | |
|   # documentation for more information about their specific syntax and use.
 | |
|   config.vm.provision "shell", inline: <<~SHELL
 | |
|     apt-get update
 | |
|     if ! apt list ruby2.6-dev | grep installed; then
 | |
|       apt-add-repository ppa:brightbox/ruby-ng -y
 | |
|       sudo apt-get install -y build-essential resolvconf ruby2.6 ruby2.6-dev gem
 | |
|     fi
 | |
| 
 | |
|     if ! which berks >/dev/null; then
 | |
|       gem install ruby-shadow berkshelf --no-document
 | |
|       # ln -s /opt/chef/embedded/bin/berks /usr/local/bin/berks
 | |
|     fi
 | |
| 
 | |
|     cd /vagrant
 | |
| 
 | |
|     cd /vagrant/ops/cookbooks
 | |
|     rm -rf vendor
 | |
|     rm -rf $HOME/.berksfile
 | |
|     if [ -f ".Berksfile.lock" ]; then
 | |
|       berks update
 | |
|     else 
 | |
|       berks install
 | |
|     fi
 | |
|     berks vendor vendor
 | |
|   SHELL
 | |
| 
 | |
|   config.vm.provision 'chef_solo' do |chef|
 | |
|     chef.version = '14.12.3' # version 14.12.9 fails to run
 | |
|     chef.cookbooks_path = [
 | |
|       'ops/cookbooks/',
 | |
|       'ops/cookbooks/vendor/'
 | |
|     ]
 | |
|     chef.roles_path ='ops/roles'
 | |
|     chef.add_role('common')
 | |
|     chef.json = {
 | |
|       'working-dir': '/vagrant',
 | |
|       'app': {
 | |
|         'name': 't42-proxy',
 | |
|         'run_user': 'root',
 | |
|         'domain': 'proxy.local',
 | |
|       },
 | |
|       'python': {
 | |
|         # 'working-dir': 'django',
 | |
|         'version': '2.7'
 | |
|       },
 | |
|       'nodejs': {
 | |
|         'working-dir': 'nodejs',
 | |
|         'port': '3000',
 | |
|         'install_version': 13,
 | |
|         'exec_file': 'bin/www',
 | |
|         'service': true,
 | |
|       },
 | |
|       'redis':{
 | |
|         'unix': {
 | |
|           'perm': '777'
 | |
|         }
 | |
|       },
 | |
|       'web':{
 | |
|         'admin_email': 'admin2342@example.com',
 | |
|         'do_ssl': true,
 | |
|         't42-proxy': true
 | |
|       },
 | |
|     }.deep_merge(secrets);
 | |
|   end
 | |
| end
 |