33
34
from contrail_configuration_utils import (
37
contrail_floating_ip_create,
38
contrail_floating_ip_deactivate,
39
contrail_floating_ip_delete,
40
contrail_floating_ip_use,
37
42
provision_metadata,
142
def configure_floating_ip_pools():
143
if config.changed("floating-ip-pools"):
144
floating_pools = config.get("floating-ip-pools")
145
pools = { (pool["project"],
147
pool["pool-name"]): set(pool["target-projects"])
148
for pool in yaml.safe_load(floating_pools) } \
149
if floating_pools else {}
150
previous_floating_pools = config.previous("floating-ip-pools")
152
if previous_floating_pools:
153
for pool in yaml.safe_load(previous_floating_pools):
154
projects = pool["target-projects"]
155
name = (pool["project"], pool["network"], pool["pool-name"])
157
previous_pools[name] = set(projects)
159
floating_ip_pool_delete(name, projects)
160
for name, projects in pools.iteritems():
161
if name not in previous_pools:
162
floating_ip_pool_create(name, projects)
164
floating_ip_pool_update(name, projects, previous_pools[name])
166
# ensures config.changed works correctly with unset values
167
if config.get("floating-ip-pools") is None:
168
config["floating-ip-pools"] = None
137
170
@hooks.hook("contrail-api-relation-joined")
138
171
def contrail_api_joined():
139
172
if config_get("contrail-api-configured"):
168
201
write_ifmap_config()
169
202
service_restart("ifmap-server")
204
def floating_ip_pool_create(name, projects):
205
fq_network = "default-domain:" + ":".join(name[:2])
206
contrail_floating_ip_create(fq_network, name[2])
208
fq_pool_name = "default-domain:" + ":".join(name)
209
for project in projects:
210
fq_project = "default-domain:" + project
211
contrail_floating_ip_use(fq_project, fq_pool_name)
213
def floating_ip_pool_delete(name, projects):
214
fq_pool_name = "default-domain:" + ":".join(name)
215
for project in projects:
216
fq_project = "default-domain:" + project
217
contrail_floating_ip_deactivate(fq_project, fq_pool_name)
219
fq_network = "default-domain:" + ":".join(name[:2])
220
contrail_floating_ip_delete(fq_network, name[2])
222
def floating_ip_pool_update(name, projects, previous_projects):
223
fq_pool_name = "default-domain:" + ":".join(name)
224
for project in (previous_projects - projects):
225
fq_project = "default-domain:" + project
226
contrail_floating_ip_deactivate(fq_project, fq_pool_name)
227
for project in (projects - previous_projects):
228
fq_project = "default-domain:" + project
229
contrail_floating_ip_use(fq_project, fq_pool_name)
171
231
@hooks.hook("identity-admin-relation-changed")
172
232
def identity_admin_changed():
173
233
if not relation_get("service_hostname"):