+#!/usr/bin/env bash
 
-
-VERSION=moon_utilities-1.2.0
+VERSION=moon_utilities-1.3.3
 
 python3 setup.py sdist bdist_wheel
 
-rm dist/*.asc
+rm dist/*.asc 2>/dev/null
 
 gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}-py3-none-any.whl
-gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}.linux-x86_64.tar.gz
+gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}.tar.gz
 
 if [ "$1" = "upload" ]; then
     twine upload dist/${VERSION}-py3-none-any.whl dist/${VERSION}-py3-none-any.whl.asc
-    twine upload dist/${VERSION}.linux-x86_64.tar.gz dist/${VERSION}.linux-x86_64.tar.gz.asc
+    twine upload dist/${VERSION}.tar.gz dist/${VERSION}.tar.gz.asc
 fi
 
-cp dist/${VERSION}-py3-none-any.whl ../moon_orchestrator/dist/
-cp dist/${VERSION}-py3-none-any.whl ../moon_router/dist/
-cp dist/${VERSION}-py3-none-any.whl ../moon_interface/dist/
-cp dist/${VERSION}-py3-none-any.whl ../moon_manager/dist/
-cp dist/${VERSION}-py3-none-any.whl ../moon_authz/dist/
+if [ "$1" = "copy" ]; then
+    mkdir -p ../moon_orchestrator/dist/ 2>/dev/null
+    cp -v dist/${VERSION}-py3-none-any.whl ../moon_orchestrator/dist/
+    mkdir -p ../moon_interface/dist/ 2>/dev/null
+    cp -v dist/${VERSION}-py3-none-any.whl ../moon_interface/dist/
+    mkdir -p ../moon_manager/dist/ 2>/dev/null
+    cp -v dist/${VERSION}-py3-none-any.whl ../moon_manager/dist/
+    mkdir -p ../moon_authz/dist/ 2>/dev/null
+    cp -v dist/${VERSION}-py3-none-any.whl ../moon_authz/dist/
+    mkdir -p ../moon_wrapper/dist/ 2>/dev/null
+    cp -v dist/${VERSION}-py3-none-any.whl ../moon_wrapper/dist/
+fi
 
 
     __AUTHZ_REQUESTS = {}
 
-
     def __init__(self):
         self.manager_url = "{}://{}:{}".format(
             configuration.get_components()['manager'].get('protocol', 'http'),
         return self.__SUBJECTS
 
     def update_subjects(self, policy_id=None):
-        req = requests.get("{}/policies/{}/subjects".format(self.manager_url, policy_id))
+        req = requests.get("{}/policies/{}/subjects".format(
+            self.manager_url, policy_id))
         self.__SUBJECTS[policy_id] = req.json()['subjects']
 
     def get_subject(self, policy_id, name):
         return self.__OBJECTS
 
     def update_objects(self, policy_id=None):
-        req = requests.get("{}/policies/{}/objects".format(self.manager_url, policy_id))
+        req = requests.get("{}/policies/{}/objects".format(
+            self.manager_url, policy_id))
         self.__OBJECTS[policy_id] = req.json()['objects']
 
     def get_object(self, policy_id, name):
         return self.__ACTIONS
 
     def update_actions(self, policy_id=None):
-        req = requests.get("{}/policies/{}/actions".format(self.manager_url, policy_id))
+        req = requests.get("{}/policies/{}/actions".format(
+            self.manager_url, policy_id))
         self.__ACTIONS[policy_id] = req.json()['actions']
 
     def get_action(self, policy_id, name):
             req = requests.get("{}/policies/{}/subject_assignments/{}".format(
                 self.manager_url, policy_id, perimeter_id))
         else:
-            req = requests.get("{}/policies/{}/subject_assignments".format(self.manager_url, policy_id))
+            req = requests.get("{}/policies/{}/subject_assignments".format(
+                self.manager_url, policy_id))
         if policy_id not in self.__SUBJECT_ASSIGNMENTS:
             self.__SUBJECT_ASSIGNMENTS[policy_id] = {}
-        self.__SUBJECT_ASSIGNMENTS[policy_id].update(req.json()['subject_assignments'])
+        self.__SUBJECT_ASSIGNMENTS[policy_id].update(
+            req.json()['subject_assignments'])
 
     def get_subject_assignments(self, policy_id, perimeter_id, category_id):
         if policy_id not in self.subject_assignments:
             req = requests.get("{}/policies/{}/object_assignments/{}".format(
                 self.manager_url, policy_id, perimeter_id))
         else:
-            req = requests.get("{}/policies/{}/object_assignments".format(self.manager_url, policy_id))
+            req = requests.get("{}/policies/{}/object_assignments".format(
+                self.manager_url, policy_id))
         if policy_id not in self.__OBJECT_ASSIGNMENTS:
             self.__OBJECT_ASSIGNMENTS[policy_id] = {}
-        self.__OBJECT_ASSIGNMENTS[policy_id].update(req.json()['object_assignments'])
+        self.__OBJECT_ASSIGNMENTS[policy_id].update(
+            req.json()['object_assignments'])
 
     def get_object_assignments(self, policy_id, perimeter_id, category_id):
         if policy_id not in self.object_assignments:
             req = requests.get("{}/policies/{}/action_assignments/{}".format(
                 self.manager_url, policy_id, perimeter_id))
         else:
-            req = requests.get("{}/policies/{}/action_assignments".format(self.manager_url, policy_id))
+            req = requests.get("{}/policies/{}/action_assignments".format(
+                self.manager_url, policy_id))
         if policy_id not in self.__ACTION_ASSIGNMENTS:
             self.__ACTION_ASSIGNMENTS[policy_id] = {}
-        self.__ACTION_ASSIGNMENTS[policy_id].update(req.json()['action_assignments'])
+        self.__ACTION_ASSIGNMENTS[policy_id].update(
+            req.json()['action_assignments'])
 
     def get_action_assignments(self, policy_id, perimeter_id, category_id):
         if policy_id not in self.action_assignments:
             #     if meta_rule_id in self.models[model_id]["meta_rules"]:
             #         return pdp_value["keystone_project_id"]
 
-    def get_containers_from_keystone_project_id(self, keystone_project_id, meta_rule_id=None):
+    def get_containers_from_keystone_project_id(self, keystone_project_id,
+                                                meta_rule_id=None):
         for container_id, container_value in self.containers.items():
+            LOG.info("container={}".format(container_value))
             if 'keystone_project_id' not in container_value:
                 continue
             if container_value['keystone_project_id'] == keystone_project_id:
                 if not meta_rule_id:
                     yield container_id, container_value
-                elif container_value['meta_rule_id'] == meta_rule_id:
+                elif container_value.get('meta_rule_id') == meta_rule_id:
                     yield container_id, container_value
                     break
 
     # containers functions
 
     def __update_container(self):
-        req = requests.get("{}/containers".format(self.manager_url))
-        containers = req.json()
-        for key, value in containers["containers"].items():
+        LOG.info("orchestrator={}".format("{}/pods".format(self.orchestrator_url)))
+        req = requests.get("{}/pods".format(self.orchestrator_url))
+        LOG.info("pods={}".format(req.text))
+        pods = req.json()
+        for key, value in pods["pods"].items():
             if key not in self.__CONTAINERS:
                 self.__CONTAINERS[key] = value
             else:
     def __update_container_chaining(self, keystone_project_id):
         container_ids = []
         for pdp_id, pdp_value, in self.__PDP.items():
-            # LOG.info("pdp_id, pdp_value = {}, {}".format(pdp_id, pdp_value))
-            # LOG.info("__POLICIES = {}".format(self.__POLICIES))
             if pdp_value:
                 if pdp_value["keystone_project_id"] == keystone_project_id:
                     for policy_id in pdp_value["security_pipeline"]:
                         model_id = self.__POLICIES[policy_id]['model_id']
-                        # LOG.info("model_id = {}".format(model_id))
-                        # LOG.info("CACHE = {}".format(self.__MODELS[model_id]))
-                        # LOG.info("CACHE.containers = {}".format(self.__CONTAINERS))
-                        # LOG.info("CACHE.models = {}".format(self.__MODELS))
                         for meta_rule_id in self.__MODELS[model_id]["meta_rules"]:
-                            # LOG.info("meta_rule = {}".format(self.__MODELS[model_id]["meta_rules"]))
                             for container_id, container_value in self.get_containers_from_keystone_project_id(
                                 keystone_project_id,
                                 meta_rule_id
                             ):
-                                # LOG.info("CONTAINER: {} {}".format(container_id, container_value))
                                 container_ids.append(
                                     {
-                                        "container_id": self.__CONTAINERS[container_id]["container_id"],
+                                        "container_id": self.__CONTAINERS[container_id]["name"],
                                         "genre": self.__CONTAINERS[container_id]["genre"],
                                         "policy_id": policy_id,
                                         "meta_rule_id": meta_rule_id,
-                                        "hostname": self.__CONTAINERS[container_id]["hostname"],
-                                        "hostip": self.__CONTAINERS[container_id]["port"][0]["IP"],
-                                        "port": self.__CONTAINERS[container_id]["port"][0]["PublicPort"],
+                                        "hostname": self.__CONTAINERS[container_id]["name"],
+                                        "port": self.__CONTAINERS[container_id]["port"],
                                     }
                                 )
-        # LOG.info("__update_container_chaining={}".format(container_ids))
         self.__CONTAINER_CHAINING[keystone_project_id] = container_ids
 
 
 import time
 from functools import wraps
 from flask import request
-from oslo_log import log as logging
-from oslo_config import cfg
-import oslo_messaging
+import logging
 from moon_utilities import exceptions
 from moon_utilities import configuration
 
 LOG = logging.getLogger("moon.utilities." + __name__)
-CONF = cfg.CONF
 
 keystone_config = configuration.get_configuration("openstack/keystone")["openstack/keystone"]
-slave = configuration.get_configuration(configuration.SLAVE)["slave"]
-
-__transport_master = oslo_messaging.get_transport(cfg.CONF, slave.get("master_url"))
-__transport = oslo_messaging.get_transport(CONF)
-
-__n_transport = oslo_messaging.get_notification_transport(CONF)
-__n_notifier = oslo_messaging.Notifier(__n_transport,
-                                       'router.host',
-                                       driver='messagingv2',
-                                       topics=['authz-workers'])
-__n_notifier = __n_notifier.prepare(publisher_id='router')
+# slave = configuration.get_configuration(configuration.SLAVE)["slave"]
 
 __targets = {}
 
     raise exceptions.KeystoneError
 
 
-def notify(request_id, container_id, payload, event_type="authz"):
-    ctxt = {
-        'request_id': request_id,
-        'container_id': container_id
-    }
-    __n_notifier.critical(ctxt, event_type, payload=payload)
-    # FIXME (asteroide): the notification mus be done 2 times otherwise the notification
-    #                    may not be sent (need to search why)
-    __n_notifier.critical(ctxt, event_type, payload=payload)
-
-
-def call(endpoint="security_router", ctx=None, method="route", **kwargs):
-    if not ctx:
-        ctx = dict()
-    if endpoint not in __targets:
-        __targets[endpoint] = dict()
-        __targets[endpoint]["endpoint"] = oslo_messaging.Target(topic=endpoint, version='1.0')
-        __targets[endpoint]["client"] = dict()
-        __targets[endpoint]["client"]["internal"] = oslo_messaging.RPCClient(__transport,
-                                                                             __targets[endpoint]["endpoint"])
-        __targets[endpoint]["client"]["external"] = oslo_messaging.RPCClient(__transport_master,
-                                                                             __targets[endpoint]["endpoint"])
-    if 'call_master' in ctx and ctx['call_master'] and slave.get("master_url"):
-        client = __targets[endpoint]["client"]["external"]
-        LOG.info("Calling master {} on {}...".format(method, endpoint))
-    else:
-        client = __targets[endpoint]["client"]["internal"]
-        LOG.info("Calling {} on {}...".format(method, endpoint))
-    result = copy.deepcopy(client.call(ctx, method, **kwargs))
-    LOG.info("result={}".format(result))
-    del client
-    return result
-
-
 class Context:
 
     def __init__(self, init_context, cache):