if type(directive) in [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:
+ machine, container, container_num = directive.split("/")
+ return [
+ client.Placement(scope=MACHINE_SCOPE, directive=machine),
+ client.Placement(scope=container, directive=container_num)
+ ]
# 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)]