beaker-digitalocean 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '0039c19e03a103ef5437faf9fd935db50720f9c8'
4
+ data.tar.gz: 29504504b003e61d0da7de415995c4de8e3965ca
5
+ SHA512:
6
+ metadata.gz: 61f5b915c4b4a5c914b48789419fa50fcb9803dca83b45311ad735c1ab0911db0b1753bc0f63f877d78431b62b07f8329c416662ea6da65b63439c33438c6956
7
+ data.tar.gz: 37088cec40151a624439a2ee15931e7e7b10b8c21f9286496ecf4ee5af2f41a2381b47a66257d919b55b65fe01f912e8461ba404bb6030131adbbe66a9b1852b
@@ -0,0 +1,60 @@
1
+ require 'barge'
2
+
3
+ module Beaker
4
+
5
+ class Digitalocean < Beaker::Hypervisor
6
+
7
+ SLEEPWAIT = 5
8
+
9
+ def initialize(digitalocean_hosts, options)
10
+ @options = options
11
+ @logger = options[:logger]
12
+ @hosts = digitalocean_hosts
13
+ @vms = []
14
+ @digitalocean_access_token = ENV['DO_TOKEN'] || @options[:digitalocean_access_token]
15
+ @digitalocean_ssh_keys = ENV['DO_SSH_KEY'] || @options[:digitalocean_ssh_keys]
16
+ @do ||= Barge::Client.new(access_token: @digitalocean_access_token )
17
+ end
18
+
19
+ def provision
20
+ @hosts.each do |host|
21
+ host[:vmhostname] = generate_host_name
22
+ @logger.notify "Provisioning DigitalOcean #{host} droplet"
23
+ opts = {
24
+ :name => host[:vmhostname],
25
+ :image => host[:image],
26
+ :size => host[:size],
27
+ :region => host[:region],
28
+ :ssh_keys => [ @digitalocean_ssh_keys ],
29
+ }
30
+ vm = @do.droplet.create(opts)
31
+
32
+ if vm.success?
33
+ @logger.notify "Waiting for #{host.name} (#{host[:vmhostname]}) to respond"
34
+ wait = 0
35
+ loop do
36
+ sleep(1)
37
+ wait += 1
38
+ if wait > 180
39
+ fail 'Droplet taking too long to respond...'
40
+ end
41
+ @logger.notify "Waiting for #{host.name} (#{host[:vmhostname]}) to respond"
42
+ @doresp = @do.droplet.show(vm.droplet.id)
43
+ break if @doresp.droplet.status == 'active'
44
+ end
45
+ ip = @doresp.droplet.networks.v4.detect { |z| z.type == 'public' }
46
+ host[:ip] = ip.ip_address
47
+ @vms << vm
48
+ end
49
+ end
50
+ end
51
+
52
+ def cleanup
53
+ @logger.notify "Cleaning DigitalOcean created instances"
54
+ @vms.each do |vm|
55
+ @logger.notify "Destroying host: #{vm.name}"
56
+ @do.droplet.destroy(vm.droplet.id)
57
+ end
58
+ end
59
+ end
60
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: beaker-digitalocean
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andre Tiengo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: barge
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.11.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.11.0
27
+ description: Puppetlabs accceptance testing harness, using Digital Ocean as a hypervisor
28
+ email:
29
+ - andretiengo@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/beaker/hypervisor/digitalocean.rb
35
+ homepage: https://github.com/tiengo/beaker-digitalocean
36
+ licenses:
37
+ - Apache2
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.6.6
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: Let's test Puppet, using Digital Ocean!
59
+ test_files: []