@@ -53,6 +53,7 @@ def call(env) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
53
53
network = zone_config . network
54
54
subnetwork = zone_config . subnetwork
55
55
metadata = zone_config . metadata
56
+ labels = zone_config . labels
56
57
tags = zone_config . tags
57
58
can_ip_forward = zone_config . can_ip_forward
58
59
use_private_ip = zone_config . use_private_ip
@@ -62,15 +63,12 @@ def call(env) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
62
63
on_host_maintenance = zone_config . on_host_maintenance
63
64
autodelete_disk = zone_config . autodelete_disk
64
65
service_accounts = zone_config . service_accounts
65
-
66
- # If image_family is set, get the latest image image from the family.
67
- unless image_family . nil?
68
- image = env [ :google_compute ] . images . get_from_family ( image_family ) . name
69
- end
66
+ project_id = zone_config . google_project_id
70
67
71
68
# Launch!
72
69
env [ :ui ] . info ( I18n . t ( "vagrant_google.launching_instance" ) )
73
70
env [ :ui ] . info ( " -- Name: #{ name } " )
71
+ env [ :ui ] . info ( " -- Project: #{ project_id } " )
74
72
env [ :ui ] . info ( " -- Type: #{ machine_type } " )
75
73
env [ :ui ] . info ( " -- Disk type: #{ disk_type } " )
76
74
env [ :ui ] . info ( " -- Disk size: #{ disk_size } GB" )
@@ -82,6 +80,7 @@ def call(env) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
82
80
env [ :ui ] . info ( " -- Network: #{ network } " ) if network
83
81
env [ :ui ] . info ( " -- Subnetwork: #{ subnetwork } " ) if subnetwork
84
82
env [ :ui ] . info ( " -- Metadata: '#{ metadata } '" )
83
+ env [ :ui ] . info ( " -- Labels: '#{ labels } '" )
85
84
env [ :ui ] . info ( " -- Tags: '#{ tags } '" )
86
85
env [ :ui ] . info ( " -- IP Forward: #{ can_ip_forward } " )
87
86
env [ :ui ] . info ( " -- Use private IP: #{ use_private_ip } " )
@@ -91,6 +90,36 @@ def call(env) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
91
90
env [ :ui ] . info ( " -- On Maintenance: #{ on_host_maintenance } " )
92
91
env [ :ui ] . info ( " -- Autodelete Disk: #{ autodelete_disk } " )
93
92
env [ :ui ] . info ( " -- Scopes: #{ service_accounts } " )
93
+
94
+ # Munge image configs
95
+ image = env [ :google_compute ] . images . get ( image ) . self_link
96
+
97
+ # If image_family is set, get the latest image image from the family.
98
+ unless image_family . nil?
99
+ image = env [ :google_compute ] . images . get_from_family ( image_family ) . self_link
100
+ end
101
+
102
+ # Munge network configs
103
+ if network != 'default'
104
+ network = "projects/#{ project_id } /global/networks/#{ network } "
105
+ subnetwork = "projects/#{ project_id } /regions/#{ zone . split ( '-' ) [ 0 ..1 ] . join ( '-' ) } /subnetworks/#{ subnetwork } "
106
+ else
107
+ network = "global/networks/default"
108
+ end
109
+
110
+ if external_ip == false
111
+ # No external IP
112
+ network_interfaces = [ { :network => network , :subnetwork => subnetwork } ]
113
+ else
114
+ network_interfaces = [ { :network => network , :subnetwork => subnetwork , :access_configs => [ { :name => 'External NAT' , :type => 'ONE_TO_ONE_NAT' } ] } ]
115
+ end
116
+
117
+ # Munge scheduling configs
118
+ scheduling = { :automatic_restart => auto_restart , :on_host_maintenance => on_host_maintenance , :preemptible => preemptible }
119
+
120
+ # Munge service_accounts / scopes config
121
+ service_accounts = [ { :scopes => service_accounts } ]
122
+
94
123
begin
95
124
request_start_time = Time . now . to_i
96
125
@@ -129,22 +158,20 @@ def call(env) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
129
158
130
159
defaults = {
131
160
:name => name ,
132
- :zone_name => zone ,
161
+ :zone => zone ,
133
162
:machine_type => machine_type ,
134
163
:disk_size => disk_size ,
135
164
:disk_type => disk_type ,
136
165
:image => image ,
137
- :network => network ,
138
- :subnetwork => subnetwork ,
139
- :metadata => metadata ,
140
- :tags => tags ,
166
+ :network_interfaces => network_interfaces ,
167
+ :metadata => { :items => metadata . each . map { | k , v | { :key => k . to_s , :value => v . to_s } } } ,
168
+ :labels => labels ,
169
+ :tags => { :items => tags } ,
141
170
:can_ip_forward => can_ip_forward ,
142
171
:use_private_ip => use_private_ip ,
143
172
:external_ip => external_ip ,
144
- :preemptible => preemptible ,
145
- :auto_restart => auto_restart ,
146
- :on_host_maintenance => on_host_maintenance ,
147
173
:disks => [ disk . get_as_boot_disk ( true , autodelete_disk ) ] ,
174
+ :scheduling => scheduling ,
148
175
:service_accounts => service_accounts
149
176
}
150
177
server = env [ :google_compute ] . servers . create ( defaults )
@@ -212,7 +239,7 @@ def terminate(env)
212
239
def get_disk_type ( env , disk_type , zone )
213
240
begin
214
241
# TODO(temikus): Outsource parsing logic to fog-google
215
- disk_type = env [ :google_compute ] . get_disk_type ( disk_type , zone ) . body [ "selfLink" ]
242
+ disk_type = env [ :google_compute ] . get_disk_type ( disk_type , zone ) . self_link
216
243
rescue Fog ::Errors ::NotFound
217
244
raise Errors ::DiskTypeError ,
218
245
:disktype => disk_type
0 commit comments