vagrant-dns 0.5.0 → 0.6.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50a969b5fa509b2a185b0962b5b13afad83c4254
4
+ data.tar.gz: 9e3c9a15a55c8d3c42283b13650f118b3945deb5
5
+ SHA512:
6
+ metadata.gz: 2ffb83a8cd804bbcf2af794a31756bbd3e6428ea00db3feb5ef0d9dc872fc4c4e3d50063c8e0ab779d4fe2bbcaa30def4a5f7f94ac2e3af7cfae87880335278f
7
+ data.tar.gz: 3d3c4d0c8d0476f6d627f58135003cdf16eafdc6b4435f85e87b9bd408548f565e0586094b3d265825e0fb4242cf3c991aa11f7f92cdacf3fb13a1a92f6893db
data/.gitignore CHANGED
@@ -14,4 +14,5 @@ rdoc
14
14
  spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
+ test/acceptance/artifacts
17
18
  tmp
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # 0.6.0 (unreleased / beta1)
2
+
3
+ This is a intermediate release towards v1.0.0
4
+
5
+ * Using RubyDNS ~> 0.8.4
6
+ * New option to un/install system files using `sudo` (restoring 0.4 behavior). Add `--with-sudo` to `--install`, `--uninstall` or `--purge`. [GH-26]
7
+ * Use new vagrant >= 1.5 development patterns [GH-31]
8
+ * Add acceptance test using vagrant-spec
9
+ * Moved sample `Vagrantfile` into `/testdrive` which also contains a small wrapper script `bin/vagrant` to move "vagrant home" into a sandbox.
10
+
1
11
  # v0.4.1
2
12
 
3
13
  * Fixes an issue with not configured private networks [GH-21], [GH-19]
data/Gemfile CHANGED
@@ -1,11 +1,29 @@
1
1
  source 'https://rubygems.org'
2
+ ruby '2.0.0'
2
3
 
3
- # Specify your gem's dependencies in vagrant-dns.gemspec
4
- gemspec
4
+ ENV['TEST_VAGRANT_VERSION'] ||= '~> v1.6.2'
5
5
 
6
- group :development do
7
- # We depend on Vagrant for development, but we don't add it as a
8
- # gem dependency because we expect to be installed within the
9
- # Vagrant environment itself using `vagrant plugin`.
10
- gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git"
6
+ # Using the :plugins group causes Vagrant to automagially load auto_network
7
+ # during acceptance tests.
8
+ group :plugins do
9
+ gemspec
10
+ end
11
+
12
+ group :test, :development do
13
+ if ENV['TEST_VAGRANT_VERSION'] == 'HEAD'
14
+ gem 'vagrant', :github => 'mitchellh/vagrant', :branch => 'master'
15
+ else
16
+ gem 'vagrant', :github => 'mitchellh/vagrant', :tag => ENV['TEST_VAGRANT_VERSION']
17
+ end
18
+ gem 'rubydns', :github => 'ioquatix/rubydns', :branch => 'master'
19
+ end
20
+
21
+ group :test do
22
+ # Pinned on 05/05/2014. Compatible with Vagrant 1.5.x and 1.6.x.
23
+ gem 'vagrant-spec', :github => 'mitchellh/vagrant-spec', :ref => 'aae28ee'
24
+ gem 'rake'
25
+ end
26
+
27
+ if File.exists? "#{__FILE__}.local"
28
+ eval(File.read("#{__FILE__}.local"), binding)
11
29
  end
data/Rakefile CHANGED
@@ -1,2 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+
4
+ task_dir = File.expand_path("../tasks", __FILE__)
5
+ Dir["#{task_dir}/**/*.rake"].each do |task_file|
6
+ load task_file
7
+ end
@@ -11,7 +11,7 @@ module VagrantDNS
11
11
  def execute
12
12
  options = {}
13
13
  opts = OptionParser.new do |opts|
14
- opts.banner = "Usage: vagrant dns [vm-name] [-i|--install] [-u|--uninstall] [--pruge] [-s|--start] [-S|--stop] [-r|--restart] [-o|--ontop]"
14
+ opts.banner = "Usage: vagrant dns [vm-name] [-i|--install] [-u|--uninstall] [--with-sudo] [--pruge] [-s|--start] [-S|--stop] [-r|--restart] [-o|--ontop]"
15
15
  opts.separator ""
16
16
 
17
17
  opts.on("--install", "-i", "Install DNS config for machine domain") do
@@ -22,8 +22,11 @@ module VagrantDNS
22
22
  options[:uninstall] = true
23
23
  end
24
24
 
25
+ opts.on("--with-sudo", "In conjunction with `--install`, `--uninstall`, `--purge`: Run using `sudo` instead of `osascript`. Useful for automated scripts running as sudoer.") do
26
+ options[:installer_opts] = { exec_style: :sudo }
27
+ end
28
+
25
29
  opts.on("--purge", "Uninstall DNS config and remove DNS configurations of all machines.") do
26
- options[:uninstall] = true
27
30
  options[:purge] = true
28
31
  end
29
32
 
@@ -49,14 +52,9 @@ module VagrantDNS
49
52
 
50
53
  vms = argv unless argv.empty?
51
54
 
52
- if options[:uninstall]
55
+ if options[:uninstall] || options[:purge]
53
56
  manage_service(vms, options.merge(stop: true))
54
57
  manage_installation(vms, options)
55
-
56
- if options[:purge]
57
- require 'fileutils'
58
- FileUtils.rm_r(tmp_path)
59
- end
60
58
  else
61
59
  build_config(vms, options)
62
60
  manage_service(vms, options)
@@ -69,12 +67,15 @@ module VagrantDNS
69
67
 
70
68
  def manage_installation(vms, options)
71
69
  if Vagrant::Util::Platform.darwin?
72
- installer = VagrantDNS::Installers::Mac.new(tmp_path)
70
+ installer_options = options.fetch(:installer_opts, {})
71
+ installer = VagrantDNS::Installers::Mac.new(tmp_path, installer_options)
73
72
 
74
73
  if options[:install]
75
74
  installer.install!
76
75
  elsif options[:uninstall]
77
76
  installer.uninstall!
77
+ elsif options[:purge]
78
+ installer.purge!
78
79
  end
79
80
  else
80
81
  raise 'installing and uninstalling is only supported on Mac OS X at the moment.'
@@ -1,36 +1,66 @@
1
1
  module VagrantDNS
2
2
  module Installers
3
3
  class Mac
4
- attr_accessor :tmp_path, :install_path
4
+ EXEC_STYLES = %i{osa sudo}
5
5
 
6
- def initialize(tmp_path, install_path = "/etc/resolver")
7
- self.tmp_path, self.install_path = tmp_path, install_path
6
+ attr_accessor :tmp_path, :install_path, :exec_style
7
+
8
+ def initialize(tmp_path, options = {})
9
+ self.tmp_path = tmp_path
10
+ self.install_path = options.fetch(:install_path, "/etc/resolver")
11
+ self.exec_style = options.fetch(:exec_style, :osa)
8
12
  end
9
13
 
10
14
  def install!
11
15
  require 'fileutils'
12
16
 
13
- command = "mkdir -p #{install_path}\n"
14
- registered_resolvers.each do |resolver|
15
- command += "ln -sf #{resolver} #{install_path}\n"
17
+ commands = [
18
+ ['mkdir', '-p', install_path]
19
+ ]
20
+
21
+ commands += registered_resolvers.map do |resolver|
22
+ ['ln', '-sf', resolver.shellescape, install_path.shellescape]
16
23
  end
17
- `osascript -e 'do shell script \"#{command}\" with administrator privileges'`
24
+
25
+ exec(*commands)
18
26
  end
19
27
 
20
28
  def uninstall!
21
29
  require 'fileutils'
22
30
 
23
- command = ""
24
- registered_resolvers.each do |r|
31
+ commands = registered_resolvers.map do |r|
25
32
  installed_resolver = File.join(install_path, File.basename(r))
26
- command += "rm -rf #{installed_resolver}\n"
33
+ ['rm', '-rf', installed_resolver]
27
34
  end
28
- `osascript -e 'do shell script \"#{command}\" with administrator privileges'`
35
+
36
+ exec(*commands)
37
+ end
38
+
39
+ def purge!
40
+ require 'fileutils'
41
+ uninstall!
42
+ FileUtils.rm_r(tmp_path)
29
43
  end
30
44
 
31
45
  def registered_resolvers
32
46
  Dir[File.join(tmp_path, "resolver", "*")]
33
47
  end
48
+
49
+ def exec(*commands)
50
+ return if !commands || commands.empty?
51
+
52
+ case exec_style
53
+ when :osa
54
+ cmd_script = commands.map {|line| line.join ' ' }.join($/)
55
+ system 'osascript', '-e', "do shell script \"#{cmd_script}\" with administrator privileges"
56
+ when :sudo
57
+ commands.each do |c|
58
+ system 'sudo', *c
59
+ end
60
+ else
61
+ raise ArgumentError, "Unsupported execution style: #{exec_style}. Use one of #{EXEC_STYLES.map(&:inspect).join(' ')}"
62
+ end
63
+ end
34
64
  end
35
65
  end
36
66
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module Dns
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0.beta1"
4
4
  end
5
5
  end
@@ -0,0 +1,25 @@
1
+ namespace :acceptance do
2
+ ARTIFACT_DIR = File.join('test', 'acceptance', 'artifacts')
3
+ TEST_BOXES = {
4
+ :virtualbox => 'http://files.vagrantup.com/precise32.box'
5
+ }
6
+
7
+ directory ARTIFACT_DIR
8
+ TEST_BOXES.each do |(provider, box_url)|
9
+ file File.join(ARTIFACT_DIR, "#{provider}.box") => ARTIFACT_DIR do |path|
10
+ puts 'Downloading: ' + box_url
11
+ Kernel.system 'curl', '-L', '-o', path.to_s, box_url
12
+ end
13
+ end
14
+
15
+ desc 'downloads test boxes and other artifacts'
16
+ task :setup => TEST_BOXES.map { |(provider, box_url)| File.join(ARTIFACT_DIR, "#{provider}.box") }
17
+
18
+ desc 'runs acceptance tests'
19
+ task :run => :setup do
20
+ command = 'vagrant-spec test'
21
+ puts command
22
+ puts
23
+ exec(command)
24
+ end
25
+ end
@@ -0,0 +1,72 @@
1
+ shared_examples 'provider/dns' do |provider, options|
2
+
3
+ if !File.file?(options[:box])
4
+ raise ArgumentError,
5
+ "A box file #{options[:box]} must be downloaded for provider: #{provider}. Try: rake acceptance:setup"
6
+ end
7
+
8
+ include_context 'acceptance'
9
+
10
+ let(:box_ip) { '10.10.10.101' }
11
+ let(:tld) { 'spec' }
12
+ let(:name) { 'single.testbox.spec' }
13
+
14
+ before do
15
+ ENV['VAGRANT_DEFAULT_PROVIDER'] = provider
16
+ environment.skeleton('dns')
17
+ end
18
+
19
+ describe 'installation' do
20
+ it 'creates and removes resolver link' do
21
+ assert_execute('vagrant', 'dns', '--install', '--with-sudo')
22
+ assert_execute('ls', "/etc/resolver/#{tld}")
23
+
24
+ assert_execute('vagrant', 'dns', '--uninstall', '--with-sudo')
25
+ result = execute('ls', "/etc/resolver/#{tld}")
26
+ expect(result).to_not exit_with(0)
27
+ end
28
+ end
29
+
30
+ describe 'running' do
31
+ before do
32
+ assert_execute('vagrant', 'box', 'add', 'box', options[:box])
33
+ assert_execute('vagrant', 'dns', '--install', '--with-sudo')
34
+ assert_execute('vagrant', 'up', "--provider=#{provider}")
35
+ end
36
+
37
+ after do
38
+ # Ensure any VMs that survived tests are cleaned up.
39
+ assert_execute('vagrant', 'destroy', '--force', log: false)
40
+ assert_execute('vagrant', 'dns', '--uninstall', '--with-sudo')
41
+ end
42
+
43
+ it 'auto-starts the DNS daemon' do
44
+ assert_execute('pgrep', '-lf', 'vagrant-dns')
45
+ end
46
+
47
+ it 'registered as a resolver' do
48
+ expected_output = <<-TXT
49
+ domain : #{tld}
50
+ nameserver[0] : 127.0.0.1
51
+ port : 5333
52
+ flags : Request A records, Request AAAA records
53
+ reach : Reachable,Local Address
54
+ TXT
55
+
56
+ result = assert_execute('scutil', '--dns')
57
+ expect(result.stdout).to include(expected_output)
58
+ end
59
+
60
+ it 'responds to host-names' do
61
+ result = assert_execute('dscacheutil', '-q', 'host', '-a', 'name', "#{name}")
62
+ expect(result.stdout).to include("ip_address: #{box_ip}")
63
+
64
+ result = assert_execute('dscacheutil', '-q', 'host', '-a', 'name', "www.#{name}")
65
+ expect(result.stdout).to include("ip_address: #{box_ip}")
66
+
67
+ result = execute('dscacheutil', '-q', 'host', '-a', 'name', "notthere.#{tld}")
68
+ expect(result.stdout).to_not include("ip_address: #{box_ip}")
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,12 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure("2") do |config|
5
+ config.vm.box = "box"
6
+ config.vm.network :private_network, ip: '10.10.10.101'
7
+
8
+ config.dns.tld = 'spec'
9
+ config.dns.patterns = /^.*single.testbox.spec$/
10
+
11
+ VagrantDNS::Config.listen = [[:udp, "0.0.0.0", 5333]]
12
+ end
@@ -1,21 +1,21 @@
1
1
  # -*- mode: ruby -*-
2
2
  # vi: set ft=ruby :
3
3
 
4
-
5
4
  Vagrant.configure("2") do |config|
6
5
  # All Vagrant configuration is done here. The most common configuration
7
6
  # options are documented and commented below. For a complete reference,
8
7
  # please see the online documentation at vagrantup.com.
9
8
 
10
9
  # Every Vagrant virtual environment requires a box to build off of.
11
- config.vm.box = "base"
10
+ config.vm.box = 'precise32'
11
+ config.vm.box_url = 'http://files.vagrantup.com/precise32.box'
12
12
 
13
- config.dns.tld = "dev"
14
- config.dns.patterns = /^.*machine.dev$/
13
+ config.dns.tld = "test"
14
+ config.dns.patterns = /^.*machine.test$/
15
15
 
16
16
  config.vm.hostname = "machine"
17
17
  config.vm.network :private_network, ip: "33.33.33.60"
18
18
 
19
-
19
+
20
20
  VagrantDNS::Config.listen = [[:udp, "0.0.0.0", 5300]]
21
21
  end
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ TESTDRIVE=${VAGRANT_DEV:-$(dirname "$(cd "$(dirname "$0")" && pwd)")}
3
+
4
+ VAGRANT_DEFAULT_PROVIDER=virtualbox \
5
+ VAGRANT_HOME=${TESTDRIVE}/.vagrant.d \
6
+ bundle exec vagrant $@
data/vagrant-dns.gemspec CHANGED
@@ -16,5 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Vagrant::Dns::VERSION
17
17
 
18
18
  gem.add_dependency "daemons"
19
- gem.add_dependency "rubydns", "~> 0.6.0"
19
+ gem.add_dependency "rubydns", '~> 0.8.4'
20
+
21
+ gem.add_development_dependency 'rspec', '~> 2.14.0'
20
22
  end
@@ -0,0 +1,15 @@
1
+ require 'pathname'
2
+ require "vagrant-spec/acceptance"
3
+
4
+ Vagrant::Spec::Acceptance.configure do |c|
5
+ acceptance_dir = Pathname.new File.expand_path("../test/acceptance", __FILE__)
6
+
7
+ c.component_paths = [acceptance_dir.to_s]
8
+ c.skeleton_paths = [(acceptance_dir + 'skeletons').to_s]
9
+
10
+ c.provider 'virtualbox',
11
+ box: (acceptance_dir + 'artifacts' + 'virtualbox.box').to_s,
12
+ env_vars: {
13
+ 'VBOX_USER_HOME' => '{{homedir}}',
14
+ }
15
+ end
metadata CHANGED
@@ -1,48 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-dns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
5
- prerelease:
4
+ version: 0.6.0.beta1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Florian Gilcher
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-20 00:00:00.000000000 Z
11
+ date: 2014-05-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: daemons
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rubydns
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: 0.6.0
33
+ version: 0.8.4
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: 0.6.0
40
+ version: 0.8.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.14.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.14.0
46
55
  description: vagrant-dns is a vagrant plugin that manages DNS records associated with
47
56
  local machines.
48
57
  email:
@@ -58,7 +67,6 @@ files:
58
67
  - PLATFORM_SUPPORT.md
59
68
  - README.md
60
69
  - Rakefile
61
- - Vagrantfile
62
70
  - lib/vagrant-dns.rb
63
71
  - lib/vagrant-dns/command.rb
64
72
  - lib/vagrant-dns/config.rb
@@ -67,30 +75,36 @@ files:
67
75
  - lib/vagrant-dns/restart_middleware.rb
68
76
  - lib/vagrant-dns/service.rb
69
77
  - lib/vagrant-dns/version.rb
78
+ - tasks/acceptance.rake
79
+ - test/acceptance/dns/dns_spec.rb
80
+ - test/acceptance/skeletons/dns/Vagrantfile
81
+ - testdrive/Vagrantfile
82
+ - testdrive/bin/vagrant
70
83
  - vagrant-dns.gemspec
84
+ - vagrant-spec.config.rb
71
85
  homepage: ''
72
86
  licenses: []
87
+ metadata: {}
73
88
  post_install_message:
74
89
  rdoc_options: []
75
90
  require_paths:
76
91
  - lib
77
92
  required_ruby_version: !ruby/object:Gem::Requirement
78
- none: false
79
93
  requirements:
80
- - - ! '>='
94
+ - - '>='
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  required_rubygems_version: !ruby/object:Gem::Requirement
84
- none: false
85
98
  requirements:
86
- - - ! '>='
99
+ - - '>'
87
100
  - !ruby/object:Gem::Version
88
- version: '0'
101
+ version: 1.3.1
89
102
  requirements: []
90
103
  rubyforge_project:
91
- rubygems_version: 1.8.23
104
+ rubygems_version: 2.0.14
92
105
  signing_key:
93
- specification_version: 3
106
+ specification_version: 4
94
107
  summary: vagrant-dns manages DNS records of vagrant machines
95
- test_files: []
96
- has_rdoc:
108
+ test_files:
109
+ - test/acceptance/dns/dns_spec.rb
110
+ - test/acceptance/skeletons/dns/Vagrantfile