Class: VagrantPlugins::Skytap::API::Interface
Constant Summary
Constants included
from Busyable
Busyable::WAIT_ITERATION_PERIOD, Busyable::WAIT_TIMEOUT
Instance Attribute Summary collapse
Attributes inherited from Resource
#attrs, #env
Instance Method Summary
collapse
Methods included from Busyable
#retry_while_resource_busy, #update_with_retry
Methods inherited from Resource
#reload, resource_name
#get_api_attribute, included
Constructor Details
#initialize(attrs, vm, env) ⇒ Interface
Returns a new instance of Interface.
16
17
18
19
|
# File 'lib/vagrant-skytap/api/interface.rb', line 16
def initialize(attrs, vm, env)
super
@vm = vm
end
|
Instance Attribute Details
Returns the value of attribute vm.
12
13
14
|
# File 'lib/vagrant-skytap/api/interface.rb', line 12
def vm
@vm
end
|
Instance Method Details
#address_for(vpn) ⇒ Object
57
58
59
60
61
62
63
64
65
|
# File 'lib/vagrant-skytap/api/interface.rb', line 57
def address_for(vpn)
if vpn.nat_enabled?
if info = vpn_nat_addresses.detect {|aa| aa['vpn_id'] == vpn.id}
info['ip_address']
end
elsif vpn_attachments.any? {|aa| aa.vpn['id'] == vpn.id}
ip
end
end
|
#attach_public_ip(ip) ⇒ Object
83
84
85
86
87
88
89
90
|
# File 'lib/vagrant-skytap/api/interface.rb', line 83
def attach_public_ip(ip)
address = ip.is_a?(PublicIp) ? ip.address : ip.to_s
begin
resp = api_client.post("#{url}/ips", JSON.dump(ip: address))
rescue Errors::OperationFailed => ex
raise Errors::OperationFailed, err: 'Failed to attach public IP'
end
end
|
#attachment_for(vpn) ⇒ Object
53
54
55
|
# File 'lib/vagrant-skytap/api/interface.rb', line 53
def attachment_for(vpn)
network.try(:attachment_for, vpn)
end
|
#available_ips ⇒ Object
45
46
47
48
49
50
51
|
# File 'lib/vagrant-skytap/api/interface.rb', line 45
def available_ips
resp = api_client.get("#{url}/ips/available")
ip_attrs = JSON.load(resp.body)
ip_attrs.collect do |attrs|
PublicIp.new(attrs, nil, env)
end
end
|
#create_published_service(internal_port) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/vagrant-skytap/api/interface.rb', line 101
def create_published_service(internal_port)
begin
resp = api_client.post("#{url}/services", JSON.dump(internal_port: internal_port))
rescue Errors::OperationFailed => ex
raise Errors::OperationFailed, err: 'Failed to create published service'
end
service_attrs = JSON.load(resp.body)
PublishedService.new(service_attrs, self, env).tap do |service|
published_services << service
end
end
|
#nat_addresses ⇒ Object
79
80
81
|
# File 'lib/vagrant-skytap/api/interface.rb', line 79
def nat_addresses
get_api_attribute('nat_addresses') || {}
end
|
21
22
23
24
25
26
27
|
# File 'lib/vagrant-skytap/api/interface.rb', line 21
def network
if network_id
vm.environment.networks.detect do |network|
network.id == network_id
end
end
end
|
#public_ips ⇒ Object
29
30
31
32
33
|
# File 'lib/vagrant-skytap/api/interface.rb', line 29
def public_ips
@public_ips ||= (get_api_attribute('public_ips') || []).collect do |ip_attrs|
PublicIp.new(ip_attrs, self, env)
end
end
|
#published_service_choices ⇒ Object
92
93
94
95
|
# File 'lib/vagrant-skytap/api/interface.rb', line 92
def published_service_choices
[uncreated_published_service_choice] +
published_services.collect(&:choice_for_setup)
end
|
#published_services ⇒ Object
35
36
37
38
39
|
# File 'lib/vagrant-skytap/api/interface.rb', line 35
def published_services
@published_services ||= (get_api_attribute('services') || []).collect do |service_attrs|
PublishedService.new(service_attrs, self, env)
end
end
|
#refresh(attrs) ⇒ Object
115
116
117
118
119
|
# File 'lib/vagrant-skytap/api/interface.rb', line 115
def refresh(attrs)
@public_ips = nil
@published_services = nil
super
end
|
#uncreated_published_service_choice ⇒ Object
41
42
43
|
# File 'lib/vagrant-skytap/api/interface.rb', line 41
def url
"/configurations/#{vm.environment.id}/vms/#{vm.id}/interfaces/#{id}"
end
|
#vpn_attachments ⇒ Object
67
68
69
70
71
72
73
|
# File 'lib/vagrant-skytap/api/interface.rb', line 67
def vpn_attachments
if network
network.vpn_attachments
else
[]
end
end
|
#vpn_nat_addresses ⇒ Object
75
76
77
|
# File 'lib/vagrant-skytap/api/interface.rb', line 75
def vpn_nat_addresses
nat_addresses['vpn_nat_addresses'] || []
end
|