)
subprocess.check_call(shlex.split(cmd))
- self.artifacts[charm] = {
- 'tmpdir': builds,
- 'charm': "{}/builds/{}".format(builds, charm),
- }
except subprocess.CalledProcessError as e:
- raise Exception("charm build failed: {}.".format(e))
+ # charm build will return error code 100 if the charm fails
+ # the auto-run of charm proof, which we can safely ignore for
+ # our CI charms.
+ if e.returncode != 100:
+ raise Exception("charm build failed: {}.".format(e))
+
+ self.artifacts[charm] = {
+ 'tmpdir': builds,
+ 'charm': "{}/builds/{}".format(builds, charm),
+ }
return self.artifacts[charm]['charm']
if not self.n2vc:
self.n2vc = get_n2vc(loop=loop)
+ debug("Creating model for Network Service {}".format(self.ns_name))
+ await self.n2vc.CreateNetworkService(self.ns_name)
+
application = self.n2vc.FormatApplicationName(
self.ns_name,
self.vnf_name,
try:
await self.n2vc.RemoveCharms(self.ns_name, application)
+ await self.n2vc.DestroyNetworkService(self.ns_name)
+
while True:
# Wait for the application to be removed
await asyncio.sleep(10)
application,
):
break
+ await self.n2vc.DestroyNetworkService(self.ns_name)
# Need to wait for the charm to finish, because native charms
if self.state[application]['container']: