X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fplacement.py;h=d0d42f7520e1c663cbfe76c53ecf8a5fc2ae0a2b;hb=fbd25b458d70f0ca0743be60ff3d6ab21335707f;hp=6f91aed0a83f131e789b89392ce4e1f587cd0e22;hpb=5ff1c23a9ce16a3179537d75a80f9e80869f0431;p=osm%2FN2VC.git diff --git a/juju/placement.py b/juju/placement.py index 6f91aed..d0d42f7 100644 --- a/juju/placement.py +++ b/juju/placement.py @@ -22,21 +22,37 @@ def parse(directive): # Handle null case return None - if type(directive) in [dict, client.Placement]: + if isinstance(directive, (list, tuple)): + results = [] + for d in directive: + results.extend(parse(d)) + return results + + if isinstance(directive, (dict, client.Placement)): # We've been handed something that we can simply hand back to # the api. (Forwards compatibility) - return directive + return [directive] + + # Juju 2.0 can't handle lxc containers. + directive = directive.replace('lxc', 'lxd') if ":" in directive: # Planner has given us a scope and directive in string form scope, directive = directive.split(":") - return client.Placement(scope=scope, directive=directive) + return [client.Placement(scope=scope, directive=directive)] if directive.isdigit(): # Planner has given us a machine id (we rely on juju core to # verify its validity.) - return client.Placement(scope=MACHINE_SCOPE, directive=directive) + return [client.Placement(scope=MACHINE_SCOPE, directive=directive)] + + if "/" in directive: + # e.g. "0/lxd/0" + # https://github.com/juju/juju/blob/master/instance/placement_test.go#L29 + return [ + client.Placement(scope=MACHINE_SCOPE, directive=directive), + ] # Planner has probably given us a container type. Leave it up to # juju core to verify that it is valid. - return client.Placement(scope=directive) + return [client.Placement(scope=directive)]