X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fplacement.py;h=d0d42f7520e1c663cbfe76c53ecf8a5fc2ae0a2b;hb=refs%2Ftags%2F0.4.0;hp=62cd5705902e833c319d5279aaa72190354e621e;hpb=0056d3f87102e50a1c35c05bdfa25124c387440f;p=osm%2FN2VC.git diff --git a/juju/placement.py b/juju/placement.py index 62cd570..d0d42f7 100644 --- a/juju/placement.py +++ b/juju/placement.py @@ -6,9 +6,10 @@ # module should be deprecated. # +from .client import client + MACHINE_SCOPE = "#" -from .client import client def parse(directive): """ @@ -17,25 +18,41 @@ def parse(directive): back over the websocket API. """ - if directive == "": + if not 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)]