Commit aede9435a93d5aaffe51a310cdeb38a496039dfc
1 parent
b02ece51
Exists in
master
and in
90 other branches
centralize IP configuration for development environment
Showing
4 changed files
with
41 additions
and
14 deletions
Show diff stats
Rakefile
| 1 | -if !File.exist?('.ssh_config') | |
| 2 | - sh "vagrant ssh-config > .ssh_config" | |
| 3 | -end | |
| 4 | - | |
| 5 | 1 | require 'chake' |
| 6 | 2 | |
| 7 | 3 | task :test do |
| ... | ... | @@ -11,3 +7,15 @@ task :test do |
| 11 | 7 | end |
| 12 | 8 | |
| 13 | 9 | task :default => :test |
| 10 | + | |
| 11 | +file 'ssh_config.erb' | |
| 12 | +file '.ssh_config' => ['nodes.yaml', 'ssh_config.erb'] do |t| | |
| 13 | + require 'erb' | |
| 14 | + template = ERB.new(File.read('ssh_config.erb')) | |
| 15 | + File.open(t.name, 'w') do |f| | |
| 16 | + f.write(template.result(binding)) | |
| 17 | + end | |
| 18 | + puts 'ERB %s' % t.name | |
| 19 | +end | |
| 20 | + | |
| 21 | +task :bootstrap_common => '.ssh_config' | ... | ... |
Vagrantfile
| 1 | 1 | # -*- mode: ruby -*- |
| 2 | 2 | # vi: set ft=ruby : |
| 3 | 3 | |
| 4 | +require 'yaml' | |
| 5 | + | |
| 4 | 6 | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! |
| 5 | 7 | VAGRANTFILE_API_VERSION = "2" |
| 6 | 8 | |
| ... | ... | @@ -11,20 +13,22 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
| 11 | 13 | config.vm.provision 'shell', path: 'utils/proxy.sh', args: [proxy] |
| 12 | 14 | end |
| 13 | 15 | |
| 16 | + ips = YAML.load_file('nodes.yaml').first[1]['peers'] | |
| 17 | + | |
| 14 | 18 | config.vm.define 'integration' do |integration| |
| 15 | - integration.vm.network 'private_network', ip: '10.1.1.1' | |
| 19 | + integration.vm.network 'private_network', ip: ips['integration'] | |
| 16 | 20 | end |
| 17 | 21 | config.vm.define 'email' do |email| |
| 18 | - email.vm.network 'private_network', ip: '10.1.1.2' | |
| 22 | + email.vm.network 'private_network', ip: ips['email'] | |
| 19 | 23 | end |
| 20 | 24 | config.vm.define 'social' do |social| |
| 21 | - social.vm.network 'private_network', ip: '10.1.1.3' | |
| 25 | + social.vm.network 'private_network', ip: ips['social'] | |
| 22 | 26 | end |
| 23 | 27 | config.vm.define 'database' do |database| |
| 24 | - database.vm.network 'private_network', ip: '10.1.1.4' | |
| 28 | + database.vm.network 'private_network', ip: ips['database'] | |
| 25 | 29 | end |
| 26 | 30 | config.vm.define 'reverseproxy' do |reverseproxy| |
| 27 | - reverseproxy.vm.network 'private_network', ip: '10.1.1.5' | |
| 31 | + reverseproxy.vm.network 'private_network', ip: ips['reverseproxy'] | |
| 28 | 32 | reverseproxy.vm.network 'forwarded_port', guest: 80, host: 8080 |
| 29 | 33 | reverseproxy.vm.network 'forwarded_port', guest: 443, host: 8443 |
| 30 | 34 | end | ... | ... |
nodes.yaml
| ... | ... | @@ -3,11 +3,11 @@ vagrant@integration: |
| 3 | 3 | - role[server] |
| 4 | 4 | - role[integration_server] |
| 5 | 5 | peers: &PEERS |
| 6 | - integration: 10.1.1.1 | |
| 7 | - email: 10.1.1.2 | |
| 8 | - social: 10.1.1.3 | |
| 9 | - database: 10.1.1.4 | |
| 10 | - reverseproxy: 10.1.1.5 | |
| 6 | + integration: 10.10.10.2 | |
| 7 | + email: 10.10.10.3 | |
| 8 | + social: 10.10.10.4 | |
| 9 | + database: 10.10.10.5 | |
| 10 | + reverseproxy: 10.10.10.6 | |
| 11 | 11 | vagrant@email: |
| 12 | 12 | run_list: |
| 13 | 13 | - role[server] | ... | ... |
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +Host * | |
| 2 | + User vagrant | |
| 3 | + UserKnownHostsFile /dev/null | |
| 4 | + StrictHostKeyChecking no | |
| 5 | + PasswordAuthentication no | |
| 6 | + IdentitiesOnly yes | |
| 7 | + LogLevel FATAL | |
| 8 | + | |
| 9 | +<% $nodes.each do |node| %> | |
| 10 | +Host <%= node.hostname %> | |
| 11 | + Hostname <%= node.data['peers'][node.hostname] %> | |
| 12 | + IdentityFile <%= (Dir.glob(".vagrant/machines/#{node.hostname}/*/private_key") + [File.expand_path('~/.vagrant.d/insecure_private_key')]).find { |f| File.exists?(f) }.tap { |f| File.expand_path(f) } %> | |
| 13 | +<% end %> | |
| 14 | + | |
| 15 | +# vim: ft=sshconfig | ... | ... |