From 68a01ec6643066dff92bed20faa123d1b16a14ba Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Mon, 19 Jul 2021 17:06:13 -0400 Subject: [PATCH 1/6] updated readme and process pool logging --- Dockerfile-auth | 3 +- Dockerfile-broker | 3 +- Dockerfile-cf | 3 +- Dockerfile-orchestrator | 3 +- README.md | 8 +- fabric_cf/__init__.py | 2 +- fabric_cf/actor/core/container/globals.py | 3 +- fabric_cf/authority/Readme.md | 29 ++++-- fabric_cf/authority/docker-compose-dev.yml | 78 ---------------- fabric_cf/authority/docker-compose.yml | 1 + fabric_cf/broker/Readme.md | 7 -- fabric_cf/broker/docker-compose-dev.yml | 77 --------------- fabric_cf/orchestrator/README.md | 6 -- fabric_cf/orchestrator/docker-compose-dev.yml | 88 ------------------ images/am-pod.png | Bin 0 -> 18177 bytes images/am.png | Bin 0 -> 74927 bytes images/cf.png | Bin 0 -> 90831 bytes 17 files changed, 39 insertions(+), 272 deletions(-) delete mode 100644 fabric_cf/authority/docker-compose-dev.yml delete mode 100644 fabric_cf/broker/docker-compose-dev.yml delete mode 100644 fabric_cf/orchestrator/docker-compose-dev.yml create mode 100644 images/am-pod.png create mode 100644 images/am.png create mode 100644 images/cf.png diff --git a/Dockerfile-auth b/Dockerfile-auth index 29edd90b..97b66e0a 100644 --- a/Dockerfile-auth +++ b/Dockerfile-auth @@ -7,7 +7,8 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 -COPY . /usr/src/app/ +COPY requirements.txt /usr/src/app/ +COPY fabric_cf /usr/src/app/ RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/Dockerfile-broker b/Dockerfile-broker index b13367eb..92e424f1 100644 --- a/Dockerfile-broker +++ b/Dockerfile-broker @@ -7,7 +7,8 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 -COPY . /usr/src/app/ +COPY requirements.txt /usr/src/app/ +COPY fabric_cf /usr/src/app/ RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/Dockerfile-cf b/Dockerfile-cf index f02379e1..25fc3ad5 100644 --- a/Dockerfile-cf +++ b/Dockerfile-cf @@ -7,7 +7,8 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 -COPY . /usr/src/app/ +COPY requirements.txt /usr/src/app/ +COPY fabric_cf /usr/src/app/ RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/Dockerfile-orchestrator b/Dockerfile-orchestrator index 3a6a5dac..eb641a16 100644 --- a/Dockerfile-orchestrator +++ b/Dockerfile-orchestrator @@ -8,7 +8,8 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 EXPOSE 8700 -COPY . /usr/src/app/ +COPY requirements.txt /usr/src/app/ +COPY fabric_cf /usr/src/app/ RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/README.md b/README.md index c5f02541..e04d6408 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,14 @@ Broker is an agent of CF that collects resource availability information from mu AM is a CF agent responsible for managing aggregate resources. Is under the control of the owner of the aggregate. Provides promises of resources to brokers and controllers/ orchestrators. More details can be found [here](fabric_cf/authority/Readme.md) ## Orchestrator -Orchestrator is an agent of CF that makes allocation decisions (embedding) of user requests into available resources. Communicates with user to collect slice requests, communicates with broker or aggregate managers to collect resource promises, communicates with aggregate managers to provision promised resources. Creates slices, configures resources, maintains their state, modifies slices and slivers. More details can be found [here](fabric_cf/orchestrator/Readme.md) +Orchestrator is an agent of CF that makes allocation decisions (embedding) of user requests into available resources. Communicates with user to collect slice requests, communicates with broker or aggregate managers to collect resource promises, communicates with aggregate managers to provision promised resources. Creates slices, configures resources, maintains their state, modifies slices and slivers. More details can be found [here](fabric_cf/orchestrator/Readme.md) + +## Architecture +The following diagram depicts an overall architecture for the Control Framework. +![Architecture](./images/cf.png) ## Requirements -Python 3.7+ +Python 3.9+ ## Build Docker Images diff --git a/fabric_cf/__init__.py b/fabric_cf/__init__.py index ca1bfa58..de4f206b 100644 --- a/fabric_cf/__init__.py +++ b/fabric_cf/__init__.py @@ -1 +1 @@ -__VERSION__ = "1.0rc2" +__VERSION__ = "1.0" diff --git a/fabric_cf/actor/core/container/globals.py b/fabric_cf/actor/core/container/globals.py index d04fb051..4b56e2df 100644 --- a/fabric_cf/actor/core/container/globals.py +++ b/fabric_cf/actor/core/container/globals.py @@ -50,6 +50,7 @@ logging.addLevelName(logging.TRACE, "TRACE") logging.Logger.trace = lambda inst, msg, *args, **kwargs: inst.log(logging.TRACE, msg, *args, **kwargs) logging.trace = lambda msg, *args, **kwargs: logging.log(logging.TRACE, msg, *args, **kwargs) +log = logging.getLogger(__name__) class Globals: @@ -105,7 +106,7 @@ def make_logger(self): log_level = logging.INFO # Set up the root logger - log = logging.getLogger(log_config.get(Constants.PROPERTY_CONF_LOGGER, None)) + #log = logging.getLogger(log_config.get(Constants.PROPERTY_CONF_LOGGER, None)) log.setLevel(log_level) log_format = \ '%(asctime)s - %(name)s - {%(filename)s:%(lineno)d} - [%(threadName)s] - %(levelname)s - %(message)s' diff --git a/fabric_cf/authority/Readme.md b/fabric_cf/authority/Readme.md index 3b77ea13..13e37900 100644 --- a/fabric_cf/authority/Readme.md +++ b/fabric_cf/authority/Readme.md @@ -2,10 +2,28 @@ An aggregate manager(AM) controls access to the substrate components. It controls some set of infrastructure resources in a particular site consisting of a set of servers, storage units, network elements or other components under common ownership and control. AMs inform brokers about available resources by passing to the resource advertisement information models. AMs may be associated with more than one broker and the partitioning of resources between brokers is the decision left to the AM. Oversubscription is possible, depending on the deployment needs. FABRIC enables a substrate provider to outsource resource arbitration and calendar scheduling to a broker. By delegating resources to the broker, the AM consents to the broker’s policies, and agrees to try to honor reservations issued by the broker if the user has authorization on the AM. -Besides common code, each AM type has specific plugins that determine its resource allocation behavior (Resource Management Policy) and the specific actions it takes to provision a sliver (Resource Handler). Both plugins are invoked by AM common core code based on the resource type or type of request being considered. +Besides, common code each AM type has specific plugins that determine its resource allocation behavior (Resource Management Policy) and the specific actions it takes to provision a sliver (Resource Handler). Both plugins are invoked by AM common core code based on the resource type or type of request being considered. More information on AM handlers can be found [here](https://github.com/fabric-testbed/AMHandlers). + +AM runs as a set of four container depicted in the picture below. +![AM Pod](../../images/am-pod.png) + +- AM: runs the Control Framework AM +- Postgres: database maintains slices and reservation information +- Neo4j: Aggregate Substrate information i.e. Aggregate Resource Model is maintained in Neo4j +- PDP: Policy Definition point used by AM to authorize user requests + +An overview of AM thread model is shown below: +![Thread Model](../../images/am.png) + +- Main : spawns all threads, loads config, starts prometheus exporter +- Actor Clock : delivers a periodic event to Actor Main thread based on the time interval configured +- Actor : Kernel thread responsible for processing various requested operations on slices/reservaations +- Kafka Producer : Thread pool responsible for sending outgoing messages from AM over Kafka +- Timer : Timer thread to timeout requests such as claim +- Kafka Consumer : Consumer thread responsible for processing incoming messages for AM over Kafka +- Ansible Processor : Responsible for invoking Handler depending on the resource type +- Handler Process pool : Process pool for running handler ansible scripts -NOTE: Authority container is still built on Pyhon3.8 because of an open BUG on Python 3.9 which causes ansible failures. -https://github.com/dask/distributed/issues/4168 ## Configuration `config.site.am.yaml` depicts an example config file for an Aggregate Manager. ### Pre-requisites @@ -31,14 +49,9 @@ Run the `setup.sh` script to set up an Aggregate Manager. User is expected to sp - Path to Aggregate Resource Model i.e. graphml - Path to Handler Config File -#### Production ``` ./setup.sh site1-am password ./config.site.am.yaml ../../neo4j/RENCI-ad.graphml ./vm_handler_config.yml ``` -#### Development -``` -./setup.sh site1-am password ./config.site.am.yaml ../../neo4j/RENCI-ad.graphml dev -``` ### Environment and Configuration The script `setup.sh` generates directory for the AM, which has `.env` file which contains Environment variables for `docker-compose.yml` to use diff --git a/fabric_cf/authority/docker-compose-dev.yml b/fabric_cf/authority/docker-compose-dev.yml deleted file mode 100644 index b0a83c69..00000000 --- a/fabric_cf/authority/docker-compose-dev.yml +++ /dev/null @@ -1,78 +0,0 @@ -version: '3.6' -services: - - neo4j: - image: fabrictestbed/neo4j-apoc:4.0.3 - container_name: site1-am-neo4j - user: ${NEO4J_UID:-1000}:${NEO4J_GID:-1000} - restart: always - ports: - - 0.0.0.0:7474:7474 # for HTTP - - 0.0.0.0:7473:7473 # for HTTPS - - 0.0.0.0:7687:7687 # for Bolt - volumes: - - ${NEO4J_DATA_PATH_HOST:-$(pwd)/neo4j/data}:${NEO4J_DATA_PATH_DOCKER:-/data} - - ${NEO4J_IMPORTS_PATH_HOST:-$(pwd)/neo4j/imports}:${NEO4J_IMPORTS_PATH_DOCKER:-/imports} - - ${NEO4J_LOGS_PATH_HOST:-$(pwd)/neo4j/logs}:${NEO4J_LOGS_PATH_DOCKER:-/logs} - - ../../../neo4j/certs/fullchain.pem:/ssl/neo4j.cert:ro # SSL development certificate - - ../../../neo4j/certs/privkey.pem:/ssl/neo4j.key:ro # SSL development key - environment: - - NEO4J_AUTH=${NEO4J_USER:-neo4j}/${NEO4J_PASS:-password} - - NEO4J_dbms_connector_bolt_advertised__address=${NEO4J_dbms_connector_bolt_advertised__address:-0.0.0.0:7687} - - NEO4J_dbms_connector_bolt_listen__address=${NEO4J_dbms_connector_bolt_advertised__address:-0.0.0.0:7687} - - NEO4J_dbms_connector_http_advertised__address=${NEO4J_dbms_connector_http_advertised__address:-0.0.0.0:7474} - - NEO4J_dbms_connector_http_listen__address=${NEO4J_dbms_connector_http_advertised__address:-0.0.0.0:7474} - - NEO4J_dbms_connector_https_advertised__address=${NEO4J_dbms_connector_https_advertised__address:-0.0.0.0:7473} - - NEO4J_dbms_connector_https_listen__address=${NEO4J_dbms_connector_https_advertised__address:-0.0.0.0:7473} - database: - image: fabrictestbed/postgres:12.3 - container_name: site1-am-db - restart: always - volumes: - - ./pg_data/data:${PGDATA:-/var/lib/postgresql/data} - - ./pg_data/logs:${POSTGRES_INITDB_WALDIR:-/var/log/postgresql} - environment: - - POSTGRES_HOST=${POSTGRES_HOST:-database} - - POSTGRES_PORT=5432 - - POSTGRES_MULTIPLE_DATABASES=${POSTGRES_DB:-postgres} - - POSTGRES_USER=${POSTGRES_USER:-postgres} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-site-am} - - PGDATA=${PGDATA:-/var/lib/postgresql/data} - ports: - - 0.0.0.0:8432:5432 - pdp: - image: fabrictestbed/authzforce-pdp:3.1.0 - container_name: site1-am-pdp - restart: always - user: ${PDP_UID:-1000}:${PDP_GID:-1000} - ports: - - 0.0.0.0:8080:8080 - - 0.0.0.0:8443:8443 - volumes: - - ${PDP_NEW_CONF_PATH_HOST:-$(pwd)/newconf}:/conf - - ${PDP_NEW_POLICIES_PATH_HOST:-$(pwd)/newpolicies}:/policies - am: - build: - context: ../../../ - dockerfile: Dockerfile-auth - image: authority:latest - container_name: site1-am - restart: always - depends_on: - - database - - neo4j - ports: - - 10.0.0.0:1000:11000 - volumes: - - ./neo4j:/usr/src/app/neo4j - - ./config.yaml:/etc/fabric/actor/config/config.yaml - - ./arm.graphml:/etc/fabric/actor/config/neo4j/arm.graphml - - ./logs/:/var/log/actor - - ../../../secrets/snakeoil-ca-1.crt:/etc/fabric/message_bus/ssl/cacert.pem - - ../../../secrets/kafkacat1.client.key:/etc/fabric/message_bus/ssl/client.key - - ../../../secrets/kafkacat1-ca1-signed.pem:/etc/fabric/message_bus/ssl/client.pem - #- ./state_recovery.lock:/usr/src/app/state_recovery.lock -networks: - default: - external: - name: controlframework_default diff --git a/fabric_cf/authority/docker-compose.yml b/fabric_cf/authority/docker-compose.yml index 10f0a560..88c349a8 100644 --- a/fabric_cf/authority/docker-compose.yml +++ b/fabric_cf/authority/docker-compose.yml @@ -46,6 +46,7 @@ services: - ${PDP_NEW_CONF_PATH_HOST:-$(pwd)/newconf}:/conf - ${PDP_NEW_POLICIES_PATH_HOST:-$(pwd)/newpolicies}:/policies am: + init: true build: context: ../../../ dockerfile: Dockerfile-auth diff --git a/fabric_cf/broker/Readme.md b/fabric_cf/broker/Readme.md index 06b99576..ca52493b 100644 --- a/fabric_cf/broker/Readme.md +++ b/fabric_cf/broker/Readme.md @@ -24,16 +24,9 @@ Run the `setup.sh` script to set up a Broker. User is expected to specify follow - Neo4j Password to be used - Path to the config file for Broker - -#### Production ``` ./setup.sh broker password ./config.broker.yaml ``` -#### Development -``` -./setup.sh broker password ./config.broker.yaml dev -``` - ### Environment and Configuration The script `setup.sh` generates directory for the Broker, which has `.env` file which contains Environment variables for `docker-compose.yml` to use diff --git a/fabric_cf/broker/docker-compose-dev.yml b/fabric_cf/broker/docker-compose-dev.yml deleted file mode 100644 index 26e38ff2..00000000 --- a/fabric_cf/broker/docker-compose-dev.yml +++ /dev/null @@ -1,77 +0,0 @@ -version: '3.6' -services: - - neo4j: - image: fabrictestbed/neo4j-apoc:4.0.3 - container_name: broker-neo4j - user: ${NEO4J_UID:-1000}:${NEO4J_GID:-1000} - restart: always - ports: - - 0.0.0.0:8474:8474 # for HTTP - - 0.0.0.0:8473:8473 # for HTTPS - - 0.0.0.0:8687:8687 # for Bolt - volumes: - - ${NEO4J_DATA_PATH_HOST:-$(pwd)/neo4j/data}:${NEO4J_DATA_PATH_DOCKER:-/data} - - ${NEO4J_IMPORTS_PATH_HOST:-$(pwd)/neo4j/imports}:${NEO4J_IMPORTS_PATH_DOCKER:-/imports} - - ${NEO4J_LOGS_PATH_HOST:-$(pwd)/neo4j/logs}:${NEO4J_LOGS_PATH_DOCKER:-/logs} - - ../../../neo4j/certs/fullchain.pem:/ssl/neo4j.cert:ro # SSL development certificate - - ../../../neo4j/certs/privkey.pem:/ssl/neo4j.key:ro # SSL development key - environment: - - NEO4J_AUTH=${NEO4J_USER:-neo4j}/${NEO4J_PASS:-password} - - NEO4J_dbms_connector_bolt_advertised__address=${NEO4J_dbms_connector_bolt_advertised__address:-0.0.0.0:7687} - - NEO4J_dbms_connector_bolt_listen__address=${NEO4J_dbms_connector_bolt_advertised__address:-0.0.0.0:7687} - - NEO4J_dbms_connector_http_advertised__address=${NEO4J_dbms_connector_http_advertised__address:-0.0.0.0:7474} - - NEO4J_dbms_connector_http_listen__address=${NEO4J_dbms_connector_http_advertised__address:-0.0.0.0:7474} - - NEO4J_dbms_connector_https_advertised__address=${NEO4J_dbms_connector_https_advertised__address:-0.0.0.0:7473} - - NEO4J_dbms_connector_https_listen__address=${NEO4J_dbms_connector_https_advertised__address:-0.0.0.0:7473} - database: - image: fabrictestbed/postgres:12.3 - container_name: broker-db - restart: always - volumes: - - ./pg_data/data:${PGDATA:-/var/lib/postgresql/data} - - ./pg_data/logs:${POSTGRES_INITDB_WALDIR:-/var/log/postgresql} - environment: - - POSTGRES_HOST=${POSTGRES_HOST:-database} - - POSTGRES_PORT=5432 - - POSTGRES_MULTIPLE_DATABASES=${POSTGRES_DB:-postgres} - - POSTGRES_USER=${POSTGRES_USER:-postgres} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-broker} - - PGDATA=${PGDATA:-/var/lib/postgresql/data} - ports: - - 0.0.0.0:9432:5432 - pdp: - image: fabrictestbed/authzforce-pdp:3.1.0 - container_name: broker-pdp - restart: always - user: ${PDP_UID:-1000}:${PDP_GID:-1000} - ports: - - 0.0.0.0:8084:8080 - - 0.0.0.0:8444:8443 - volumes: - - ${PDP_NEW_CONF_PATH_HOST:-$(pwd)/newconf}:/conf - - ${PDP_NEW_POLICIES_PATH_HOST:-$(pwd)/newpolicies}:/policies - broker: - build: - context: ../../../ - dockerfile: Dockerfile-broker - image: broker:latest - container_name: broker - restart: always - depends_on: - - database - - neo4j - ports: - - 0.0.0.0:11001:11000 - volumes: - - ./neo4j:/usr/src/app/neo4j - - ./config.yaml:/etc/fabric/actor/config/config.yaml - - ./logs/:/var/log/actor - - ../../../secrets/snakeoil-ca-1.crt:/etc/fabric/message_bus/ssl/cacert.pem - - ../../../secrets/kafkacat1.client.key:/etc/fabric/message_bus/ssl/client.key - - ../../../secrets/kafkacat1-ca1-signed.pem:/etc/fabric/message_bus/ssl/client.pem - #- ./state_recovery.lock:/usr/src/app/state_recovery.lock -networks: - default: - external: - name: controlframework_default diff --git a/fabric_cf/orchestrator/README.md b/fabric_cf/orchestrator/README.md index 5709b7cf..905cba77 100644 --- a/fabric_cf/orchestrator/README.md +++ b/fabric_cf/orchestrator/README.md @@ -131,15 +131,9 @@ Run the `setup.sh` script to set up a Orchestrator. User is expected to specify - Neo4j Password to be used - Path to the config file for Orchestrator - -#### Production ``` ./setup.sh orchestrator password ./config.orchestrator.yaml ``` -#### Development -``` -./setup.sh orchestrator password ./config.orchestrator.yaml dev -``` ### Environment and Configuration diff --git a/fabric_cf/orchestrator/docker-compose-dev.yml b/fabric_cf/orchestrator/docker-compose-dev.yml deleted file mode 100644 index 811480f9..00000000 --- a/fabric_cf/orchestrator/docker-compose-dev.yml +++ /dev/null @@ -1,88 +0,0 @@ -version: '3.6' -services: - nginx: - image: library/nginx:1 - container_name: orchestrator-nginx - ports: - - 0.0.0.0:8443:443 - volumes: - - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - - ./certs/fullchain.pem:/etc/ssl/public.pem - - ./certs/privkey.pem:/etc/ssl/private.pem - restart: always - neo4j: - image: fabrictestbed/neo4j-apoc:4.0.3 - container_name: orchestrator-neo4j - restart: always - user: ${NEO4J_UID:-1000}:${NEO4J_GID:-1000} - ports: - - 0.0.0.0:9474:9474 # for HTTP - - 0.0.0.0:9473:9473 # for HTTPS - - 0.0.0.0:9687:9687 # for Bolt - volumes: - - ${NEO4J_DATA_PATH_HOST:-$(pwd)/neo4j/data}:${NEO4J_DATA_PATH_DOCKER:-/data} - - ${NEO4J_IMPORTS_PATH_HOST:-$(pwd)/neo4j/imports}:${NEO4J_IMPORTS_PATH_DOCKER:-/imports} - - ${NEO4J_LOGS_PATH_HOST:-$(pwd)/neo4j/logs}:${NEO4J_LOGS_PATH_DOCKER:-/logs} - - ../../../neo4j/certs/fullchain.pem:/ssl/neo4j.cert:ro # SSL development certificate - - ../../../neo4j/certs/privkey.pem:/ssl/neo4j.key:ro # SSL development key - environment: - - NEO4J_AUTH=${NEO4J_USER:-neo4j}/${NEO4J_PASS:-password} - - NEO4J_dbms_connector_bolt_advertised__address=${NEO4J_dbms_connector_bolt_advertised__address:-0.0.0.0:7687} - - NEO4J_dbms_connector_bolt_listen__address=${NEO4J_dbms_connector_bolt_advertised__address:-0.0.0.0:7687} - - NEO4J_dbms_connector_http_advertised__address=${NEO4J_dbms_connector_http_advertised__address:-0.0.0.0:7474} - - NEO4J_dbms_connector_http_listen__address=${NEO4J_dbms_connector_http_advertised__address:-0.0.0.0:7474} - - NEO4J_dbms_connector_https_advertised__address=${NEO4J_dbms_connector_https_advertised__address:-0.0.0.0:7473} - - NEO4J_dbms_connector_https_listen__address=${NEO4J_dbms_connector_https_advertised__address:-0.0.0.0:7473} - database: - image: fabrictestbed/postgres:12.3 - container_name: orchestrator-db - restart: always - volumes: - - ./pg_data/data:${PGDATA:-/var/lib/postgresql/data} - - ./pg_data/logs:${POSTGRES_INITDB_WALDIR:-/var/log/postgresql} - environment: - - POSTGRES_HOST=${POSTGRES_HOST:-database} - - POSTGRES_PORT=5432 - - POSTGRES_MULTIPLE_DATABASES=${POSTGRES_DB:-postgres} - - POSTGRES_USER=${POSTGRES_USER:-postgres} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-orchestrator} - - PGDATA=${PGDATA:-/var/lib/postgresql/data} - ports: - - 0.0.0.0:10432:5432 - pdp: - image: fabrictestbed/authzforce-pdp:3.1.0 - container_name: orchestrator-pdp - restart: always - user: ${PDP_UID:-1000}:${PDP_GID:-1000} - ports: - - 0.0.0.0:8082:8080 - - 0.0.0.0:8445:8443 - volumes: - - ${PDP_NEW_CONF_PATH_HOST:-$(pwd)/newconf}:/conf - - ${PDP_NEW_POLICIES_PATH_HOST:-$(pwd)/newpolicies}:/policies - orchestrator: - build: - context: ../../../ - dockerfile: Dockerfile-orchestrator - image: orchestrator:latest - container_name: orchestrator - restart: always - depends_on: - - database - - neo4j - ports: - - 0.0.0.0:8700:8700 - - 0.0.0.0:11002:11000 - volumes: - - ./neo4j:/usr/src/app/neo4j - - ./config.yaml:/etc/fabric/actor/config/config.yaml - - ./logs/:/var/log/actor - - ../../../secrets/snakeoil-ca-1.crt:/etc/fabric/message_bus/ssl/cacert.pem - - ../../../secrets/kafkacat1.client.key:/etc/fabric/message_bus/ssl/client.key - - ../../../secrets/kafkacat1-ca1-signed.pem:/etc/fabric/message_bus/ssl/client.pem - #- ./state_recovery.lock:/usr/src/app/state_recovery.lock - -networks: - default: - external: - name: controlframework_default diff --git a/images/am-pod.png b/images/am-pod.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2396117eebabca46c380e309c878dc4f72b54c GIT binary patch literal 18177 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
  • UdL4*+JOl#-1ZI?xxaQ>wCi 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 literal 0 HcmV?d00001 diff --git a/images/cf.png b/images/cf.png new file mode 100644 index 0000000000000000000000000000000000000000..3f6eaa6af607b6b8d8fec1a7cfa3762085fc0a53 GIT binary patch literal 90831 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≧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 literal 0 HcmV?d00001 From 0a63e829c75b32d9da0b51616d563df674a8bbed Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Wed, 21 Jul 2021 10:23:48 -0400 Subject: [PATCH 2/6] changes to support logging for process pools --- fabric_cf/__init__.py | 2 +- fabric_cf/actor/core/common/constants.py | 2 + fabric_cf/actor/core/container/globals.py | 16 ++++---- .../handlers/ansible_handler_processor.py | 4 +- fabric_cf/actor/handlers/handler_base.py | 35 ++++++++++++------ fabric_cf/actor/handlers/no_op_handler.py | 37 +++++++++---------- 6 files changed, 54 insertions(+), 42 deletions(-) diff --git a/fabric_cf/__init__.py b/fabric_cf/__init__.py index de4f206b..f86566e4 100644 --- a/fabric_cf/__init__.py +++ b/fabric_cf/__init__.py @@ -1 +1 @@ -__VERSION__ = "1.0" +__VERSION__ = "1.0rc3" diff --git a/fabric_cf/actor/core/common/constants.py b/fabric_cf/actor/core/common/constants.py index b5bb6202..c6668cd2 100644 --- a/fabric_cf/actor/core/common/constants.py +++ b/fabric_cf/actor/core/common/constants.py @@ -274,3 +274,5 @@ class Constants: DEFAULT_VLAN_OFFSET = 10 VLAN_START = 1 VLAN_END = 4096 + + CONFIG_PROPERTIES_FILE = "config.properties.file" diff --git a/fabric_cf/actor/core/container/globals.py b/fabric_cf/actor/core/container/globals.py index 4b56e2df..f3d47994 100644 --- a/fabric_cf/actor/core/container/globals.py +++ b/fabric_cf/actor/core/container/globals.py @@ -50,7 +50,6 @@ logging.addLevelName(logging.TRACE, "TRACE") logging.Logger.trace = lambda inst, msg, *args, **kwargs: inst.log(logging.TRACE, msg, *args, **kwargs) logging.trace = lambda msg, *args, **kwargs: logging.log(logging.TRACE, msg, *args, **kwargs) -log = logging.getLogger(__name__) class Globals: @@ -70,22 +69,21 @@ def __init__(self): self.lock = threading.Lock() self.jwt_validator = None - def make_logger(self): + def make_logger(self, *, log_config: dict = None): """ Detects the path and level for the log file from the actor config and sets up a logger. Instead of detecting the path and/or level from the config, a custom path and/or level for the log file can be passed as optional arguments. - :param log_path: Path to custom log file - :param log_level: Custom log level + :param log_config: Log config :return: logging.Logger object """ + if log_config is None: + if self.config is None: + raise RuntimeError('No config information available') - # Get the log path - if self.config is None: - raise RuntimeError('No config information available') - log_config = self.config.get_global_config().get_logging() + log_config = self.config.get_global_config().get_logging() if log_config is None: raise RuntimeError('No logging config information available') @@ -106,7 +104,7 @@ def make_logger(self): log_level = logging.INFO # Set up the root logger - #log = logging.getLogger(log_config.get(Constants.PROPERTY_CONF_LOGGER, None)) + log = logging.getLogger(log_config.get(Constants.PROPERTY_CONF_LOGGER, None)) log.setLevel(log_level) log_format = \ '%(asctime)s - %(name)s - {%(filename)s:%(lineno)d} - [%(threadName)s] - %(levelname)s - %(message)s' diff --git a/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py b/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py index d3aba521..c1c745ed 100644 --- a/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py +++ b/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py @@ -48,6 +48,8 @@ def __init__(self): self.thread = None self.future_lock = threading.Condition() self.stopped = False + from fabric_cf.actor.core.container.globals import GlobalsSingleton + self.log_config = GlobalsSingleton.get().get_config().get_global_config().get_logging() def __getstate__(self): state = self.__dict__.copy() @@ -136,7 +138,7 @@ def invoke_handler(self, unit: ConfigToken, operation: str): handler_class = ReflectionUtils.create_instance_with_params(module_name=handler.get_module_name(), class_name=handler.get_class_name()) - handler_obj = handler_class(self.logger, handler.get_properties()) + handler_obj = handler_class(self.log_config, handler.get_properties()) future = None if operation == Constants.TARGET_CREATE: diff --git a/fabric_cf/actor/handlers/handler_base.py b/fabric_cf/actor/handlers/handler_base.py index 52d4b2d3..8605d287 100644 --- a/fabric_cf/actor/handlers/handler_base.py +++ b/fabric_cf/actor/handlers/handler_base.py @@ -23,11 +23,13 @@ # # # Author: Komal Thareja (kthare10@renci.org) +import logging from abc import ABC, abstractmethod from typing import Tuple import yaml +from fabric_cf.actor.core.common.constants import Constants from fabric_cf.actor.core.plugins.handlers.config_token import ConfigToken @@ -36,18 +38,27 @@ class ConfigurationException(Exception): class HandlerBase(ABC): - @staticmethod - def load_config(path): - """ - Read config file - """ - if path is None: - raise ConfigurationException("No data source has been specified") - print("Reading config file: {}".format(path)) - config_dict = None - with open(path) as f: - config_dict = yaml.safe_load(f) - return config_dict + def __init__(self, log_config: dict, properties: dict): + self.log_config = log_config + self.properties = properties + self.logger = None + self.config = None + + def get_config(self) -> dict: + if self.config is None: + config_properties_file = self.properties.get(Constants.CONFIG_PROPERTIES_FILE, None) + if config_properties_file is None: + raise ConfigurationException("No data source has been specified") + self.get_logger().debug(f"Reading config file: {config_properties_file}") + with open(config_properties_file) as f: + self.config = yaml.safe_load(f) + return self.config + + def get_logger(self) -> logging.Logger: + if self.logger is None: + from fabric_cf.actor.core.container.globals import GlobalsSingleton + self.logger = GlobalsSingleton.get().make_logger(log_config=self.log_config) + return self.logger @abstractmethod def create(self, unit: ConfigToken) -> Tuple[dict, ConfigToken]: diff --git a/fabric_cf/actor/handlers/no_op_handler.py b/fabric_cf/actor/handlers/no_op_handler.py index 5a5502f0..7722e2da 100644 --- a/fabric_cf/actor/handlers/no_op_handler.py +++ b/fabric_cf/actor/handlers/no_op_handler.py @@ -23,7 +23,6 @@ # # # Author: Komal Thareja (kthare10@renci.org) -import time import traceback from typing import Tuple @@ -33,17 +32,17 @@ class NoOpHandler(HandlerBase): - def __init__(self, logger, properties: dict): - self.logger = logger - self.properties = properties + def __init__(self, log_config: dict, properties: dict): + super().__init__(log_config=log_config, properties=properties) def create(self, unit: ConfigToken) -> Tuple[dict, ConfigToken]: result = None try: - self.logger.info(f"Create invoked for unit: {unit}") - unit.sliver.state = 'active' - unit.sliver.instance_name = 'instance_001' - unit.sliver.management_ip = '1.2.3.4' + self.get_logger().info(f"Create invoked for unit: {unit}") + sliver = unit.get_sliver() + sliver.state = 'active' + sliver.instance_name = 'instance_001' + sliver.management_ip = '1.2.3.4' result = {Constants.PROPERTY_TARGET_NAME: Constants.TARGET_CREATE, Constants.PROPERTY_TARGET_RESULT_CODE: Constants.RESULT_CODE_OK, Constants.PROPERTY_ACTION_SEQUENCE_NUMBER: 0} @@ -51,17 +50,17 @@ def create(self, unit: ConfigToken) -> Tuple[dict, ConfigToken]: result = {Constants.PROPERTY_TARGET_NAME: Constants.TARGET_CREATE, Constants.PROPERTY_TARGET_RESULT_CODE: Constants.RESULT_CODE_EXCEPTION, Constants.PROPERTY_ACTION_SEQUENCE_NUMBER: 0} - self.logger.error(e) - self.logger.error(traceback.format_exc()) + self.get_logger().error(e) + self.get_logger().error(traceback.format_exc()) finally: - self.logger.info(f"Create completed") + self.get_logger().info(f"Create completed") return result, unit def delete(self, unit: ConfigToken) -> Tuple[dict, ConfigToken]: result = None try: - self.logger.info(f"Delete invoked for unit: {unit}") + self.get_logger().info(f"Delete invoked for unit: {unit}") result = {Constants.PROPERTY_TARGET_NAME: Constants.TARGET_DELETE, Constants.PROPERTY_TARGET_RESULT_CODE: Constants.RESULT_CODE_OK, Constants.PROPERTY_ACTION_SEQUENCE_NUMBER: 0} @@ -69,26 +68,26 @@ def delete(self, unit: ConfigToken) -> Tuple[dict, ConfigToken]: result = {Constants.PROPERTY_TARGET_NAME: Constants.TARGET_DELETE, Constants.PROPERTY_TARGET_RESULT_CODE: Constants.RESULT_CODE_EXCEPTION, Constants.PROPERTY_ACTION_SEQUENCE_NUMBER: 0} - self.logger.error(e) - self.logger.error(traceback.format_exc()) + self.get_logger().error(e) + self.get_logger().error(traceback.format_exc()) finally: - self.logger.info(f"Delete completed") + self.get_logger().info(f"Delete completed") return result, unit def modify(self, unit: ConfigToken) -> Tuple[dict, ConfigToken]: result = None try: - self.logger.info(f"Modify invoked for unit: {unit}") + self.get_logger().info(f"Modify invoked for unit: {unit}") result = {Constants.PROPERTY_TARGET_NAME: Constants.TARGET_MODIFY, Constants.PROPERTY_TARGET_RESULT_CODE: Constants.RESULT_CODE_OK, Constants.PROPERTY_ACTION_SEQUENCE_NUMBER: 0} except Exception as e: - self.logger.error(e) - self.logger.error(traceback.format_exc()) + self.get_logger().error(e) + self.get_logger().error(traceback.format_exc()) result = {Constants.PROPERTY_TARGET_NAME: Constants.TARGET_MODIFY, Constants.PROPERTY_TARGET_RESULT_CODE: Constants.RESULT_CODE_EXCEPTION, Constants.PROPERTY_ACTION_SEQUENCE_NUMBER: 0} finally: - self.logger.info(f"Modify completed") + self.get_logger().info(f"Modify completed") return result, unit From 1abb4dc1e7b4d8e5d11d9bd3929485b614e827b1 Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Wed, 21 Jul 2021 10:35:14 -0400 Subject: [PATCH 3/6] update am handler version number --- Dockerfile-auth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile-auth b/Dockerfile-auth index 97b66e0a..d06ce519 100644 --- a/Dockerfile-auth +++ b/Dockerfile-auth @@ -14,7 +14,7 @@ RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" RUN mkdir -p "/var/log/actor" RUN cp /usr/local/lib/python3.9/site-packages/fabric_mb/message_bus/schema/*.avsc /etc/fabric/message_bus/schema -RUN pip3 install fabric-am-handlers==1.0rc1 +RUN pip3 install fabric-am-handlers==1.0rc2 ENTRYPOINT ["python3"] CMD ["-m", "fabric_cf.authority"] From a6f92d36965fc0b2412a0a483e0408417f74a212 Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Wed, 21 Jul 2021 13:14:14 -0400 Subject: [PATCH 4/6] update readme link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e04d6408..952add24 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Broker is an agent of CF that collects resource availability information from mu AM is a CF agent responsible for managing aggregate resources. Is under the control of the owner of the aggregate. Provides promises of resources to brokers and controllers/ orchestrators. More details can be found [here](fabric_cf/authority/Readme.md) ## Orchestrator -Orchestrator is an agent of CF that makes allocation decisions (embedding) of user requests into available resources. Communicates with user to collect slice requests, communicates with broker or aggregate managers to collect resource promises, communicates with aggregate managers to provision promised resources. Creates slices, configures resources, maintains their state, modifies slices and slivers. More details can be found [here](fabric_cf/orchestrator/Readme.md) +Orchestrator is an agent of CF that makes allocation decisions (embedding) of user requests into available resources. Communicates with user to collect slice requests, communicates with broker or aggregate managers to collect resource promises, communicates with aggregate managers to provision promised resources. Creates slices, configures resources, maintains their state, modifies slices and slivers. More details can be found [here](fabric_cf/orchestrator/README.md) ## Architecture The following diagram depicts an overall architecture for the Control Framework. From 744c2f72a883321b826cb590ae2f1ed10dcc70af Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Wed, 21 Jul 2021 13:48:08 -0400 Subject: [PATCH 5/6] incorporate feedback --- Dockerfile-auth | 4 +++- fabric_cf/actor/boot/configuration.py | 6 ++++++ fabric_cf/actor/core/container/globals.py | 7 +++++++ .../core/plugins/handlers/ansible_handler_processor.py | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Dockerfile-auth b/Dockerfile-auth index d06ce519..442caeda 100644 --- a/Dockerfile-auth +++ b/Dockerfile-auth @@ -1,6 +1,8 @@ FROM python:3.9.0 MAINTAINER Komal Thareja +HANDLERS_VER=1.0rc2 + RUN mkdir -p /usr/src/app WORKDIR /usr/src/app VOLUME ["/usr/src/app"] @@ -14,7 +16,7 @@ RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" RUN mkdir -p "/var/log/actor" RUN cp /usr/local/lib/python3.9/site-packages/fabric_mb/message_bus/schema/*.avsc /etc/fabric/message_bus/schema -RUN pip3 install fabric-am-handlers==1.0rc2 +RUN pip3 install fabric-am-handlers==HANDLERS_VER ENTRYPOINT ["python3"] CMD ["-m", "fabric_cf.authority"] diff --git a/fabric_cf/actor/boot/configuration.py b/fabric_cf/actor/boot/configuration.py index 0d4aefbb..54238af6 100644 --- a/fabric_cf/actor/boot/configuration.py +++ b/fabric_cf/actor/boot/configuration.py @@ -398,6 +398,12 @@ def get_global_config(self) -> GlobalConfig: """ return self.global_config + def get_log_config(self) -> dict: + """ + Return Log config + """ + return self.global_config.get_logging() + def get_runtime_config(self) -> dict: """ Return Runtime Config diff --git a/fabric_cf/actor/core/container/globals.py b/fabric_cf/actor/core/container/globals.py index f3d47994..0120f85f 100644 --- a/fabric_cf/actor/core/container/globals.py +++ b/fabric_cf/actor/core/container/globals.py @@ -197,6 +197,13 @@ def get_config(self) -> Configuration: raise InitializationException(Constants.UNINITIALIZED_STATE) return self.config + def get_log_config(self) -> dict: + """ + Get the Log configuration + @return dict + """ + return self.get_config().get_log_config() + def get_kafka_config_admin_client(self) -> dict: """ Get Kafka Config Admin Client diff --git a/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py b/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py index c1c745ed..43266fe2 100644 --- a/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py +++ b/fabric_cf/actor/core/plugins/handlers/ansible_handler_processor.py @@ -49,7 +49,7 @@ def __init__(self): self.future_lock = threading.Condition() self.stopped = False from fabric_cf.actor.core.container.globals import GlobalsSingleton - self.log_config = GlobalsSingleton.get().get_config().get_global_config().get_logging() + self.log_config = GlobalsSingleton.get().get_log_config() def __getstate__(self): state = self.__dict__.copy() From bfdf3990d5876cb1eaf6364f51ea6f6bc0e0a57d Mon Sep 17 00:00:00 2001 From: Komal Thareja Date: Wed, 21 Jul 2021 14:29:08 -0400 Subject: [PATCH 6/6] fix fabric_cf location --- Dockerfile-auth | 2 +- Dockerfile-broker | 2 +- Dockerfile-cf | 2 +- Dockerfile-orchestrator | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile-auth b/Dockerfile-auth index 442caeda..171cb15b 100644 --- a/Dockerfile-auth +++ b/Dockerfile-auth @@ -10,7 +10,7 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 COPY requirements.txt /usr/src/app/ -COPY fabric_cf /usr/src/app/ +COPY fabric_cf /usr/src/app/fabric_cf RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/Dockerfile-broker b/Dockerfile-broker index 92e424f1..e3538918 100644 --- a/Dockerfile-broker +++ b/Dockerfile-broker @@ -8,7 +8,7 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 COPY requirements.txt /usr/src/app/ -COPY fabric_cf /usr/src/app/ +COPY fabric_cf /usr/src/app/fabric_cf RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/Dockerfile-cf b/Dockerfile-cf index 25fc3ad5..21edd5cf 100644 --- a/Dockerfile-cf +++ b/Dockerfile-cf @@ -8,7 +8,7 @@ VOLUME ["/usr/src/app"] EXPOSE 11000 COPY requirements.txt /usr/src/app/ -COPY fabric_cf /usr/src/app/ +COPY fabric_cf /usr/src/app/fabric_cf RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config" diff --git a/Dockerfile-orchestrator b/Dockerfile-orchestrator index eb641a16..bca31a55 100644 --- a/Dockerfile-orchestrator +++ b/Dockerfile-orchestrator @@ -9,7 +9,7 @@ EXPOSE 11000 EXPOSE 8700 COPY requirements.txt /usr/src/app/ -COPY fabric_cf /usr/src/app/ +COPY fabric_cf /usr/src/app/fabric_cf RUN pip3 install --no-cache-dir -r requirements.txt RUN mkdir -p "/etc/fabric/message_bus/schema" RUN mkdir -p "/etc/fabric/actor/config"