5ee9ba6ae5887d3b39301b057ba4b3c6c904a620
2 # This module allows us to parse a machine placement directive into a
3 # Placement object suitable for passing through the websocket API.
5 # Once https://bugs.launchpad.net/juju/+bug/1645480 is addressed, this
6 # module should be deprecated.
9 from .client
import client
16 Given a string in the format `scope:directive`, or simply `scope`
17 or `directive`, return a Placement object suitable for passing
18 back over the websocket API.
25 if type(directive
) in [dict, client
.Placement
]:
26 # We've been handed something that we can simply hand back to
27 # the api. (Forwards compatibility)
30 # Juju 2.0 can't handle lxc containers.
31 directive
= directive
.replace('lxc', 'lxd')
34 # Planner has given us a scope and directive in string form
35 scope
, directive
= directive
.split(":")
36 return [client
.Placement(scope
=scope
, directive
=directive
)]
38 if directive
.isdigit():
39 # Planner has given us a machine id (we rely on juju core to
40 # verify its validity.)
41 return [client
.Placement(scope
=MACHINE_SCOPE
, directive
=directive
)]
45 # https://github.com/juju/juju/blob/master/instance/placement_test.go#L29
47 client
.Placement(scope
=MACHINE_SCOPE
, directive
=directive
),
50 # Planner has probably given us a container type. Leave it up to
51 # juju core to verify that it is valid.
52 return [client
.Placement(scope
=directive
)]