#
import asyncio
+import os
import re
import tempfile
+import time
import yaml
-import os
import rift.mano.utils.juju_api as juju
from . import riftcm_config_plugin
try:
path = os.path.join(self._rift_artif_dir,
'launchpad/libs',
- agent_vnfr.vnfr_msg.vnfd_ref,
+ agent_vnfr.vnfr_msg.vnfd.id,
'charms/trusty',
charm)
self._log.debug("jujuCA: Charm dir is {}".format(path))
def vnf_config_primitive(self, nsr_id, vnfr_id, primitive, output):
self._log.debug("jujuCA: VNF config primititve {} for nsr {}, vnfr_id {}".
format(primitive, nsr_id, vnfr_id))
- output.execution_status = "failed"
- output.execution_id = ''
- output.execution_error_details = ''
-
try:
vnfr = self._juju_vnfs[vnfr_id].vnfr
except KeyError:
vnfr_id)
return
+ output.execution_status = "failed"
+ output.execution_id = ''
+ output.execution_error_details = ''
+
try:
service = vnfr['vnf_juju_name']
vnf_config = vnfr['config']
if parameter.value:
val = self.xlate(parameter.value, vnfr['tags'])
# TBD do validation of the parameters
- data_type = 'string'
+ data_type = 'STRING'
found = False
for ca_param in config.parameter:
if ca_param.name == parameter.name:
data_type = ca_param.data_type
found = True
break
- if data_type == 'integer':
- val = int(parameter.value)
+ try:
+ if data_type == 'INTEGER':
+ tmp = int(val)
+ val = tmp
+ except Exception as e:
+ pass
+
if not found:
self._log.warn("jujuCA: Did not find parameter {} for {}".
format(parameter, config.name))
params.update({parameter.name: val})
if config.name == 'config':
+ output.execution_id = 'config'
if len(params):
self._log.debug("jujuCA: applying config with params {} for service {}".
format(params, service))
- rc = yield from self.api.apply_config(params, service=service)
+ rc = yield from self.api.apply_config(params, service=service, wait=False)
if rc:
- output.execution_status = "completed"
+ # Mark as pending and check later for the status
+ output.execution_status = "pending"
self._log.debug("jujuCA: applied config {} on {}".
format(params, service))
else:
self._log.error("jujuCA: Error applying config {} on service {}".
format(params, service))
else:
- self._log.warn("jujuCA: Did not find valid paramaters for config : {}".
+ self._log.warn("jujuCA: Did not find valid parameters for config : {}".
format(primitive.parameter))
+ output.execution_status = "completed"
else:
self._log.debug("jujuCA: Execute action {} on service {} with params {}".
format(config.name, service, params))
resp = yield from self.api.execute_action(action, params,
service=service)
if 'error' in resp:
- self._log.error("Applying initial config failed for {} with {}: {}".
- format(action, params, resp))
+ self._log.error("Applying initial config on {} failed for {} with {}: {}".
+ format(vnfr['vnf_juju_name'], action, params, resp))
return False
action_ids.append(resp['action']['tag'])
execution_id)
self._log.exception(e)
raise e
+
+ def get_service_status(self, vnfr_id):
+ '''Get the service status, used by job status handle
+ Make sure this is NOT a coroutine
+ '''
+ service = self.get_service_name(vnfr_id)
+ if service is None:
+ self._log.error("jujuCA: VNFR {} not managed by this Juju agent".
+ format(vnfr_id))
+ return None
+
+ # Delay for 3 seconds before checking as config apply takes a
+ # few seconds to transfer to the service
+ time.sleep(3)
+ return self.api._get_service_status(service=service)