3
3
from twisted.internet.defer import inlineCallbacks
5
from juju.state.errors import UnsupportedSubordinateServiceRemoval
6
from juju.state.relation import RelationStateManager
5
7
from juju.state.service import ServiceStateManager
6
8
from juju.control.utils import get_environment
35
37
client = yield provider.connect()
36
38
service_manager = ServiceStateManager(client)
37
39
service_state = yield service_manager.get_service_state(service_name)
40
if (yield service_state.is_subordinate()):
41
# We can destroy the service if does not have relations.
42
# That implies that principals have already been torn
43
# down (or were never added).
44
relation_manager = RelationStateManager(client)
45
relations = yield relation_manager.get_relations_for_service(
49
principal_service = None
50
# if we have a container we can destroy the subordinate
51
# (revisit in the future)
52
for relation in relations:
53
if relation.relation_scope != "container":
55
services = yield relation.get_service_states()
56
remote_service = [s for s in services if s.service_name !=
57
service_state.service_name][0]
58
if not (yield remote_service.is_subordinate()):
59
principal_service = remote_service
63
raise UnsupportedSubordinateServiceRemoval(
64
service_state.service_name,
65
principal_service.service_name)
38
67
yield service_manager.remove_service_state(service_state)
39
68
log.info("Service %r destroyed.", service_state.service_name)