def upgrade_charm(): # NOTE: image can not be deleted if container is running. # TODO: so think about killing the container # NOTE: this hook can be fired when either resource changed or charm code # changed. so if code was changed then we may need to update config update_charm_status()
def install(): status_set("maintenance", "Installing...") # TODO: try to remove this call common_utils.fix_hostname() docker_utils.install() utils.update_charm_status()
def contrail_analyticsdb_departed(): units = [ unit for rid in relation_ids("contrail-analyticsdb") for unit in related_units(rid) ] if not units: config.pop("analyticsdb_ips", None) utils.update_charm_status()
def contrail_analyticsdb_departed(): units = [ unit for rid in relation_ids("contrail-analyticsdb") for unit in related_units(rid) ] if not units: config.pop("db_user", None) config.pop("db_password", None) update_charm_status()
def contrail_analytics_departed(): units = [unit for rid in relation_ids("contrail-analytics") for unit in related_units(rid)] if not units: for key in ["auth_info", "auth_mode", "orchestrator_info", "rabbitmq_hosts"]: config.pop(key, None) config.save() utils.update_charm_status() _notify_proxy_services()
def config_changed(): if config.changed("control-network"): settings = {'private-address': get_ip()} rnames = ("contrail-analytics", "contrail-analyticsdb", "analytics-cluster", "http-services") for rname in rnames: for rid in relation_ids(rname): relation_set(relation_id=rid, relation_settings=settings) update_charm_status()
def install(): status_set("maintenance", "Installing...") # TODO: try to remove this call fix_hostname() apt_upgrade(fatal=True, dist=True) add_docker_repo() apt_update(fatal=False) apt_install(PACKAGES + DOCKER_PACKAGES, fatal=True) update_charm_status()
def upgrade_charm(): # NOTE: image can not be deleted if container is running. # TODO: so think about killing the container # clear cached version of image config.pop("version_with_build", None) config.pop("version", None) config.save() # NOTE: this hook can be fired when either resource changed or charm code # changed. so if code was changed then we may need to update config update_charm_status()
def analytics_cluster_departed(): if not is_leader(): return unit = remote_unit() cluster_info = common_utils.json_loads(leader_get("cluster_info"), dict()) cluster_info.pop(unit, None) log("Unit {} departed. Cluster info: {}".format(unit, str(cluster_info))) settings = {"cluster_info": json.dumps(cluster_info)} leader_set(settings=settings) _update_analytics() _update_analyticsdb() utils.update_charm_status()
def upgrade_charm(): _update_cluster() saved_info = common_utils.json_loads(leader_get("cluster_info"), dict()) if is_leader() and not saved_info: current_info = utils.get_cluster_info("unit-address", common_utils.get_ip()) log("Cluster info: {}".format(str(current_info))) settings = {"cluster_info": json.dumps(current_info)} leader_set(settings=settings) _update_analytics() _update_analyticsdb() _notify_proxy_services() utils.update_charm_status()
def leader_elected(): current_info = utils.get_cluster_info("unit-address", common_utils.get_ip()) saved_info = common_utils.json_loads(leader_get("cluster_info"), dict()) log("Cluster current info: {}".format(str(current_info))) log("Cluster saved info: {}".format(str(saved_info))) if not saved_info: log("Cluster info: {}".format(str(current_info))) settings = {"cluster_info": json.dumps(current_info)} leader_set(settings=settings) _update_analytics() _update_analyticsdb() utils.update_charm_status()
def analytics_cluster_changed(): data = relation_get() log("Peer relation changed with {}: {}".format(remote_unit(), data)) ip = data.get("unit-address") if not ip: log("There is no unit-address in the relation") elif is_leader(): unit = remote_unit() if _address_changed(unit, ip): _update_analytics() _update_analyticsdb() utils.update_charm_status() utils.update_ziu("cluster-changed")
def contrail_analytics_changed(): data = relation_get() _value_changed(data, "auth-mode", "auth_mode") _value_changed(data, "auth-info", "auth_info") _value_changed(data, "orchestrator-info", "orchestrator_info") _value_changed(data, "rabbitmq_hosts", "rabbitmq_hosts") _value_changed(data, "maintenance", "maintenance") _value_changed(data, "controller_ips", "controller_ips") _value_changed(data, "controller_data_ips", "controller_data_ips") config.save() # TODO: handle changing of all values # TODO: set error if orchestrator is changing and container was started utils.update_ziu("analytics-changed") utils.update_charm_status() _notify_proxy_services()
def config_changed(): if config.changed("control-network"): settings = {'private-address': get_ip()} rnames = ("contrail-analytics", "contrail-analyticsdb", "analytics-cluster", "http-services") for rname in rnames: for rid in relation_ids(rname): relation_set(relation_id=rid, relation_settings=settings) if config.changed("docker-registry"): apply_docker_insecure() if config.changed("docker-user") or config.changed("docker-password"): docker_login() update_charm_status()
def contrail_analytics_changed(): data = relation_get() changed = False changed |= _value_changed(data, "auth-mode", "auth_mode") changed |= _value_changed(data, "auth-info", "auth_info") changed |= _value_changed(data, "orchestrator-info", "orchestrator_info") changed |= _value_changed(data, "ssl-ca", "ssl_ca") changed |= _value_changed(data, "ssl-cert", "ssl_cert") changed |= _value_changed(data, "ssl-key", "ssl_key") changed |= _value_changed(data, "rabbitmq_user", "rabbitmq_user") changed |= _value_changed(data, "rabbitmq_password", "rabbitmq_password") changed |= _value_changed(data, "rabbitmq_vhost", "rabbitmq_vhost") # TODO: handle changing of all values # TODO: set error if orchestrator is changing and container was started if changed: update_charm_status()
def config_changed(): utils.update_nrpe_config() if config.changed("control-network"): settings = {'private-address': common_utils.get_ip()} rnames = ("contrail-analytics", "contrail-analyticsdb", "analytics-cluster", "http-services") for rname in rnames: for rid in relation_ids(rname): relation_set(relation_id=rid, relation_settings=settings) docker_utils.config_changed() utils.update_charm_status() # leave it as latest - in case of exception in previous steps # config.changed doesn't work sometimes... if config.get("saved-image-tag") != config["image-tag"]: utils.update_ziu("image-tag") config["saved-image-tag"] = config["image-tag"] config.save()
def contrail_analytics_departed(): units = [ unit for rid in relation_ids("contrail-controller") for unit in related_units(rid) ] if not units: for key in [ "auth_info", "auth_mode", "orchestrator_info", "ssl_enabled", "rabbitmq_vhost", "rabbitmq_user", "rabbitmq_password", "rabbitmq_hosts" ]: config.pop(key, None) if is_container_launched(CONTAINER_NAME): status_set( "blocked", "Container is present but cloud orchestrator was disappeared." " Please kill container by yourself or " "restore cloud orchestrator.") update_charm_status()
def config_changed(): utils.update_nrpe_config() if config.changed("control-network"): _update_cluster() if is_leader() and _address_changed(local_unit(), common_utils.get_ip()): _update_analytics() _update_analyticsdb() docker_utils.config_changed() utils.update_charm_status() _notify_proxy_services() # leave it as latest - in case of exception in previous steps # config.changed doesn't work sometimes (when we saved config in this hook before) if config.get("saved-image-tag") != config["image-tag"]: utils.update_ziu("image-tag") config["saved-image-tag"] = config["image-tag"] config.save()
def contrail_analytics_changed(): data = relation_get() changed = False changed |= _value_changed(data, "api-vip", "api_vip") changed |= _value_changed(data, "auth-mode", "auth_mode") changed |= _value_changed(data, "auth-info", "auth_info") changed |= _value_changed(data, "orchestrator-info", "orchestrator_info") changed |= _value_changed(data, "ssl-enabled", "ssl_enabled") changed |= _value_changed(data, "rabbitmq_user", "rabbitmq_user") changed |= _value_changed(data, "rabbitmq_password", "rabbitmq_password") changed |= _value_changed(data, "rabbitmq_vhost", "rabbitmq_vhost") changed |= _value_changed(data, "rabbitmq_hosts", "rabbitmq_hosts") changed |= _value_changed(data, "configdb_cassandra_user", "configdb_cassandra_user") changed |= _value_changed(data, "configdb_cassandra_password", "configdb_cassandra_password") config.save() # TODO: handle changing of all values # TODO: set error if orchestrator is changing and container was started if changed: update_charm_status() _notify_proxy_services()
def contrail_analyticsdb_changed(): data = relation_get() _value_changed(data, "db-user", "db_user") _value_changed(data, "db-password", "db_password") update_charm_status()
def contrail_analyticsdb_changed(): data = relation_get() _value_changed(data, "analyticsdb_ips", "analyticsdb_ips") config.save() utils.update_ziu("analyticsdb-changed") utils.update_charm_status()
def tls_certificates_relation_changed(): # it can be fired several times without server's cert if common_utils.tls_changed(utils.MODULE, relation_get()): _notify_proxy_services() utils.update_nrpe_config() utils.update_charm_status()
def contrail_analyticsdb_departed(): utils.update_charm_status()
def update_status(): update_charm_status(update_config=False)
def analytics_cluster_joined(): settings = {"private-address": get_ip()} relation_set(relation_settings=settings) update_charm_status()
def update_status(): utils.update_ziu("update-status") utils.update_charm_status()
def upgrade_charm(): _notify_proxy_services() utils.update_charm_status()
def leader_settings_changed(): _update_analytics() _update_analyticsdb() utils.update_charm_status()
def tls_certificates_relation_departed(): config['tls_present'] = False common_utils.tls_changed(utils.MODULE, None) _notify_proxy_services() utils.update_nrpe_config() utils.update_charm_status()
def tls_certificates_relation_departed(): if common_utils.tls_changed(utils.MODULE, None): _notify_proxy_services() utils.update_nrpe_config() utils.update_charm_status()