Skip to content

Commit c37859d

Browse files
author
earthmant
committed
configure is ok
1 parent 75a9ab8 commit c37859d

File tree

5 files changed

+72
-31
lines changed

5 files changed

+72
-31
lines changed

cloudify_vcd/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def wrapper(*_, **kwargs):
7777
resource_data.primary_ctx.instance.runtime_properties[
7878
'__RETRY_BAD_REQUEST'] = True
7979
resource_data.primary_ctx.instance.update()
80-
raise OperationRetry(str(e))
80+
raise OperationRetry(str(e))
8181
else:
8282
last_task = get_last_task(result)
8383

cloudify_vcd/utils.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ def expose_props(operation_name, resource=None, new_props=None, _ctx=None):
389389

390390
def get_last_task(task):
391391
try:
392-
return task_to_dict(task.Tasks.Task)
392+
return task_to_dict(task.Tasks.Task[0])
393393
except AttributeError:
394394
return task
395395

@@ -426,12 +426,29 @@ def cannot_deploy(exc):
426426
return False
427427

428428

429+
def cannot_power_off(exc):
430+
if 'Current state of vm: Powered off' in str(exc):
431+
return True
432+
elif 'RelationType.POWER_OFF' in str(exc):
433+
return True
434+
return False
435+
436+
437+
def task_on_failure(exc):
438+
if 'Unable to perform this action. ' \
439+
'Contact your cloud administrator' in str(exc):
440+
return True
441+
return False
442+
443+
429444
def check_if_task_successful(_resource, task):
430445
if task:
446+
ctx.logger.info('Task: {task}'.format(task=task.items()))
431447
try:
432448
return _resource.task_successful(task)
433449
except VcdTaskException as e:
434-
if cannot_deploy(e):
450+
if cannot_deploy(e) or task_on_failure(e):
435451
raise NonRecoverableError(str(e))
436-
raise OperationRetry('Unhandled state validation error: {e}.'.format(e=str(e)))
452+
raise OperationRetry(
453+
'Unhandled state validation error: {e}.'.format(e=str(e)))
437454
return True

cloudify_vcd/vapp_tasks.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
21
from pyvcloud.vcd.exceptions import (
32
BadRequestException,
3+
MissingLinkException,
44
OperationNotSupportedException)
55

66
from cloudify.exceptions import OperationRetry
77

88
from .decorators import resource_operation
99
from .network_tasks import get_network_type
1010
from .utils import (
11+
cannot_power_off,
1112
find_rel_by_type,
1213
vcd_unresolved_vm,
1314
vcd_already_exists,
@@ -33,13 +34,12 @@ def create_vapp(_,
3334
if network and 'network' not in vapp_config:
3435
vapp_config['network'] = network
3536

36-
vapp = vapp_class(
37+
return vapp_class(
3738
vapp_id,
3839
vapp_client,
3940
vapp_vdc,
4041
kwargs=vapp_config
41-
)
42-
return vapp, None
42+
), None
4343

4444

4545
@resource_operation
@@ -128,6 +128,26 @@ def create_vm(vm_external,
128128
return vm, last_task
129129

130130

131+
@resource_operation
132+
def configure_vm(_,
133+
vm_id,
134+
vm_client,
135+
vm_vdc,
136+
vm_config,
137+
vm_class,
138+
vm_ctx):
139+
vapp_name = find_resource_id_from_relationship_by_type(
140+
vm_ctx.instance, REL_VM_VAPP)
141+
return vm_class(
142+
vm_id,
143+
vapp_name,
144+
vm_client,
145+
vdc_name=vm_vdc,
146+
kwargs={},
147+
vapp_kwargs=vm_config
148+
), None
149+
150+
131151
@resource_operation
132152
def start_vm(_,
133153
vm_id,
@@ -170,8 +190,8 @@ def stop_vm(_,
170190
)
171191
try:
172192
last_task = vm.power_off()
173-
except OperationNotSupportedException as e:
174-
if not vcd_unresolved_vm(e):
193+
except (MissingLinkException, OperationNotSupportedException) as e:
194+
if not vcd_unresolved_vm(e) and not cannot_power_off(e):
175195
raise
176196
last_task = None
177197
return vm, last_task
@@ -197,8 +217,8 @@ def delete_vm(_,
197217
)
198218
try:
199219
last_task = vm.undeploy()
200-
except OperationNotSupportedException as e:
201-
if not vcd_unresolved_vm(e):
220+
except (MissingLinkException, OperationNotSupportedException) as e:
221+
if not vcd_unresolved_vm(e) and not cannot_power_off(e):
202222
raise
203223
last_task = None
204224
if vm_ctx.instance.runtime_properties.get('__VM_CREATE_VAPP'):

plugin.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,10 @@ node_types:
377377
cloudify.interfaces.lifecycle:
378378
create:
379379
implementation: vcd.cloudify_vcd.vapp_tasks.create_vm
380+
configure:
381+
implementation: vcd.cloudify_vcd.vapp_tasks.configure_vm
382+
start:
383+
implementation: vcd.cloudify_vcd.vapp_tasks.start_vm
380384
stop:
381385
implementation: vcd.cloudify_vcd.vapp_tasks.stop_vm
382386
delete:

test.yaml

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ node_templates:
8484
resource_config:
8585
description: test description
8686
fence_mode: natRouted
87-
accept_all_eulas: True
87+
accept_all_eulas: true
8888
relationships:
8989
- type: cloudify.relationships.vcloud.vapp_connected_to_network
9090
target: routed_network
@@ -176,34 +176,34 @@ node_templates:
176176
# - type: cloudify.relationships.vcloud.network_connected_to_gateway
177177
# target: gateway
178178
##
179-
# routed_network2:
180-
# type: cloudify.nodes.vcloud.RoutedVDCNetwork
181-
# properties:
182-
# client_config: *client_config
183-
# resource_id: { concat: [ 'routed-network2-', { get_input: resource_suffix } ] }
184-
# resource_config:
185-
# gateway_name: { get_property: [ gateway, resource_id ] }
186-
# network_cidr: 192.170.2.1/24
187-
# description: test routed network
188-
# primary_dns_ip: 8.8.8.4
189-
# secondary_dns_ip: 8.8.8.8
190-
# relationships:
191-
# - type: cloudify.relationships.vcloud.network_connected_to_gateway
192-
# target: gateway
193-
#
179+
routed_network2:
180+
type: cloudify.nodes.vcloud.RoutedVDCNetwork
181+
properties:
182+
client_config: *client_config
183+
resource_id: { concat: [ 'routed-network2-', { get_input: resource_suffix } ] }
184+
resource_config:
185+
gateway_name: { get_property: [ gateway, resource_id ] }
186+
network_cidr: 192.170.2.1/24
187+
description: test routed network
188+
primary_dns_ip: 8.8.8.4
189+
secondary_dns_ip: 8.8.8.8
190+
relationships:
191+
- type: cloudify.relationships.vcloud.network_connected_to_gateway
192+
target: gateway
193+
194194
routed_network:
195195
type: cloudify.nodes.vcloud.RoutedVDCNetwork
196196
properties:
197197
client_config: *client_config
198198
resource_id: { concat: [ 'routed-network-', { get_input: resource_suffix } ] }
199199
resource_config:
200200
gateway_name: { get_property: [ gateway, resource_id ] }
201-
network_cidr: 192.170.1.1/24
201+
network_cidr: 192.169.1.1/24
202202
description: test routed network
203203
primary_dns_ip: 8.8.8.4
204204
secondary_dns_ip: 8.8.8.8
205-
ip_range_start: 192.170.1.2
206-
ip_range_end: 192.170.1.254
205+
ip_range_start: 192.169.1.2
206+
ip_range_end: 192.169.1.254
207207
relationships:
208208
- type: cloudify.relationships.vcloud.network_connected_to_gateway
209209
target: gateway

0 commit comments

Comments
 (0)