From 9141f448c3633a018469dc1ff4576c7b17b1747f Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 18 Mar 2021 12:58:20 -0700 Subject: [PATCH 01/45] First commit --- volttron/utils/rmq_setup.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 78e219d724..1c6b523a82 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -941,10 +941,15 @@ def prompt_shovels(vhome, verbose=False): shovel_config_file = os.path.join(vhome, 'rabbitmq_shovel_config.yml') if os.path.exists(shovel_config_file): - shovel_config = read_config_file(shovel_config_file) - else: - shovel_config = {} + prompt = "rabbitmq_shovel_config.yml exists in {} Do you wish to " \ + "use this file to configure shovels".format(shovel_config_file) + prompt = prompt_response(prompt, + valid_answers=y_or_n, + default='Y') + if prompt in y: + return + shovel_config = {} shovels = shovel_config.get('shovels', {}) prompt = 'Number of destination hosts to configure:' count = prompt_response(prompt, default=1) @@ -973,7 +978,6 @@ def prompt_shovels(vhome, verbose=False): shovels[host]['shovel-user'] = instance_name + "." + shovel_user #_log.debug("shovel_user: {}".format(shovel_user)) - certs_config = _prompt_csr_request(shovel_user, host, 'shovel', verbose) if not certs_config: # we did not get certificates - neither existing, nor through csr process From 3bff87b05c11ebcbfda63af93d7efa686e7e61ec Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 18 Mar 2021 14:39:57 -0700 Subject: [PATCH 02/45] Fixes Jira ticket 370 If existing rabbitmq shovel config file is available, user is prompted to whether use existing one or overwrite it --- volttron/utils/rmq_setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 1c6b523a82..3ba7c5c496 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -948,7 +948,10 @@ def prompt_shovels(vhome, verbose=False): default='Y') if prompt in y: return - + else: + _log.info("New input data will be used to overwrite existing " + "{}".format(shovel_config_file)) + shovel_config = {} shovels = shovel_config.get('shovels', {}) prompt = 'Number of destination hosts to configure:' From d75d4eb74794609342ca2cbbd2f76049025b1943 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Mon, 5 Apr 2021 13:02:44 -0700 Subject: [PATCH 03/45] Fixed Jira tickets 372, 370, 364. vcfg command now takes optional argument max-retries. Updated relevant documentation --- README.md | 6 +- .../multi-platform-rabbitmq-deployment.rst | 30 +++----- .../platform-configuration.rst | 27 ++++++-- docs/source/introduction/platform-install.rst | 4 +- .../rabbitmq/rabbitmq-ssl-auth.rst | 2 +- .../rabbitmq/rabbitmq-volttron.rst | 2 +- .../troubleshooting/troubleshooting-rmq.rst | 2 +- .../rabbitmq/rabbitmq_federation_config.yml | 2 - volttron/platform/instance_setup.py | 69 +++++++++---------- volttron/utils/rmq_setup.py | 55 +++++++-------- 10 files changed, 95 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index 539c55de5d..0d5dcf4284 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ You can deactivate the environment at any time by running `deactivate`. ##### 5. Create RabbitMQ setup for VOLTTRON: ```sh -vcfg --rabbitmq single [optional path to rabbitmq_config.yml] +vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] ``` Refer to [examples/configurations/rabbitmq/rabbitmq_config.yml](examples/configurations/rabbitmq/rabbitmq_config.yml) @@ -180,9 +180,9 @@ be configured. The VOLTTRON instance name will be read from volttron_home/config if available, if not the user will be prompted for VOLTTRON instance name. To run the scripts without any prompts, save the the VOLTTRON instance name in volttron_home/config file and pass the VOLTTRON home directory as a command line -argument. For example: `vcfg --vhome /home/vdev/.new_vhome --rabbitmq single` +argument. For example: `vcfg --vhome /home/vdev/.new_vhome rabbitmq single` -The Following are the example inputs for `vcfg --rabbitmq single` command. Since no +The Following are the example inputs for `vcfg rabbitmq single` command. Since no config file is passed the script prompts for necessary details. ```sh diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 79544690eb..3c4444e752 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -65,7 +65,7 @@ To setup federation on the VOLTTRON instance, run the following command on the d .. code-block:: bash - vcfg --rabbitmq federation [optional path to rabbitmq_federation_config.yml] + vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml] --max-tries [optional maximum CSR retry attempt] This establishes federation links to upstream servers. Once a federation link to the upstream server is established on @@ -165,8 +165,8 @@ upstream servers on the downstream server and make the VOLTTRON exchange .. code-block:: bash - vcfg --rabbitmq federation [optional path to rabbitmq_federation_config.yml - containing the details of the upstream hostname, port and vhost.] + vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml + containing the details of the upstream hostname, port and vhost.] --max-tries [optional maximum CSR retry attempt] Example configuration for federation is available @@ -347,7 +347,7 @@ To configure the VOLTTRON instance to setup shovel, run the following command on .. code-block:: bash - vcfg --rabbitmq shovel [optional path to rabbitmq_shovel_config.yml] + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] This sets up a shovel that forwards messages (either PubSub or RPC) from a local exchange to a remote exchange. @@ -424,7 +424,7 @@ creation process, a certificate signing request is made to the remote instance. accept or reject such a request through VOLTTRON admin web interface. If accepted, a bundle containing a certificate signed by the remote CA is sent as a response back to the local instance. Subsequently, shovel connection is established with these certificates. If the user already has certificates signed by the remote CA, then that will be used for -connection. Otherwise, the user can run the command ``vcfg --rabbitmq shovel`` and it will prompt the user to make a CSR request as part of shovel setup. +connection. Otherwise, the user can run the command ``vcfg rabbitmq shovel`` and it will prompt the user to make a CSR request as part of shovel setup. 1. Setup two VOLTTRON instances using the steps described in installation section. Please note that each instance should have a unique instance name. @@ -438,7 +438,7 @@ Please note that each instance should have a unique instance name. .. code-block:: bash - vcfg --rabbitmq shovel [optional path to rabbitmq_shovel_config.yml] + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] rabbitmq_shovel_config.yml should contain the details of the remote hostname, port, vhost, certificates for connecting to remote instance and list of topics to forward. @@ -592,7 +592,6 @@ agent. For such a request-response behavior, shovels need to be created on both rabbit-2: port: 5671 certificates: - csr: true private_cert: "path to private key" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt @@ -607,7 +606,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg --rabbitmq shovel [optional path to rabbitmq_shovel_config.yml + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] Example of RabbitMQ shovel configuration on v2 @@ -625,13 +624,13 @@ agent. For such a request-response behavior, shovels need to be created on both - [platform.historian, data.mover] virtual-host: v2 - This says that Hplatform historian on v2 wants to make RPC call to DataMover agent on v1. + This says that platform historian on v2 wants to make RPC call to DataMover agent on v1. a. On v1, run below command to setup a shovel from v1 to v2. .. code-block:: bash - vcfg --rabbitmq shovel [optional path to rabbitmq_shovel_config.yml + vcfg rabbitmq shovel [optional path to rabbitmq_shovel_config.yml b. Create a user on v2 with username set to remote agent's username ( for example, v1.data.mover i.e., .) and allow @@ -646,16 +645,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg --rabbitmq shovel [optional path to rabbitmq_shovel_config.yml - - d. Create a user on v1 with username set to remote agent's username - ( for example, v2.patform.historian i.e., .) and allow - the shovel access to the virtual host of the v1. - - .. code-block:: bash - - cd $RABBITMQ_HOME - vctl rabbitmq add-user + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] 3. Start Platform driver agent on v1 diff --git a/docs/source/deploying-volttron/platform-configuration.rst b/docs/source/deploying-volttron/platform-configuration.rst index e36fc8fb52..48bbedccd7 100644 --- a/docs/source/deploying-volttron/platform-configuration.rst +++ b/docs/source/deploying-volttron/platform-configuration.rst @@ -161,14 +161,31 @@ Optional Arguments - **--list-agents** - Display a list of configurable agents (Listener, Platform Driver, Platform Historian, VOLTTRON Central, VOLTTRON Central Platform) - **--agent AGENT [AGENT ...]** - Configure listed agents - - **--rabbitmq RABBITMQ [RABBITMQ ...]** - Configure rabbitmq for single instance, federation, or shovel either based - on configuration file in yml format or providing details when prompted. + - **--secure-agent-users** - Require that agents run as their own Unix users (this requires running + `scripts/secure_user_permissions.sh` as `sudo`) + +RabbitMQ Arguments +------------------ +vcfg command to configure a single RabbitMQ instance of VOLTTRON. Usage: .. code-block:: bash - vcfg --rabbitmq single|federation|shovel [rabbitmq config file]`` + vcfg rabbitmq single --config [Optional path to rabbitmq config file]`` - - **--secure-agent-users** - Require that agents run as their own Unix users (this requires running - `scripts/secure_user_permissions.sh` as `sudo`) +vcfg command to configure a federation instance of RabbitMQ VOLTTRON. + + Usage: + + .. code-block:: bash + + vcfg rabbitmq single --config [Optional path to rabbitmq federation config file] --max-retries [Optional maximum CSR retry attempt]`` + +vcfg command to create shovel to send messages from one RabbitMQ instance of VOLTTRON to another. + + Usage: + + .. code-block:: bash + + vcfg rabbitmq single --config [Optional path to shovel config file] --max-retries [Optional maximum CSR retry attempt]`` diff --git a/docs/source/introduction/platform-install.rst b/docs/source/introduction/platform-install.rst index 411b9ae58e..3312763c56 100644 --- a/docs/source/introduction/platform-install.rst +++ b/docs/source/introduction/platform-install.rst @@ -293,7 +293,7 @@ Step 5 - Configure RabbitMQ setup for VOLTTRON .. code-block:: bash - vcfg --rabbitmq single [optional path to rabbitmq_config.yml] + vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] A sample configuration file can be found in the VOLTTRON repository in **examples/configurations/rabbitmq/rabbitmq_config.yml**. At a minimum you will need to provide the host name and a unique common-name (under certificate-data) in the configuration file. @@ -332,7 +332,7 @@ exchange to capture unrouteable messages. The default behavior generates a certificate which is valid for a period of 1 year. -The Following are the example inputs for `vcfg --rabbitmq single` command. Since no config file is passed the script +The Following are the example inputs for `vcfg rabbitmq single` command. Since no config file is passed the script prompts for necessary details. .. code-block:: console diff --git a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst index 3d9b1b6d58..77e4a17dcb 100644 --- a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst +++ b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst @@ -90,7 +90,7 @@ The parameters of interest for SSL based configuration are We can then configure the VOLTTRON instance to use SSL based authentication with the below command: - vcfg --rabbitmq single + vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] When one creates a single instance of RabbitMQ, the following is created / re-created in the VOLTTRON_HOME/certificates directory: diff --git a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst index c7370c488f..eefd8fc8c3 100644 --- a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst +++ b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst @@ -73,7 +73,7 @@ To configure the VOLTTRON instance to use RabbitMQ message bus, run the followin .. code-block:: bash - vcfg --rabbitmq single [optional path to rabbitmq_config.yml] + vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] At the end of the setup process, a RabbitMQ broker is setup to use the configuration provided. A new topic exchange for the VOLTTRON instance is created within the configured virtual host. diff --git a/docs/source/volttron-topics/troubleshooting/troubleshooting-rmq.rst b/docs/source/volttron-topics/troubleshooting/troubleshooting-rmq.rst index a471678a93..a044384ed3 100644 --- a/docs/source/volttron-topics/troubleshooting/troubleshooting-rmq.rst +++ b/docs/source/volttron-topics/troubleshooting/troubleshooting-rmq.rst @@ -74,7 +74,7 @@ There are few things that are essential for SSL certificates to work right. a. Please use a unique common-name for CA certificate for each VOLTTRON instance. This is configured under `certificate-data` in the `rabbitmq_config.yml` or if no yml file is used while configuring a VOLTTRON single - instance (using ``vcfg --rabbitmq single``). Certificate generated for agent will automatically get agent's VIP + instance (using ``vcfg rabbitmq single``). Certificate generated for agent will automatically get agent's VIP identity as the certificate's common-name b. The host name in the SSL certificate should match hostname used to access the server. For example, if the fully diff --git a/examples/configurations/rabbitmq/rabbitmq_federation_config.yml b/examples/configurations/rabbitmq/rabbitmq_federation_config.yml index 15233acd64..438aab0d14 100644 --- a/examples/configurations/rabbitmq/rabbitmq_federation_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_federation_config.yml @@ -4,7 +4,6 @@ federation-upstream: port: '5671' virtual-host: volttron4 certificates: - csr: true private_key: "path to private cert" # For example, /home/volttron/vhome/test_fed/certificates/private/volttron1.federation.pem public_cert: "path to public cert" # For example, /home/volttron/vhome/test_fed/certificates/federation/volttron2.volttron1.federation.crt remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_fed/certificates/federation/volttron2_ca.crt @@ -13,7 +12,6 @@ federation-upstream: port: '5671' virtual-host: volttron5 certificates: - csr: true private_key: "path to private cert" public_cert: "path to public cert" remote_ca: "path to CA cert" diff --git a/volttron/platform/instance_setup.py b/volttron/platform/instance_setup.py index 591bb0c2ed..8cf57edee0 100644 --- a/volttron/platform/instance_setup.py +++ b/volttron/platform/instance_setup.py @@ -941,30 +941,30 @@ def wizard(): print('the config file is at {}/config\n'.format(volttron_home)) -def process_rmq_inputs(args, instance_name=None): +def process_rmq_inputs(args_dict, instance_name=None): + #print(f"args_dict:{args_dict}, args") if not is_rabbitmq_available(): raise RuntimeError("Rabbitmq Dependencies not installed please run python bootstrap.py --rabbitmq") confirm_volttron_home() - if len(args) == 2: - vhome = get_home() - if args[0] == 'single': + vhome = get_home() + + if args_dict['config'] is not None: + if args_dict['installation-type'] == 'single': vhome_config = os.path.join(vhome, 'rabbitmq_config.yml') - elif args[0] == 'federation': + elif args_dict['installation-type'] == 'federation': vhome_config = os.path.join(vhome, 'rabbitmq_federation_config.yml') - elif args[0] == 'shovel': + elif args_dict['installation-type'] == 'shovel': vhome_config = os.path.join(vhome, 'rabbitmq_shovel_config.yml') else: - print("Invalid argument. \nUsage: vcf --rabbitmq single|federation|shovel " - "[optional path to rabbitmq config yml]") + print("Invalid installation type. Acceptable values single|federation|shovel") sys.exit(1) - if args[1] != vhome_config: + if args_dict['config'] != vhome_config: if not os.path.exists(vhome): os.makedirs(vhome, 0o755) - copy(args[1], vhome_config) - setup_rabbitmq_volttron(args[0], verbose, instance_name=instance_name) + copy(args_dict['config'], vhome_config) + setup_rabbitmq_volttron(args_dict['installation-type'], verbose, instance_name=instance_name, max_retries=args_dict['max_retries']) else: - setup_rabbitmq_volttron(args[0], verbose, prompt=True, instance_name=instance_name) - + setup_rabbitmq_volttron(args_dict['installation-type'], verbose, prompt=True, instance_name=instance_name, max_retries=args_dict['max_retries']) def main(): global verbose, prompt_vhome @@ -972,27 +972,35 @@ def main(): parser.add_argument('-v', '--verbose', action='store_true') parser.add_argument('--vhome', help="Path to volttron home") parser.add_argument('--instance-name', dest='instance_name', help="Name of this volttron instance") - + parser.set_defaults(is_rabbitmq=False) group = parser.add_mutually_exclusive_group() agent_list = '\n\t' + '\n\t'.join(sorted(available_agents.keys())) group.add_argument('--list-agents', action='store_true', dest='list_agents', help='list configurable agents{}'.format(agent_list)) + rabbitmq_parser = parser.add_subparsers(title='rabbitmq', + metavar='', + dest='parser_name') + single_parser = rabbitmq_parser.add_parser('rabbitmq', help='Configure rabbitmq for single instance, ' + 'federation, or shovel either based on ' + 'configuration file in yml format or providing ' + 'details when prompted. \nUsage: vcfg rabbitmq ' + 'single|federation|shovel --config --max-retries ]') + single_parser.add_argument('installation-type', default='single', help='Rabbitmq option for installation. Installation type can be single|federation|shovel') + single_parser.add_argument('--max-retries', help='Optional Max retry attempt', type=int, default=12) + single_parser.add_argument('--config', help='Optional path to rabbitmq config yml', type=str) + single_parser.set_defaults(is_rabbitmq=True) group.add_argument('--agent', nargs='+', help='configure listed agents') - group.add_argument('--rabbitmq', nargs='+', - help='Configure rabbitmq for single instance, ' - 'federation, or shovel either based on ' - 'configuration file in yml format or providing ' - 'details when prompted. \nUsage: vcfg --rabbitmq ' - 'single|federation|shovel [rabbitmq config ' - 'file]') + group.add_argument('--secure-agent-users', action='store_true', dest='secure_agent_users', help='Require that agents run with their own users (this requires running ' 'scripts/secure_user_permissions.sh as sudo)') args = parser.parse_args() + verbose = args.verbose # Protect against configuration of base logger when not the "main entry point" if verbose: @@ -1013,25 +1021,12 @@ def main(): _update_config_file(instance_name=args.instance_name) if args.list_agents: print("Agents available to configure:{}".format(agent_list)) - elif args.rabbitmq: - if len(args.rabbitmq) > 2: - print("vcfg --rabbitmq can at most accept 2 arguments") - parser.print_help() - sys.exit(1) - elif args.rabbitmq[0] not in ['single', 'federation', 'shovel']: - print("Usage: vcf --rabbitmq single|federation|shovel " - "[optional path to rabbitmq config yml]") - parser.print_help() - sys.exit(1) - elif len(args.rabbitmq) == 2 and not os.path.exists(args.rabbitmq[1]): - print("Invalid rabbitmq configuration file path.") - parser.print_help() - sys.exit(1) - else: - process_rmq_inputs(args.rabbitmq, args.instance_name) + elif args.secure_agent_users: config_opts['secure-agent-users'] = args.secure_agent_users _update_config_file() + elif args.is_rabbitmq: + process_rmq_inputs(vars(args)) elif not args.agent: wizard() diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 3ba7c5c496..77e615cace 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -186,10 +186,6 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): federation = federation_config.get('federation-upstream') if federation: - #ssl_params = None - #if is_ssl: - # ssl_params = rmq_mgmt.get_ssl_url_params() - for host, upstream in federation.items(): try: name = "upstream-{host}-{vhost}".format(vhost=upstream['virtual-host'], @@ -209,7 +205,7 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): rmq_user = upstream['federation-user'] else: # certificates key not found in upstream config - _log.debug("ERROR: certificates key not found in federation config. Cannot make connection to remote server without remote certificates") + _log.info("ERROR: certificates key not found in federation config. Cannot make connection to remote server without remote certificates") continue # Build destination address address = rmq_mgmt.build_remote_plugin_connection(rmq_user, @@ -253,11 +249,11 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): ssl_params = None rmq_mgmt = RabbitMQMgmt() - _log.debug("shovel config: {}".format(shovel_config)) + try: for remote_host, shovel in shovels.items(): pubsub_config = shovel.get("pubsub", {}) - _log.debug("shovel parameters: {}".format(shovel)) + for identity, topics in pubsub_config.items(): # Build source address rmq_user = instance_name + '.' + identity @@ -266,7 +262,6 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): vhost, is_ssl) certs_dict = None if 'certificates' in shovel: - _log.debug("shovel parameters under destination: {}".format(shovel)) is_csr = shovel['certificates'].get('csr', False) if is_csr: certs_dict = dict() @@ -276,7 +271,7 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rmq_user = shovel['shovel-user'] else: # destination key not found in shovel config - _log.debug("ERROR: certificates key not found in shovel config. Cannot make connection to remote server without remote certificates") + _log.info("ERROR: certificates key not found in shovel config. Cannot make connection to remote server without remote certificates") continue # Build destination address dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, @@ -573,7 +568,7 @@ def _verify_and_save_instance_ca(rmq_config, instance_ca_path, instance_ca_key): def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_name=None, - rmq_conf_file=None, env=None): + rmq_conf_file=None, max_retries=12, env=None): """ Setup VOLTTRON instance to run with RabbitMQ message bus. :param setup_type: @@ -597,10 +592,10 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na rmq_config = RMQConfig() success = True if prompt: - # ignore any existing rabbitmq_config.yml in vhome. Prompt user and - # generate a new rabbitmq_config.yml + # ignore any existing rabbitmq_config.yml|rabbitmq_federation_config.yml|rabbitmq_shovel_config.yml in vhome. + # Prompt user and generate a new rabbitmq_config.yml try: - success = _create_rabbitmq_config(rmq_config, setup_type, verbose) + success = _create_rabbitmq_config(rmq_config, setup_type, verbose, max_retries) except Exception as exc: _log.error(f"{exc}") return exc @@ -706,10 +701,10 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na rmq_config.volttron_home, rmq_config.is_ssl) if invalid: - _log.error("Unknown option. Exiting....") + _log.error("Unknown option. Exiting XXX....") -def _create_rabbitmq_config(rmq_config, setup_type, verbose=False): +def _create_rabbitmq_config(rmq_config, setup_type, verbose=False, max_retries=12): """ Prompt user for required details and create a rabbitmq_config.yml file in volttron home @@ -827,12 +822,12 @@ def _create_rabbitmq_config(rmq_config, setup_type, verbose=False): # if option was all then config_opts would be not null # if this was called with just setup_type = federation, load existing # config so that we don't overwrite existing federation configs - prompt_upstream_servers(rmq_config.volttron_home) + prompt_upstream_servers(rmq_config.volttron_home, verbose, max_retries) if setup_type in ['shovel', 'all']: # if option was all then config_opts would be not null # if this was called with just setup_type = shovel, load existing # config so that we don't overwrite existing list - success = prompt_shovels(rmq_config.volttron_home, verbose) + success = prompt_shovels(rmq_config.volttron_home, verbose, max_retries) return success @@ -890,7 +885,7 @@ def _prompt_ssl(): return False -def prompt_upstream_servers(vhome): +def prompt_upstream_servers(vhome, verbose=False, max_retries=12): """ Prompt for upstream server configurations and save in rabbitmq_federation_config.yml @@ -928,12 +923,15 @@ def prompt_upstream_servers(vhome): import time time.sleep(2) upstream_servers[host]['federation-user'] = instance_name + "." + upstream_user - upstream_servers[host]['certificates'] = _prompt_csr_request(upstream_user, host, 'federation') + upstream_servers[host]['certificates'] = _prompt_csr_request(upstream_user, host, + 'federation', + verbose, + max_retries) federation_config['federation-upstream'] = upstream_servers write_to_config_file(federation_config_file, federation_config) -def prompt_shovels(vhome, verbose=False): +def prompt_shovels(vhome, verbose=False, max_retries=12): """ Prompt for shovel configuration and save in rabbitmq_shovel_config.yml :return: @@ -951,7 +949,7 @@ def prompt_shovels(vhome, verbose=False): else: _log.info("New input data will be used to overwrite existing " "{}".format(shovel_config_file)) - + shovel_config = {} shovels = shovel_config.get('shovels', {}) prompt = 'Number of destination hosts to configure:' @@ -979,9 +977,8 @@ def prompt_shovels(vhome, verbose=False): time.sleep(2) shovels[host]['shovel-user'] = instance_name + "." + shovel_user - #_log.debug("shovel_user: {}".format(shovel_user)) - certs_config = _prompt_csr_request(shovel_user, host, 'shovel', verbose) + certs_config = _prompt_csr_request(shovel_user, host, 'shovel', verbose, max_retries) if not certs_config: # we did not get certificates - neither existing, nor through csr process # exit @@ -1031,11 +1028,10 @@ def prompt_shovels(vhome, verbose=False): return True -def _prompt_csr_request(rmq_user, host, type, verbose=False): +def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): prompt = prompt_response('\nDo you have certificates signed by remote CA? ', valid_answers=y_or_n, default='N') - csr_config = dict() if prompt in y: @@ -1070,25 +1066,22 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False): raise IOError(f"Remote web interface is not valid: {parsed_address}. Please check and try again") # request CSR from remote host - ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, type,verbose) + ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, type, verbose, max_retries) if ca_file is not None and cert_file is not None and prvt_file is not None: csr_config['csr'] = True - # _log.debug("CA file path: {}".format(ca_file)) csr_config['remote_ca'] = ca_file # public cert csr_config['public_cert'] = cert_file - # _log.debug("Public cert path: {}".format(certfile)) # private_key crts = certs.Certs() - # _log.debug("Private cert path: {}".format(prvtfile)) csr_config['private_key'] = prvt_file return csr_config -def _request_csr(rmq_user, remote_addr, type, verbose=False): +def _request_csr(rmq_user, remote_addr, type, verbose=False, max_retries=12): ca_file = None certfile = None prvtfile = None @@ -1101,7 +1094,6 @@ def _request_csr(rmq_user, remote_addr, type, verbose=False): success = False retry_attempt = 0 - max_retries = 12 denied = False if response is None: # Error /status is pending @@ -1112,7 +1104,6 @@ def _request_csr(rmq_user, remote_addr, type, verbose=False): # Try for two minutes. # TODO make max attempts and/or sleep interval optional arg while not success and retry_attempt < max_retries: - if response is None: break elif response[0] == 'PENDING': From 3e3bd48438b98aa8f65c0cd8800c160e177f6122 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Wed, 7 Apr 2021 08:53:08 -0700 Subject: [PATCH 04/45] Fixed review comments --- .../multi-platform-rabbitmq-deployment.rst | 14 +++++++------- .../rabbitmq/rabbitmq_shovel_config.yml | 1 - volttron/utils/rmq_setup.py | 6 +++--- volttrontesting/fixtures/rmq_test_setup.py | 1 + 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 3c4444e752..405917bbcb 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -65,7 +65,7 @@ To setup federation on the VOLTTRON instance, run the following command on the d .. code-block:: bash - vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml] --max-tries [optional maximum CSR retry attempt] + vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml] --max-retries [optional maximum CSR retry attempt] This establishes federation links to upstream servers. Once a federation link to the upstream server is established on @@ -166,7 +166,7 @@ upstream servers on the downstream server and make the VOLTTRON exchange .. code-block:: bash vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml - containing the details of the upstream hostname, port and vhost.] --max-tries [optional maximum CSR retry attempt] + containing the details of the upstream hostname, port and vhost.] --max-retries [optional maximum CSR retry attempt] Example configuration for federation is available @@ -347,7 +347,7 @@ To configure the VOLTTRON instance to setup shovel, run the following command on .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] This sets up a shovel that forwards messages (either PubSub or RPC) from a local exchange to a remote exchange. @@ -438,7 +438,7 @@ Please note that each instance should have a unique instance name. .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] rabbitmq_shovel_config.yml should contain the details of the remote hostname, port, vhost, certificates for connecting to remote instance and list of topics to forward. @@ -606,7 +606,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] Example of RabbitMQ shovel configuration on v2 @@ -630,7 +630,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg rabbitmq shovel [optional path to rabbitmq_shovel_config.yml + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] b. Create a user on v2 with username set to remote agent's username ( for example, v1.data.mover i.e., .) and allow @@ -645,7 +645,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-tries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] 3. Start Platform driver agent on v1 diff --git a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml index 552b6a58a8..eecf6a226a 100644 --- a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml @@ -4,7 +4,6 @@ shovel: port: '5671' virtual-host: volttron certificates: - csr: true private_cert: "path to private cert" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 77e615cace..b922cf5d03 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -205,7 +205,7 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): rmq_user = upstream['federation-user'] else: # certificates key not found in upstream config - _log.info("ERROR: certificates key not found in federation config. Cannot make connection to remote server without remote certificates") + _log.error("ERROR: certificates key not found in federation config. Cannot make connection to remote server without remote certificates") continue # Build destination address address = rmq_mgmt.build_remote_plugin_connection(rmq_user, @@ -271,7 +271,7 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rmq_user = shovel['shovel-user'] else: # destination key not found in shovel config - _log.info("ERROR: certificates key not found in shovel config. Cannot make connection to remote server without remote certificates") + _log.error("ERROR: certificates key not found in shovel config. Cannot make connection to remote server without remote certificates") continue # Build destination address dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, @@ -701,7 +701,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na rmq_config.volttron_home, rmq_config.is_ssl) if invalid: - _log.error("Unknown option. Exiting XXX....") + _log.error("Unknown option. Exiting....") def _create_rabbitmq_config(rmq_config, setup_type, verbose=False, max_retries=12): diff --git a/volttrontesting/fixtures/rmq_test_setup.py b/volttrontesting/fixtures/rmq_test_setup.py index 4d7143fba8..0b9b365a5e 100644 --- a/volttrontesting/fixtures/rmq_test_setup.py +++ b/volttrontesting/fixtures/rmq_test_setup.py @@ -191,6 +191,7 @@ def create_rmq_volttron_setup(vhome=None, ssl_auth=False, env=None, prompt=False, instance_name=rabbit_config_obj.instance_name, rmq_conf_file=rabbit_config_obj.rmq_conf_file, + max_retries=5, env=env) return rabbit_config_obj From b173ade24e58d89d93e10c131ef052fe4a2d3465 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 7 Apr 2021 08:55:27 -0700 Subject: [PATCH 05/45] Update platform-configuration.rst --- docs/source/deploying-volttron/platform-configuration.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/deploying-volttron/platform-configuration.rst b/docs/source/deploying-volttron/platform-configuration.rst index 48bbedccd7..6a3b0fa897 100644 --- a/docs/source/deploying-volttron/platform-configuration.rst +++ b/docs/source/deploying-volttron/platform-configuration.rst @@ -180,7 +180,7 @@ vcfg command to configure a federation instance of RabbitMQ VOLTTRON. .. code-block:: bash - vcfg rabbitmq single --config [Optional path to rabbitmq federation config file] --max-retries [Optional maximum CSR retry attempt]`` + vcfg rabbitmq federation --config [Optional path to rabbitmq federation config file] --max-retries [Optional maximum CSR retry attempt]`` vcfg command to create shovel to send messages from one RabbitMQ instance of VOLTTRON to another. @@ -188,4 +188,4 @@ vcfg command to create shovel to send messages from one RabbitMQ instance of VOL .. code-block:: bash - vcfg rabbitmq single --config [Optional path to shovel config file] --max-retries [Optional maximum CSR retry attempt]`` + vcfg rabbitmq shovel --config [Optional path to shovel config file] --max-retries [Optional maximum CSR retry attempt]`` From d70c1d385a352cb3fc833c8a0f1f45cd834ab74e Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 7 Apr 2021 09:51:52 -0700 Subject: [PATCH 06/45] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d5dcf4284..99c33cea3a 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ You can deactivate the environment at any time by running `deactivate`. ##### 5. Create RabbitMQ setup for VOLTTRON: ```sh -vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] +vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] ``` Refer to [examples/configurations/rabbitmq/rabbitmq_config.yml](examples/configurations/rabbitmq/rabbitmq_config.yml) From aadd6be7f8ae29913cf71282efcbac08aa6a2129 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 14 Apr 2021 13:33:31 -0700 Subject: [PATCH 07/45] Update README.md Changing vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] to vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 99c33cea3a..0d5dcf4284 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ You can deactivate the environment at any time by running `deactivate`. ##### 5. Create RabbitMQ setup for VOLTTRON: ```sh -vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] +vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] ``` Refer to [examples/configurations/rabbitmq/rabbitmq_config.yml](examples/configurations/rabbitmq/rabbitmq_config.yml) From bfc73fa1c1650c61c6ed627ee4f25a9e199ddd54 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 14 Apr 2021 13:35:04 -0700 Subject: [PATCH 08/45] Update multi-platform-rabbitmq-deployment.rst Changed vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml] --max-retries [optional maximum CSR retry attempt] to vcfg rabbitmq federation [--config optional path to rabbitmq_federation_config.yml] [--max-retries optional maximum CSR retry attempt] --- .../multi-platform/multi-platform-rabbitmq-deployment.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 405917bbcb..3c2622e828 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -65,7 +65,7 @@ To setup federation on the VOLTTRON instance, run the following command on the d .. code-block:: bash - vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq federation [--config optional path to rabbitmq_federation_config.yml] [--max-retries optional maximum CSR retry attempt] This establishes federation links to upstream servers. Once a federation link to the upstream server is established on From 79ffb1d46057c6baecf9057d8f8210d7623d56a0 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 14 Apr 2021 13:41:45 -0700 Subject: [PATCH 09/45] Update multi-platform-rabbitmq-deployment.rst --- .../multi-platform-rabbitmq-deployment.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 3c2622e828..115c62a799 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -165,8 +165,8 @@ upstream servers on the downstream server and make the VOLTTRON exchange .. code-block:: bash - vcfg rabbitmq federation --config [optional path to rabbitmq_federation_config.yml - containing the details of the upstream hostname, port and vhost.] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq federation [--config optional path to rabbitmq_federation_config.yml + containing the details of the upstream hostname, port and vhost.] [--max-retries optional maximum CSR retry attempt] Example configuration for federation is available @@ -347,7 +347,7 @@ To configure the VOLTTRON instance to setup shovel, run the following command on .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] This sets up a shovel that forwards messages (either PubSub or RPC) from a local exchange to a remote exchange. @@ -438,7 +438,7 @@ Please note that each instance should have a unique instance name. .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] rabbitmq_shovel_config.yml should contain the details of the remote hostname, port, vhost, certificates for connecting to remote instance and list of topics to forward. @@ -606,7 +606,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] Example of RabbitMQ shovel configuration on v2 @@ -630,7 +630,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] b. Create a user on v2 with username set to remote agent's username ( for example, v1.data.mover i.e., .) and allow @@ -645,7 +645,7 @@ agent. For such a request-response behavior, shovels need to be created on both .. code-block:: bash - vcfg rabbitmq shovel --config [optional path to rabbitmq_shovel_config.yml] --max-retries [optional maximum CSR retry attempt] + vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] 3. Start Platform driver agent on v1 From 99deedb71ad15bbcda5e02a250aea988757a8158 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 14 Apr 2021 13:43:31 -0700 Subject: [PATCH 10/45] Update platform-configuration.rst --- docs/source/deploying-volttron/platform-configuration.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/deploying-volttron/platform-configuration.rst b/docs/source/deploying-volttron/platform-configuration.rst index 6a3b0fa897..5a63429dac 100644 --- a/docs/source/deploying-volttron/platform-configuration.rst +++ b/docs/source/deploying-volttron/platform-configuration.rst @@ -172,7 +172,7 @@ vcfg command to configure a single RabbitMQ instance of VOLTTRON. .. code-block:: bash - vcfg rabbitmq single --config [Optional path to rabbitmq config file]`` + vcfg rabbitmq single [--config Optional path to rabbitmq config file]`` vcfg command to configure a federation instance of RabbitMQ VOLTTRON. @@ -180,7 +180,7 @@ vcfg command to configure a federation instance of RabbitMQ VOLTTRON. .. code-block:: bash - vcfg rabbitmq federation --config [Optional path to rabbitmq federation config file] --max-retries [Optional maximum CSR retry attempt]`` + vcfg rabbitmq federation [--config Optional path to rabbitmq federation config file] [--max-retries Optional maximum CSR retry attempt]`` vcfg command to create shovel to send messages from one RabbitMQ instance of VOLTTRON to another. @@ -188,4 +188,4 @@ vcfg command to create shovel to send messages from one RabbitMQ instance of VOL .. code-block:: bash - vcfg rabbitmq shovel --config [Optional path to shovel config file] --max-retries [Optional maximum CSR retry attempt]`` + vcfg rabbitmq shovel [--config Optional path to shovel config file] [--max-retries Optional maximum CSR retry attempt]`` From 5b420fadd6a23c43765a1215ce4b41143cd118ea Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Wed, 14 Apr 2021 13:44:32 -0700 Subject: [PATCH 11/45] Update platform-install.rst --- docs/source/introduction/platform-install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/introduction/platform-install.rst b/docs/source/introduction/platform-install.rst index 3312763c56..878d9c5a22 100644 --- a/docs/source/introduction/platform-install.rst +++ b/docs/source/introduction/platform-install.rst @@ -293,7 +293,7 @@ Step 5 - Configure RabbitMQ setup for VOLTTRON .. code-block:: bash - vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] + vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] A sample configuration file can be found in the VOLTTRON repository in **examples/configurations/rabbitmq/rabbitmq_config.yml**. At a minimum you will need to provide the host name and a unique common-name (under certificate-data) in the configuration file. From e2a85d66b3ecaf50fb919b4fb72f1096027e2c20 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Wed, 14 Apr 2021 13:56:53 -0700 Subject: [PATCH 12/45] modifed vcfg rabbitmq command --- .../message-bus/rabbitmq/rabbitmq-ssl-auth.rst | 2 +- .../message-bus/rabbitmq/rabbitmq-volttron.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst index 77e4a17dcb..06b9694157 100644 --- a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst +++ b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-ssl-auth.rst @@ -90,7 +90,7 @@ The parameters of interest for SSL based configuration are We can then configure the VOLTTRON instance to use SSL based authentication with the below command: - vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] + vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] When one creates a single instance of RabbitMQ, the following is created / re-created in the VOLTTRON_HOME/certificates directory: diff --git a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst index eefd8fc8c3..5e224c8137 100644 --- a/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst +++ b/docs/source/platform-features/message-bus/rabbitmq/rabbitmq-volttron.rst @@ -73,7 +73,7 @@ To configure the VOLTTRON instance to use RabbitMQ message bus, run the followin .. code-block:: bash - vcfg rabbitmq single --config [optional path to rabbitmq_config.yml] + vcfg rabbitmq single [--config optional path to rabbitmq_config.yml] At the end of the setup process, a RabbitMQ broker is setup to use the configuration provided. A new topic exchange for the VOLTTRON instance is created within the configured virtual host. From 18bc4e2df463f5320a403404117309e5f19ff284 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 15 Apr 2021 10:58:13 -0700 Subject: [PATCH 13/45] Added implementation for requesting csr if certificates are not found when trying to create shovel/federation --- .../rabbitmq/rabbitmq_federation_config.yml | 2 + .../rabbitmq/rabbitmq_shovel_config.yml | 25 +-- volttron/utils/rmq_mgmt.py | 6 +- volttron/utils/rmq_setup.py | 149 +++++++++++------- 4 files changed, 107 insertions(+), 75 deletions(-) diff --git a/examples/configurations/rabbitmq/rabbitmq_federation_config.yml b/examples/configurations/rabbitmq/rabbitmq_federation_config.yml index 438aab0d14..ae4ccb5ea2 100644 --- a/examples/configurations/rabbitmq/rabbitmq_federation_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_federation_config.yml @@ -2,6 +2,7 @@ federation-upstream: volttron4: # hostname of upstream server port: '5671' + https_port: '8443' virtual-host: volttron4 certificates: private_key: "path to private cert" # For example, /home/volttron/vhome/test_fed/certificates/private/volttron1.federation.pem @@ -10,6 +11,7 @@ federation-upstream: federation-user: volttron4.federation #.federation volttron5: # hostname of upstream server port: '5671' + https_port: '8443' virtual-host: volttron5 certificates: private_key: "path to private cert" diff --git a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml index eecf6a226a..a9e91e8b0e 100644 --- a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml @@ -1,17 +1,18 @@ # Mandatory parameters for shovel setup shovel: - rabbit-2: - port: '5671' - virtual-host: volttron - certificates: - private_cert: "path to private cert" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem - public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt - remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt - # Configuration to forward pubsub topics - pubsub: - # Identity of agent that is publishing the topic - platform.driver: - # Topic pattern to be forwarded + rabbit-2: + port: '5671' + https_port: '8443' + virtual-host: volttron + certificates: + private_cert: "path to private cert" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem + public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt + remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt + # Configuration to forward pubsub topics + pubsub: + # Identity of agent that is publishing the topic + platform.driver: + # Topic pattern to be forwarded - devices # Configuration to make remote RPC calls rpc: diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 9b82d07a34..7a56dde231 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -1066,9 +1066,9 @@ def get_ssl_url_params(self, user=None, certs_dict=None): cert_file = self.rmq_config.crts.cert_file(user) key_file = self.rmq_config.crts.private_key_file(user) else: - ca_file = certs_dict['ca_file'] - cert_file = certs_dict['cert_file'] - key_file = certs_dict['key_file'] + ca_file = certs_dict['remote_ca'] + cert_file = certs_dict['public_cert'] + key_file = certs_dict['private_key'] return "cacertfile={ca}&certfile={cert}&keyfile={key}" \ "&verify=verify_peer&fail_if_no_peer_cert=true" \ "&auth_mechanism=external".format(ca=ca_file, diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index b922cf5d03..246813438d 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -185,35 +185,39 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): federation_config = read_config_file(federation_config_file) federation = federation_config.get('federation-upstream') + update_needed = False if federation: for host, upstream in federation.items(): try: name = "upstream-{host}-{vhost}".format(vhost=upstream['virtual-host'], host=host) _log.debug("Upstream Server: {name} ".format(name=name)) - - certs_dict = None rmq_user = None - if 'certificates' in upstream: - _log.debug("upstream parameters under destination: {}".format(upstream)) - is_csr = upstream['certificates'].get('csr', False) - if is_csr: - certs_dict = dict() - certs_dict['ca_file'] = upstream['certificates']['remote_ca'] - certs_dict['cert_file'] = upstream['certificates']['public_cert'] - certs_dict['key_file'] = upstream['certificates']['private_key'] - rmq_user = upstream['federation-user'] - else: - # certificates key not found in upstream config - _log.error("ERROR: certificates key not found in federation config. Cannot make connection to remote server without remote certificates") - continue + if 'certificates' not in upstream: + # certificates key not found in shovel config + remote_addr = 'https://{}:{}'.format(host, upstream['https_port']) + # request CSR from remote host + ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') + if ca_file is not None and cert_file is not None and prvt_file is not None: + # root CA + federation[host]['certificates']['remote_ca'] = ca_file + # public cert + federation[host]['certificates']['public_cert'] = cert_file + # private_key + federation[host]['certificates']['private_key'] = prvt_file + update_needed = True + else: + _log.error("ERROR: Couldn't get CSR certificates from remote server. Continuing..") + continue + + rmq_user = upstream['federation-user'] # Build destination address address = rmq_mgmt.build_remote_plugin_connection(rmq_user, host, upstream['port'], upstream['virtual-host'], is_ssl, - certs_dict=certs_dict) + certs_dict=federation[host]['certificates']) prop = dict(vhost=vhost, component="federation-upstream", name=name, @@ -231,10 +235,14 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): rmq_mgmt.set_policy(policy_name, policy_value, vhost) + except KeyError as ex: _log.error("Federation setup did not complete. " "Missing Key {key} in upstream config " "{upstream}".format(key=ex, upstream=upstream)) + if update_needed: + federation_config['federation-upstream'] = federation + write_to_config_file(federation_config_file, federation_config) def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): @@ -249,6 +257,7 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): ssl_params = None rmq_mgmt = RabbitMQMgmt() + update_needed = False try: for remote_host, shovel in shovels.items(): @@ -258,26 +267,32 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): # Build source address rmq_user = instance_name + '.' + identity src_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, - local_host, port, - vhost, is_ssl) - certs_dict = None - if 'certificates' in shovel: - is_csr = shovel['certificates'].get('csr', False) - if is_csr: - certs_dict = dict() - certs_dict['ca_file'] = shovel['certificates']['remote_ca'] - certs_dict['cert_file'] = shovel['certificates']['public_cert'] - certs_dict['key_file'] = shovel['certificates']['private_key'] - rmq_user = shovel['shovel-user'] - else: - # destination key not found in shovel config - _log.error("ERROR: certificates key not found in shovel config. Cannot make connection to remote server without remote certificates") - continue + local_host, port, + vhost, is_ssl) + + if 'certificates' not in shovel: + # certificates key not found in shovel config + remote_addr = 'https://{}:{}'.format(remote_host, shovel['https_port']) + # request CSR from remote host + ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') + if ca_file is not None and cert_file is not None and prvt_file is not None: + # root CA + shovels[remote_host]['certificates']['remote_ca'] = ca_file + # public cert + shovels[remote_host]['certificates']['public_cert'] = cert_file + # private_key + shovels[remote_host]['certificates']['private_key'] = prvt_file + update_needed = True + else: + _log.error("ERROR: Couldn't get CSR certificates from remote server. Continuing..") + continue + rmq_user = shovel['shovel-user'] # Build destination address dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, - remote_host, shovel['port'], - shovel['virtual-host'], - is_ssl, certs_dict=certs_dict) + remote_host, shovel['port'], + shovel['virtual-host'], + is_ssl, + certs_dict=shovels[remote_host]['certificates']) if not isinstance(topics, list): topics = [topics] @@ -286,9 +301,8 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): topic)) name = "shovel-{host}-{topic}".format(host=remote_host, topic=topic) - routing_key = "__pubsub__.{instance}.{topic}.#".format( - instance=instance_name, - topic=topic) + routing_key = "__pubsub__.{instance}.{topic}.#".format(instance=instance_name, + topic=topic) prop = dict(vhost=vhost, component="shovel", name=name, @@ -312,23 +326,29 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): local_host, port, vhost, is_ssl) - certs_dict = None - if 'certificates' in shovel: - _log.debug("shovel parameters under destination: {}".format(shovel)) - is_csr = shovel['certificates'].get('csr', False) - if is_csr: - certs_dict = dict() - certs_dict['ca_file'] = shovel['certificates']['remote_ca'] - certs_dict['cert_file'] = shovel['certificates']['public_cert'] - certs_dict['key_file'] = shovel['certificates']['private_key'] - rmq_user = shovel['shovel-user'] - _log.debug(f"certs parameters: {certs_dict}") + if 'certificates' not in shovel: + # certificates key not found in shovel config + remote_addr = 'https://{}:{}'.format(remote_host, shovel['https_port']) + # request CSR from remote host + ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') + if ca_file is not None and cert_file is not None and prvt_file is not None: + # root CA + shovels[remote_host]['certificates']['remote_ca'] = ca_file + # public cert + shovels[remote_host]['certificates']['public_cert'] = cert_file + # private_key + shovels[remote_host]['certificates']['private_key'] = prvt_file + update_needed = True + else: + _log.error("ERROR: Couldn't get CSR certificates from remote server. Continuing..") + continue # Build destination address dest_uri = rmq_mgmt.build_shovel_connection(rmq_user, remote_host, shovel['port'], shovel['virtual-host'], - is_ssl, certs_dict=certs_dict) + is_ssl, + certs_dict=shovels[remote_host]['certificates']) _log.info("Creating shovel to make RPC call to remote Agent" ": {}".format(remote_identity)) @@ -348,8 +368,11 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): ) rmq_mgmt.set_parameter("shovel", - name, - prop) + name, + prop) + if update_needed: + shovel_config['shovel'] = shovels + write_to_config_file(shovel_config_file, shovel_config) except KeyError as exc: _log.error("Shovel setup did not complete. Missing Key: {}".format( exc)) @@ -923,10 +946,13 @@ def prompt_upstream_servers(vhome, verbose=False, max_retries=12): import time time.sleep(2) upstream_servers[host]['federation-user'] = instance_name + "." + upstream_user - upstream_servers[host]['certificates'] = _prompt_csr_request(upstream_user, host, - 'federation', - verbose, - max_retries) + cert_config, https_port = _prompt_csr_request(upstream_user, + host, + 'federation', + verbose, + max_retries) + upstream_servers[host]['certificates'] = cert_config + upstream_servers[host]['https_port'] = https_port federation_config['federation-upstream'] = upstream_servers write_to_config_file(federation_config_file, federation_config) @@ -978,12 +1004,13 @@ def prompt_shovels(vhome, verbose=False, max_retries=12): time.sleep(2) shovels[host]['shovel-user'] = instance_name + "." + shovel_user - certs_config = _prompt_csr_request(shovel_user, host, 'shovel', verbose, max_retries) + certs_config, https_port = _prompt_csr_request(shovel_user, host, 'shovel', verbose, max_retries) if not certs_config: # we did not get certificates - neither existing, nor through csr process # exit return False shovels[host]['certificates'] = certs_config + shovels[host]['https_port'] = https_port prompt = prompt_response('\nDo you want shovels for ' 'PUBSUB communication? ', @@ -1034,10 +1061,11 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): default='N') csr_config = dict() + https_port = None if prompt in y: prompt = 'Full path to remote CA certificate: ' ca_file = prompt_response(prompt, default='') - csr_config['csr'] = True + if not os.path.exists(ca_file): raise IOError(f"Path does not exist: {ca_file}. Please check the path and try again") # ca cert @@ -1062,23 +1090,24 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): remote_addr = prompt_response(prompt, default=remote_https_address) parsed_address = urlparse(remote_addr) + https_port = parsed_address.port + print(f"PARSED address: {parsed_address}, {https_port}") if parsed_address.scheme not in ('https',): raise IOError(f"Remote web interface is not valid: {parsed_address}. Please check and try again") # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, type, verbose, max_retries) if ca_file is not None and cert_file is not None and prvt_file is not None: - csr_config['csr'] = True + # ca cert csr_config['remote_ca'] = ca_file # public cert csr_config['public_cert'] = cert_file # private_key - crts = certs.Certs() csr_config['private_key'] = prvt_file - return csr_config + return csr_config, https_port def _request_csr(rmq_user, remote_addr, type, verbose=False, max_retries=12): From a8c2b71e1a960bd45a4d109eaa56abc6a07300c4 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Tue, 20 Apr 2021 13:09:41 -0700 Subject: [PATCH 14/45] more updates --- volttron/utils/rmq_setup.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 246813438d..cdeacf40a0 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -168,7 +168,7 @@ def write_env_file(rmq_config, conf_file, env=None): env_conf.write(env_entries) -def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): +def _create_federation_setup(is_ssl, vhost, vhome): """ Creates a RabbitMQ federation of multiple VOLTTRON instances based on rabbitmq config. @@ -195,7 +195,8 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): rmq_user = None if 'certificates' not in upstream: # certificates key not found in shovel config - remote_addr = 'https://{}:{}'.format(host, upstream['https_port']) + https_port = upstream.get('https_port', 8443) + remote_addr = 'https://{}:{}'.format(host, https_port) # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') if ca_file is not None and cert_file is not None and prvt_file is not None: @@ -207,7 +208,7 @@ def _create_federation_setup(admin_user, admin_password, is_ssl, vhost, vhome): federation[host]['certificates']['private_key'] = prvt_file update_needed = True else: - _log.error("ERROR: Couldn't get CSR certificates from remote server. Continuing..") + _log.error(f"ERROR: Couldn't get CSR certificates from remote server. Check the web address: {remote_addr}.\nContinuing with other configurations") continue rmq_user = upstream['federation-user'] @@ -271,8 +272,9 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): vhost, is_ssl) if 'certificates' not in shovel: + https_port = shovel.get('https_port', 8443) # certificates key not found in shovel config - remote_addr = 'https://{}:{}'.format(remote_host, shovel['https_port']) + remote_addr = 'https://{}:{}'.format(remote_host, https_port) # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') if ca_file is not None and cert_file is not None and prvt_file is not None: @@ -284,12 +286,13 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): shovels[remote_host]['certificates']['private_key'] = prvt_file update_needed = True else: - _log.error("ERROR: Couldn't get CSR certificates from remote server. Continuing..") + _log.error(f"ERROR: Couldn't get CSR certificates from remote server. Check the web address {remote_addr}. \nContinuing with other configurations") continue rmq_user = shovel['shovel-user'] # Build destination address dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, - remote_host, shovel['port'], + remote_host, + shovel['port'], shovel['virtual-host'], is_ssl, certs_dict=shovels[remote_host]['certificates']) @@ -327,8 +330,9 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): vhost, is_ssl) if 'certificates' not in shovel: + https_port = shovel.get('https_port', 8443) # certificates key not found in shovel config - remote_addr = 'https://{}:{}'.format(remote_host, shovel['https_port']) + remote_addr = 'https://{}:{}'.format(remote_host, https_port) # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') if ca_file is not None and cert_file is not None and prvt_file is not None: @@ -340,12 +344,13 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): shovels[remote_host]['certificates']['private_key'] = prvt_file update_needed = True else: - _log.error("ERROR: Couldn't get CSR certificates from remote server. Continuing..") + _log.error("ERROR: Couldn't get CSR certificates from remote server. Check the web address {remote_addr}.\nContinuing with other configurations") continue # Build destination address dest_uri = rmq_mgmt.build_shovel_connection(rmq_user, - remote_host, shovel['port'], + remote_host, + shovel['port'], shovel['virtual-host'], is_ssl, certs_dict=shovels[remote_host]['certificates']) @@ -705,9 +710,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na if setup_type in ["all", "federation"]: # Create a multi-platform federation setup invalid = False - _create_federation_setup(rmq_config.admin_user, - rmq_config.admin_pwd, - rmq_config.is_ssl, + _create_federation_setup(rmq_config.is_ssl, rmq_config.virtual_host, rmq_config.volttron_home) if setup_type in ["all", "shovel"]: From b4267f9ae29da47293d30baa19aeff6a04724001 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Tue, 20 Apr 2021 15:35:03 -0700 Subject: [PATCH 15/45] Rearranged code --- .../rabbitmq/rabbitmq_shovel_config.yml | 22 +- volttron/utils/rmq_setup.py | 247 ++++++++++-------- 2 files changed, 152 insertions(+), 117 deletions(-) diff --git a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml index a9e91e8b0e..37bb8af2c7 100644 --- a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml @@ -1,8 +1,9 @@ # Mandatory parameters for shovel setup shovel: - rabbit-2: - port: '5671' - https_port: '8443' + volttron2: # remote hostname + https_port: 8443 + port: 5671 + shovel-user: volttron1.shovelvolttron2 #.shovel virtual-host: volttron certificates: private_cert: "path to private cert" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem @@ -13,10 +14,11 @@ shovel: # Identity of agent that is publishing the topic platform.driver: # Topic pattern to be forwarded - - devices - # Configuration to make remote RPC calls - rpc: - # Remote instance name - volttron2: - # List of pair of agent identities (local caller, remote callee) - - [scheduler, platform.actuator] + - devices + + # Configuration to make remote RPC calls + rpc: + # Remote instance name + volttron2: + # List of pair of agent identities (local caller, remote callee) + - [scheduler, platform.actuator] diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index cdeacf40a0..032849f18d 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -168,6 +168,40 @@ def write_env_file(rmq_config, conf_file, env=None): env_conf.write(env_entries) +def _get_federation_certs(vhome): + federation_config_file = os.path.join(vhome, + 'rabbitmq_federation_config.yml') + federation_config = read_config_file(federation_config_file) + federation = federation_config.get('federation-upstream', {}) + success = True + try: + for host, upstream in federation.items(): + rmq_user = upstream['federation-user'] + if 'certificates' not in upstream: + # certificates key not found in shovel config + https_port = upstream.get('https_port', 8443) + remote_addr = 'https://{}:{}'.format(host, https_port) + print(f"Certificates not found. Requesting CSR from {remote_addr}") + # request CSR from remote host + ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'federation') + if ca_file is not None and cert_file is not None and prvt_file is not None: + # root CA + federation[host]['certificates']['remote_ca'] = ca_file + # public cert + federation[host]['certificates']['public_cert'] = cert_file + # private_key + federation[host]['certificates']['private_key'] = prvt_file + update_needed = True + else: + _log.error( + f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance.\nContinuing with other configurations") + continue + except KeyError as ex: + _log.error(f"Federation config has missing key: {ex} in {upstream}".format(key=ex, upstream=upstream)) + success = False + return success + + def _create_federation_setup(is_ssl, vhost, vhome): """ Creates a RabbitMQ federation of multiple VOLTTRON instances based on @@ -183,67 +217,92 @@ def _create_federation_setup(is_ssl, vhost, vhome): federation_config_file = os.path.join(vhome, 'rabbitmq_federation_config.yml') federation_config = read_config_file(federation_config_file) - federation = federation_config.get('federation-upstream') + federation = federation_config.get('federation-upstream', {}) - update_needed = False - if federation: - for host, upstream in federation.items(): - try: - name = "upstream-{host}-{vhost}".format(vhost=upstream['virtual-host'], - host=host) - _log.debug("Upstream Server: {name} ".format(name=name)) - rmq_user = None - if 'certificates' not in upstream: - # certificates key not found in shovel config - https_port = upstream.get('https_port', 8443) - remote_addr = 'https://{}:{}'.format(host, https_port) - # request CSR from remote host - ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') - if ca_file is not None and cert_file is not None and prvt_file is not None: - # root CA - federation[host]['certificates']['remote_ca'] = ca_file - # public cert - federation[host]['certificates']['public_cert'] = cert_file - # private_key - federation[host]['certificates']['private_key'] = prvt_file - update_needed = True - else: - _log.error(f"ERROR: Couldn't get CSR certificates from remote server. Check the web address: {remote_addr}.\nContinuing with other configurations") - continue + for host, upstream in federation.items(): + try: + name = "upstream-{host}-{vhost}".format(vhost=upstream['virtual-host'], + host=host) + _log.debug("Upstream Server: {name} ".format(name=name)) + if 'certificates' not in upstream: + _log.error(f"ERROR: Certificates key missing in config.\nContinuing with other configurations") + continue + + rmq_user = upstream['federation-user'] + # Build destination address + address = rmq_mgmt.build_remote_plugin_connection(rmq_user, + host, + upstream['port'], + upstream['virtual-host'], + is_ssl, + certs_dict=federation[host]['certificates']) + prop = dict(vhost=vhost, + component="federation-upstream", + name=name, + value={"uri": address}) + rmq_mgmt.set_parameter('federation-upstream', + name, + prop, + vhost) + + policy_name = 'volttron-federation' + policy_value = {"pattern": "^volttron", + "definition": {"federation-upstream-set": "all"}, + "priority": 0, + "apply-to": "exchanges"} + rmq_mgmt.set_policy(policy_name, + policy_value, + vhost) + + except KeyError as ex: + _log.error("Federation setup did not complete. " + "Missing Key {key} in upstream config " + "{upstream}".format(key=ex, upstream=upstream)) + + +def _get_certs_for_shovel(instance_name, vhome): + shovel_config_file = os.path.join(vhome, + 'rabbitmq_shovel_config.yml') + shovel_config = read_config_file(shovel_config_file) + shovels = shovel_config.get('shovel', {}) - rmq_user = upstream['federation-user'] - # Build destination address - address = rmq_mgmt.build_remote_plugin_connection(rmq_user, - host, - upstream['port'], - upstream['virtual-host'], - is_ssl, - certs_dict=federation[host]['certificates']) - prop = dict(vhost=vhost, - component="federation-upstream", - name=name, - value={"uri": address}) - rmq_mgmt.set_parameter('federation-upstream', - name, - prop, - vhost) - - policy_name = 'volttron-federation' - policy_value = {"pattern": "^volttron", - "definition": {"federation-upstream-set": "all"}, - "priority": 0, - "apply-to": "exchanges"} - rmq_mgmt.set_policy(policy_name, - policy_value, - vhost) - - except KeyError as ex: - _log.error("Federation setup did not complete. " - "Missing Key {key} in upstream config " - "{upstream}".format(key=ex, upstream=upstream)) + rmq_mgmt = RabbitMQMgmt() + update_needed = False + success = True + try: + for remote_host, shovel in shovels.items(): + if 'certificates' not in shovel: + shovel_user = shovel['shovel-user'] + rmq_mgmt.build_agent_connection(shovel_user, instance_name) + import time + time.sleep(2) + https_port = shovel.get('https_port', 8443) + + # certificates key not found in shovel config + remote_addr = 'https://{}:{}'.format(remote_host, https_port) + print(f"Certificates not found. Requesting CSR from {remote_addr}") + # request CSR from remote host + ca_file, cert_file, prvt_file = _request_csr(shovel_user, remote_addr, 'shovel') + if ca_file is not None and cert_file is not None and prvt_file is not None: + # root CA + shovels[remote_host]['certificates']['remote_ca'] = ca_file + # public cert + shovels[remote_host]['certificates']['public_cert'] = cert_file + # private_key + shovels[remote_host]['certificates']['private_key'] = prvt_file + update_needed = True + else: + _log.error( + f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance.\nContinuing with other configurations") + continue if update_needed: - federation_config['federation-upstream'] = federation - write_to_config_file(federation_config_file, federation_config) + shovel_config['shovel'] = shovels + write_to_config_file(shovel_config_file, shovel_config) + except KeyError as exc: + _log.error("Shovel config has missing Key: {}".format(exc)) + success = False + + return success def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): @@ -256,10 +315,9 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): shovel_config = read_config_file(shovel_config_file) shovels = shovel_config.get('shovel', {}) - ssl_params = None rmq_mgmt = RabbitMQMgmt() - update_needed = False + print(f"New shovel config: {shovel_config}") try: for remote_host, shovel in shovels.items(): pubsub_config = shovel.get("pubsub", {}) @@ -272,22 +330,8 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): vhost, is_ssl) if 'certificates' not in shovel: - https_port = shovel.get('https_port', 8443) - # certificates key not found in shovel config - remote_addr = 'https://{}:{}'.format(remote_host, https_port) - # request CSR from remote host - ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') - if ca_file is not None and cert_file is not None and prvt_file is not None: - # root CA - shovels[remote_host]['certificates']['remote_ca'] = ca_file - # public cert - shovels[remote_host]['certificates']['public_cert'] = cert_file - # private_key - shovels[remote_host]['certificates']['private_key'] = prvt_file - update_needed = True - else: - _log.error(f"ERROR: Couldn't get CSR certificates from remote server. Check the web address {remote_addr}. \nContinuing with other configurations") - continue + _log.error(f"ERROR: Certificates not found.\nContinuing with other configurations") + continue rmq_user = shovel['shovel-user'] # Build destination address dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, @@ -330,22 +374,8 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): vhost, is_ssl) if 'certificates' not in shovel: - https_port = shovel.get('https_port', 8443) - # certificates key not found in shovel config - remote_addr = 'https://{}:{}'.format(remote_host, https_port) - # request CSR from remote host - ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'shovel') - if ca_file is not None and cert_file is not None and prvt_file is not None: - # root CA - shovels[remote_host]['certificates']['remote_ca'] = ca_file - # public cert - shovels[remote_host]['certificates']['public_cert'] = cert_file - # private_key - shovels[remote_host]['certificates']['private_key'] = prvt_file - update_needed = True - else: - _log.error("ERROR: Couldn't get CSR certificates from remote server. Check the web address {remote_addr}.\nContinuing with other configurations") - continue + _log.error("ERROR: Certificates not found.\nContinuing with other configurations") + continue # Build destination address dest_uri = rmq_mgmt.build_shovel_connection(rmq_user, @@ -375,12 +405,8 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rmq_mgmt.set_parameter("shovel", name, prop) - if update_needed: - shovel_config['shovel'] = shovels - write_to_config_file(shovel_config_file, shovel_config) except KeyError as exc: - _log.error("Shovel setup did not complete. Missing Key: {}".format( - exc)) + _log.error("Shovel setup did not complete. Missing Key: {}".format(exc)) def _setup_for_ssl_auth(rmq_config, rmq_conf_file, env=None): @@ -627,6 +653,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na except Exception as exc: _log.error(f"{exc}") return exc + if not success: # something went wrong when creating rmq config # do not create anything. return @@ -710,9 +737,11 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na if setup_type in ["all", "federation"]: # Create a multi-platform federation setup invalid = False - _create_federation_setup(rmq_config.is_ssl, - rmq_config.virtual_host, - rmq_config.volttron_home) + success = _get_federation_certs(rmq_config.volttron_home) + if success: + _create_federation_setup(rmq_config.is_ssl, + rmq_config.virtual_host, + rmq_config.volttron_home) if setup_type in ["all", "shovel"]: # Create shovel setup invalid = False @@ -720,12 +749,16 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na port = rmq_config.amqp_port_ssl else: port = rmq_config.amqp_port - _create_shovel_setup(rmq_config.instance_name, - rmq_config.hostname, - port, - rmq_config.virtual_host, - rmq_config.volttron_home, - rmq_config.is_ssl) + # Check if certs are available in shovel config. If missing, request CSR + success = _get_certs_for_shovel(rmq_config.instance_name, rmq_config.volttron_home) + + if success: + _create_shovel_setup(rmq_config.instance_name, + rmq_config.hostname, + port, + rmq_config.virtual_host, + rmq_config.volttron_home, + rmq_config.is_ssl) if invalid: _log.error("Unknown option. Exiting....") @@ -974,7 +1007,7 @@ def prompt_shovels(vhome, verbose=False, max_retries=12): valid_answers=y_or_n, default='Y') if prompt in y: - return + return True else: _log.info("New input data will be used to overwrite existing " "{}".format(shovel_config_file)) From 85a50023c1afa2b90344ecec8b4d7d47ec7f822c Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Wed, 21 Apr 2021 10:26:15 -0700 Subject: [PATCH 16/45] minor bug fixes --- volttron/utils/rmq_mgmt.py | 2 +- volttron/utils/rmq_setup.py | 111 +++++++++++++++++++++++------------- 2 files changed, 71 insertions(+), 42 deletions(-) diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 7a56dde231..8059b06845 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -766,7 +766,7 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None): config_file = os.path.join(vhome, 'rabbitmq_federation_config.yml') key = 'federation-upstream' config = read_config_file(config_file) - print("Removing certificate paths from the shovel config file. Please remove remote certificates manually " + print(f"Removing certificate paths from the {component} config file. Please remove remote certificates manually " "from the VOLTTRON_HOME folder if needed") names = parameter_name.split("-") diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 032849f18d..d07fa2f15c 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -174,9 +174,10 @@ def _get_federation_certs(vhome): federation_config = read_config_file(federation_config_file) federation = federation_config.get('federation-upstream', {}) success = True + update_needed = False try: for host, upstream in federation.items(): - rmq_user = upstream['federation-user'] + rmq_user = 'federation' #upstream['federation-user'] if 'certificates' not in upstream: # certificates key not found in shovel config https_port = upstream.get('https_port', 8443) @@ -185,19 +186,25 @@ def _get_federation_certs(vhome): # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'federation') if ca_file is not None and cert_file is not None and prvt_file is not None: + upstream['certificates'] = {} # root CA - federation[host]['certificates']['remote_ca'] = ca_file + upstream['certificates']['remote_ca'] = ca_file # public cert - federation[host]['certificates']['public_cert'] = cert_file + upstream['certificates']['public_cert'] = cert_file # private_key - federation[host]['certificates']['private_key'] = prvt_file + upstream['certificates']['private_key'] = prvt_file update_needed = True else: _log.error( - f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance.\nContinuing with other configurations") + f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance." + "\nContinuing with other configurations") continue + if update_needed: + federation_config['federation-upstream'] = federation + write_to_config_file(federation_config_file, federation_config) + except KeyError as ex: - _log.error(f"Federation config has missing key: {ex} in {upstream}".format(key=ex, upstream=upstream)) + _log.error(f"Federation config has missing key: {ex}") success = False return success @@ -284,16 +291,18 @@ def _get_certs_for_shovel(instance_name, vhome): # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(shovel_user, remote_addr, 'shovel') if ca_file is not None and cert_file is not None and prvt_file is not None: + shovel['certificates'] = {} # root CA - shovels[remote_host]['certificates']['remote_ca'] = ca_file + shovel['certificates']['remote_ca'] = ca_file # public cert - shovels[remote_host]['certificates']['public_cert'] = cert_file + shovel['certificates']['public_cert'] = cert_file # private_key - shovels[remote_host]['certificates']['private_key'] = prvt_file + shovel['certificates']['private_key'] = prvt_file update_needed = True else: _log.error( - f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance.\nContinuing with other configurations") + f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance." + "\nContinuing with other configurations") continue if update_needed: shovel_config['shovel'] = shovels @@ -317,7 +326,6 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rmq_mgmt = RabbitMQMgmt() - print(f"New shovel config: {shovel_config}") try: for remote_host, shovel in shovels.items(): pubsub_config = shovel.get("pubsub", {}) @@ -738,6 +746,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na # Create a multi-platform federation setup invalid = False success = _get_federation_certs(rmq_config.volttron_home) + if success: _create_federation_setup(rmq_config.is_ssl, rmq_config.virtual_host, @@ -749,6 +758,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na port = rmq_config.amqp_port_ssl else: port = rmq_config.amqp_port + # Check if certs are available in shovel config. If missing, request CSR success = _get_certs_for_shovel(rmq_config.instance_name, rmq_config.volttron_home) @@ -881,7 +891,7 @@ def _create_rabbitmq_config(rmq_config, setup_type, verbose=False, max_retries=1 # if option was all then config_opts would be not null # if this was called with just setup_type = federation, load existing # config so that we don't overwrite existing federation configs - prompt_upstream_servers(rmq_config.volttron_home, verbose, max_retries) + success = prompt_upstream_servers(rmq_config.volttron_home, verbose, max_retries) if setup_type in ['shovel', 'all']: # if option was all then config_opts would be not null # if this was called with just setup_type = shovel, load existing @@ -954,43 +964,62 @@ def prompt_upstream_servers(vhome, verbose=False, max_retries=12): 'rabbitmq_federation_config.yml') if os.path.exists(federation_config_file): - federation_config = read_config_file(federation_config_file) - else: - federation_config = {} + prompt = "rabbitmq_federation_config.yml exists in {} Do you wish to " \ + "use this file to configure federation".format(federation_config_file) + prompt = prompt_response(prompt, + valid_answers=y_or_n, + default='Y') + if prompt in y: + return True + else: + _log.info("New input data will be used to overwrite existing " + "{}".format(federation_config_file)) + federation_config = {} upstream_servers = federation_config.get('federation-upstream', {}) prompt = 'Number of upstream servers to configure:' count = prompt_response(prompt, default=1) count = int(count) i = 0 - for i in range(0, count): - prompt = 'Hostname of the upstream server: ' - host = prompt_response(prompt, mandatory=True) - prompt = 'Port of the upstream server: ' - port = prompt_response(prompt, default=5671) - prompt = 'Virtual host of the upstream server: ' - vhost = prompt_response(prompt, default='volttron') + try: + for i in range(0, count): + prompt = 'Hostname of the upstream server: ' + host = prompt_response(prompt, mandatory=True) + prompt = 'Port of the upstream server: ' + port = prompt_response(prompt, default=5671) + prompt = 'Virtual host of the upstream server: ' + vhost = prompt_response(prompt, default='volttron') - upstream_servers[host] = {'port': port, - 'virtual-host': vhost} + upstream_servers[host] = {'port': port, + 'virtual-host': vhost} - rmq_mgmt = RabbitMQMgmt() - instance_name = get_platform_instance_name() - upstream_user = 'federation' - rmq_mgmt.build_agent_connection(upstream_user, instance_name) - import time - time.sleep(2) - upstream_servers[host]['federation-user'] = instance_name + "." + upstream_user - cert_config, https_port = _prompt_csr_request(upstream_user, - host, - 'federation', - verbose, - max_retries) - upstream_servers[host]['certificates'] = cert_config - upstream_servers[host]['https_port'] = https_port - federation_config['federation-upstream'] = upstream_servers - write_to_config_file(federation_config_file, federation_config) + rmq_mgmt = RabbitMQMgmt() + instance_name = get_platform_instance_name() + upstream_user = 'federation' + rmq_mgmt.build_agent_connection(upstream_user, instance_name) + import time + time.sleep(2) + upstream_servers[host]['federation-user'] = instance_name + "." + upstream_user + certs_config, https_port = _prompt_csr_request(upstream_user, + host, + 'federation', + verbose, + max_retries) + if not certs_config: + # we did not get certificates - neither existing, nor through csr process + # exit + return False + upstream_servers[host]['certificates'] = certs_config + upstream_servers[host]['https_port'] = https_port + except (IOError, TimeoutError, ConnectionError) as e: + raise e + except ValueError as e: + _log.error("Invalid choice in the configuration: {}".format(e)) + else: + federation_config['federation-upstream'] = upstream_servers + write_to_config_file(federation_config_file, federation_config) + return True def prompt_shovels(vhome, verbose=False, max_retries=12): @@ -1127,7 +1156,7 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): remote_addr = prompt_response(prompt, default=remote_https_address) parsed_address = urlparse(remote_addr) https_port = parsed_address.port - print(f"PARSED address: {parsed_address}, {https_port}") + if parsed_address.scheme not in ('https',): raise IOError(f"Remote web interface is not valid: {parsed_address}. Please check and try again") From 5b1442564d884966f5fa49af1e9e70d2b4042ee2 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Sun, 16 May 2021 20:30:34 -0700 Subject: [PATCH 17/45] Added pytest for shovel and federation --- .../rabbitmq/rabbitmq_federation_config.yml | 4 +- .../rabbitmq/rabbitmq_shovel_config.yml | 2 +- pytest.ini | 2 + volttron/platform/control.py | 67 +++ volttron/platform/web/csr_endpoints.py | 5 +- volttron/utils/rmq_config_params.py | 2 +- volttron/utils/rmq_mgmt.py | 45 +- volttron/utils/rmq_setup.py | 58 ++- .../fixtures/volttron_platform_fixtures.py | 206 ++++++++- .../multiplatform/test_federation.py | 128 ++++++ volttrontesting/multiplatform/test_shovel.py | 406 ++++++++++++++++++ volttrontesting/utils/platformwrapper.py | 31 +- 12 files changed, 921 insertions(+), 35 deletions(-) create mode 100644 volttrontesting/multiplatform/test_federation.py create mode 100644 volttrontesting/multiplatform/test_shovel.py diff --git a/examples/configurations/rabbitmq/rabbitmq_federation_config.yml b/examples/configurations/rabbitmq/rabbitmq_federation_config.yml index ae4ccb5ea2..311a24d068 100644 --- a/examples/configurations/rabbitmq/rabbitmq_federation_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_federation_config.yml @@ -2,7 +2,7 @@ federation-upstream: volttron4: # hostname of upstream server port: '5671' - https_port: '8443' + https-port: '8443' virtual-host: volttron4 certificates: private_key: "path to private cert" # For example, /home/volttron/vhome/test_fed/certificates/private/volttron1.federation.pem @@ -11,7 +11,7 @@ federation-upstream: federation-user: volttron4.federation #.federation volttron5: # hostname of upstream server port: '5671' - https_port: '8443' + https-port: '8443' virtual-host: volttron5 certificates: private_key: "path to private cert" diff --git a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml index 37bb8af2c7..09668640d3 100644 --- a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml @@ -1,7 +1,7 @@ # Mandatory parameters for shovel setup shovel: volttron2: # remote hostname - https_port: 8443 + https-port: 8443 port: 5671 shovel-user: volttron1.shovelvolttron2 #.shovel virtual-host: volttron diff --git a/pytest.ini b/pytest.ini index 6313fcb010..1048740d1a 100644 --- a/pytest.ini +++ b/pytest.ini @@ -62,3 +62,5 @@ markers = sqlitefuncts: level one integration tests for sqlitefuncts unit: Run all unit/level one integration tests influxdbutils: level one integration tests for influxdb + federation: Tests for rabbitmq federation communication + shovel: Tests for rabbitmq shovel communication diff --git a/volttron/platform/control.py b/volttron/platform/control.py index b5750df0f4..11604a885e 100644 --- a/volttron/platform/control.py +++ b/volttron/platform/control.py @@ -289,6 +289,7 @@ def stop_platform(self): @RPC.export def list_agents(self): + _log.info("CONTROL RPC list_agents") tag = self._aip.agent_tag priority = self._aip.agent_priority return [{'name': name, 'uuid': uuid, @@ -2215,6 +2216,64 @@ def list_shovel_parameters(opts): _stdout.write("Error in getting shovel parameters") +def list_fed_links(opts): + links = None + try: + links = rmq_mgmt.get_federation_links() + except requests.exceptions.HTTPError as e: + _stdout.write("No Federation links Found \n") + return + except ConnectionError as e: + _stdout.write("Error making request to RabbitMQ Management interface.\n" + "Check Connection Parameters: {} \n".format(e)) + return + try: + if links: + name_width = max(5, max(len(lk['name']) for lk in links)) + status_width = max(3, max(len(lk['status']) for lk in links)) + fmt = '{:{}} {:{}}\n' + _stderr.write( + fmt.format('NAME', name_width, 'STATUS', status_width)) + for link in links: + _stdout.write(fmt.format(link['name'], name_width, + link['status'], status_width)) + except (AttributeError, KeyError) as ex: + _stdout.write("Error in federation links") + + +def list_shovel_links(opts): + links = None + try: + links = rmq_mgmt.get_shovel_links() + except requests.exceptions.HTTPError as e: + _stdout.write("No Shovel links Found \n") + return + except ConnectionError as e: + _stdout.write("Error making request to RabbitMQ Management interface.\n" + "Check Connection Parameters: {} \n".format(e)) + return + try: + if links: + name_width = max(5, max(len(lk['name']) for lk in links)) + status_width = max(3, max(len(lk['state']) for lk in links)) + src_exchange_key_width = max(3, max(len(lk['src_exchange_key']) for lk in links)) + src_uri_width = max(3, max(len(lk['src_uri']) for lk in links)) + dest_uri_width = max(3, max(len(lk['dest_uri']) for lk in links)) + fmt = '{:{}} {:{}} {:{}} {:{}} {:{}}\n' + _stderr.write( + fmt.format('NAME', name_width, 'STATUS', status_width, 'SRC_URI', + src_uri_width, 'DEST_URI', dest_uri_width, + 'SRC_EXCHANGE_KEY', src_exchange_key_width)) + for link in links: + _stdout.write(fmt.format(link['name'], name_width, + link['state'], status_width, + link['src_uri'], src_uri_width, + link['dest_uri'], dest_uri_width, + link['src_exchange_key'], src_exchange_key_width)) + except (AttributeError, KeyError) as ex: + _stdout.write("Error in shovel links") + + def list_bindings(opts): bindings = None try: @@ -2957,6 +3016,14 @@ def add_parser(*args, **kwargs) -> argparse.ArgumentParser: subparser=rabbitmq_subparsers) rabbitmq_list_fed_parameters.set_defaults(func=list_fed_parameters) + rabbitmq_list_fed_links = add_parser('list-federation-links', help='list all federation links', + subparser=rabbitmq_subparsers) + rabbitmq_list_fed_links.set_defaults(func=list_fed_links) + + rabbitmq_list_shovel_links = add_parser('list-shovel-links', help='list all Shovel links', + subparser=rabbitmq_subparsers) + rabbitmq_list_shovel_links.set_defaults(func=list_shovel_links) + rabbitmq_list_shovel_parameters = add_parser('list-shovel-parameters', help='list all shovel parameters', subparser=rabbitmq_subparsers) rabbitmq_list_shovel_parameters.set_defaults(func=list_shovel_parameters) diff --git a/volttron/platform/web/csr_endpoints.py b/volttron/platform/web/csr_endpoints.py index c0e5b7deb4..e911adbac0 100644 --- a/volttron/platform/web/csr_endpoints.py +++ b/volttron/platform/web/csr_endpoints.py @@ -48,7 +48,6 @@ def get_routes(self): ] def _csr_request_new(self, env, data): - _log.debug("New csr request") if not isinstance(data, dict): try: @@ -86,7 +85,9 @@ def _csr_request_new(self, env, data): else: try: cert = self._certs.approve_csr(identity) - permissions = self._core().rmq_mgmt.get_default_permissions(identity) + #permissions = self._core().rmq_mgmt.get_default_permissions(identity) + permissions = dict(configure=".*", read=".*", + write=".*") self._core().rmq_mgmt.create_user_with_permissions(identity, permissions, True) diff --git a/volttron/utils/rmq_config_params.py b/volttron/utils/rmq_config_params.py index aa639ee7d7..d801ece8fd 100644 --- a/volttron/utils/rmq_config_params.py +++ b/volttron/utils/rmq_config_params.py @@ -129,7 +129,7 @@ def load_rmq_config(self, volttron_home=None): :return: """ """Loads the config file if the path exists.""" - + _log.debug(f"RMQConfig: {self.volttron_rmq_config}") with open(self.volttron_rmq_config, 'r') as yaml_file: self.config_opts = yaml.safe_load(yaml_file) if self.config_opts.get('rmq-home'): diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 8059b06845..1d940761d3 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -691,6 +691,48 @@ def get_bindings(self, exchange, ssl_auth=None): response = self._http_get_request(url, ssl_auth) return response + def get_federation_links(self, ssl_auth=None): + """ + List all federation links for a given virtual host + :param ssl: Flag for SSL connection + :return: list of federation links + """ + ssl_auth = ssl_auth if ssl_auth is not None else self.is_ssl + url = '/api/federation-links/{vhost}'.format( + vhost=self.rmq_config.virtual_host) + response = self._http_get_request(url, ssl_auth) + links = [] + if response: + for res in response: + lk = dict() + lk['name'] = res['upstream'] + lk['status'] = res['status'] + links.append(lk) + return links + + def get_shovel_links(self, ssl_auth=None): + """ + List all shovel links for a given virtual host + :param ssl: Flag for SSL connection + :return: list of federation links + """ + ssl_auth = ssl_auth if ssl_auth is not None else self.is_ssl + url = '/api/shovels/{vhost}'.format( + vhost=self.rmq_config.virtual_host) + response = self._http_get_request(url, ssl_auth) + links = [] + print(f"get_shovel_links :{response}") + if response: + for res in response: + lk = dict() + lk['name'] = res['name'] + lk['state'] = res['state'] + lk['src_uri'] = res['src_uri'] + lk['dest_uri'] = res['dest_uri'] + lk['src_exchange_key'] = res['src_exchange_key'] + links.append(lk) + return links + # We need http address and port def init_rabbitmq_setup(self): """ @@ -969,7 +1011,8 @@ def build_agent_connection(self, identity, instance_name): # vctl certs create-ssl-keypair should be used to create a cert/key pair # and then agents should be started. try: - self.rmq_config.crts.create_signed_cert_files(rmq_user, overwrite=False) + c , k = self.rmq_config.crts.create_signed_cert_files(rmq_user, overwrite=False) + _log.debug(f"build_agent: {c}, {k}") except Exception as e: _log.error("Exception creating certs. {}".format(e)) raise RuntimeError(e) diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index d07fa2f15c..d4e22754aa 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -168,21 +168,27 @@ def write_env_file(rmq_config, conf_file, env=None): env_conf.write(env_entries) -def _get_federation_certs(vhome): +def _get_federation_certs(instance_name, vhome): federation_config_file = os.path.join(vhome, 'rabbitmq_federation_config.yml') federation_config = read_config_file(federation_config_file) federation = federation_config.get('federation-upstream', {}) success = True update_needed = False + rmq_mgmt = RabbitMQMgmt() + + print(f"_get_federation_certs: {federation_config}, vhome: {federation_config_file}") try: for host, upstream in federation.items(): rmq_user = 'federation' #upstream['federation-user'] if 'certificates' not in upstream: + print(f"_get_federation_certs: certificates not found:") + rmq_mgmt.build_agent_connection(rmq_user, instance_name) # certificates key not found in shovel config - https_port = upstream.get('https_port', 8443) + https_port = upstream.get('https-port', 8443) remote_addr = 'https://{}:{}'.format(host, https_port) print(f"Certificates not found. Requesting CSR from {remote_addr}") + _log.debug(f"Certificates not found. Requesting CSR from {remote_addr}") # request CSR from remote host ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'federation') if ca_file is not None and cert_file is not None and prvt_file is not None: @@ -201,6 +207,7 @@ def _get_federation_certs(vhome): continue if update_needed: federation_config['federation-upstream'] = federation + print(f"write_to_config_file: {federation_config_file}, {federation_config}") write_to_config_file(federation_config_file, federation_config) except KeyError as ex: @@ -283,7 +290,7 @@ def _get_certs_for_shovel(instance_name, vhome): rmq_mgmt.build_agent_connection(shovel_user, instance_name) import time time.sleep(2) - https_port = shovel.get('https_port', 8443) + https_port = shovel.get('https-port', 8443) # certificates key not found in shovel config remote_addr = 'https://{}:{}'.format(remote_host, https_port) @@ -373,25 +380,27 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rpc_config = shovel.get("rpc", {}) _log.debug("RPC config: {}".format(rpc_config)) for remote_instance, agent_ids in rpc_config.items(): + _log.debug("RPC config: {}".format(rpc_config)) for ids in agent_ids: local_identity = ids[0] remote_identity = ids[1] rmq_user = instance_name + '.' + local_identity - src_uri = rmq_mgmt.build_shovel_connection(rmq_user, - local_host, port, - vhost, is_ssl) + src_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, + local_host, port, + vhost, is_ssl) if 'certificates' not in shovel: _log.error("ERROR: Certificates not found.\nContinuing with other configurations") continue + rmq_user = shovel['shovel-user'] # Build destination address - dest_uri = rmq_mgmt.build_shovel_connection(rmq_user, - remote_host, - shovel['port'], - shovel['virtual-host'], - is_ssl, - certs_dict=shovels[remote_host]['certificates']) + dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, + remote_host, + shovel['port'], + shovel['virtual-host'], + is_ssl, + certs_dict=shovels[remote_host]['certificates']) _log.info("Creating shovel to make RPC call to remote Agent" ": {}".format(remote_identity)) @@ -652,6 +661,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na store_message_bus_config(message_bus='rmq', instance_name=instance_name) rmq_config = RMQConfig() + success = True if prompt: # ignore any existing rabbitmq_config.yml|rabbitmq_federation_config.yml|rabbitmq_shovel_config.yml in vhome. @@ -669,6 +679,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na # Load either the newly created config or config passed try: rmq_config.load_rmq_config() + _log.debug(f"RMQConfig 2: {setup_type}, {rmq_config.volttron_home}, os env: {os.environ['VOLTTRON_HOME']}") except (yaml.parser.ParserError, yaml.scanner.ScannerError, yaml.YAMLError) as exc: _log.error("Error: YAML file cannot parsed properly. Check the contents of the file") @@ -745,9 +756,9 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na if setup_type in ["all", "federation"]: # Create a multi-platform federation setup invalid = False - success = _get_federation_certs(rmq_config.volttron_home) - - if success: + s = _get_federation_certs(rmq_config.instance_name, rmq_config.volttron_home) + + if s: _create_federation_setup(rmq_config.is_ssl, rmq_config.virtual_host, rmq_config.volttron_home) @@ -760,9 +771,9 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na port = rmq_config.amqp_port # Check if certs are available in shovel config. If missing, request CSR - success = _get_certs_for_shovel(rmq_config.instance_name, rmq_config.volttron_home) + s = _get_certs_for_shovel(rmq_config.instance_name, rmq_config.volttron_home) - if success: + if s: _create_shovel_setup(rmq_config.instance_name, rmq_config.hostname, port, @@ -1011,7 +1022,7 @@ def prompt_upstream_servers(vhome, verbose=False, max_retries=12): # exit return False upstream_servers[host]['certificates'] = certs_config - upstream_servers[host]['https_port'] = https_port + upstream_servers[host]['https-port'] = https_port except (IOError, TimeoutError, ConnectionError) as e: raise e except ValueError as e: @@ -1075,7 +1086,7 @@ def prompt_shovels(vhome, verbose=False, max_retries=12): # exit return False shovels[host]['certificates'] = certs_config - shovels[host]['https_port'] = https_port + shovels[host]['https-port'] = https_port prompt = prompt_response('\nDo you want shovels for ' 'PUBSUB communication? ', @@ -1299,7 +1310,9 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in raise ValueError("Only can create csr for rabbitmq based platform in ssl mode.") crts = certs.Certs() + _log.debug(f"request_plugin_cert: before create_csr") csr_request = crts.create_csr(fully_qualified_local_identity, discovery_info.instance_name) + _log.debug(f"request_plugin_cert: after create_csr: {csr_request}") # The csr request requires the fully qualified identity that is # going to be connected to the external instance. # @@ -1319,6 +1332,7 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in verify=False) response = grequests.map([request]) + _log.debug(f"request_plugin_cert: grequest response: {response}") if response and isinstance(response, list): response[0].raise_for_status() response = response[0] @@ -1358,20 +1372,22 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in def request_cert_for_plugin(rmq_user, https_address, type): value = None parsed_address = urlparse(https_address) + _log.debug(f"request_cert_for_plugin: {https_address}") if parsed_address.scheme in ('https',): from volttron.platform.web import DiscoveryInfo from volttron.platform.agent.utils import get_platform_instance_name, get_fq_identity info = DiscoveryInfo.request_discovery_info(https_address) - + _log.debug(f"DiscoveryInfo: {info}") # This is if both remote and local are rmq message buses. if info.messagebus_type == 'rmq': fqid_local = get_fq_identity(rmq_user) - + _log.debug(f"request_cert_for_plugin:{type}, {rmq_user}") # Check if we already have the cert, if so use it instead of requesting cert again remote_certs_dir = get_remote_certs_dir(type) remote_cert_name = "{}.{}".format(info.instance_name, fqid_local) certfile = os.path.join(remote_certs_dir, remote_cert_name + ".crt") + _log.debug(f"request_cert_for_plugin:{certfile}") if os.path.exists(certfile): value = certfile else: diff --git a/volttrontesting/fixtures/volttron_platform_fixtures.py b/volttrontesting/fixtures/volttron_platform_fixtures.py index d9450f5459..d3cb74f1d5 100644 --- a/volttrontesting/fixtures/volttron_platform_fixtures.py +++ b/volttrontesting/fixtures/volttron_platform_fixtures.py @@ -3,6 +3,7 @@ from pathlib import Path import shutil from typing import Optional +from urllib.parse import urlparse import psutil import pytest @@ -11,9 +12,11 @@ from volttron.platform import update_platform_config from volttron.utils import get_random_key from volttrontesting.fixtures.cert_fixtures import certs_profile_1 -from volttrontesting.utils.platformwrapper import PlatformWrapper +from volttrontesting.utils.platformwrapper import PlatformWrapper, with_os_environ from volttrontesting.utils.platformwrapper import create_volttron_home from volttrontesting.utils.utils import get_hostname_and_random_port, get_rand_vip, get_rand_ip_and_port +from volttron.utils.rmq_mgmt import RabbitMQMgmt +from volttron.utils.rmq_setup import start_rabbit PRINT_LOG_ON_SHUTDOWN = False HAS_RMQ = is_rabbitmq_available() @@ -489,3 +492,204 @@ def get_test_volttron_home(messagebus: str, web_https=False, web_http=False, has os.environ.update(env_cpy) if not os.environ.get("DEBUG", 0) != 1 and not os.environ.get("DEBUG_MODE", 0): shutil.rmtree(volttron_home, ignore_errors=True) + + +@pytest.fixture(scope="module") +def federated_rmq_instances(request, **kwargs): + """ + Create two rmq based volttron instances. One to act as producer of data and one to act as consumer of data + producer is upstream instance and consumer is the downstream instance + + :return: 2 volttron instances - (producer, consumer) that are federated + """ + upstream_vip = get_rand_vip() + upstream_hostname, upstream_https_port = get_hostname_and_random_port() + web_address = 'https://{hostname}:{port}'.format(hostname=upstream_hostname, port=upstream_https_port) + upstream = build_wrapper(upstream_vip, + ssl_auth=True, + messagebus='rmq', + should_start=True, + bind_web_address=web_address, + instance_name='volttron1', + **kwargs) + upstream.enable_auto_csr() + downstream_vip = get_rand_vip() + hostname, https_port = get_hostname_and_random_port() + downstream_web_address = 'https://{hostname}:{port}'.format(hostname=hostname, port=https_port) + + downstream = build_wrapper(downstream_vip, + ssl_auth=True, + messagebus='rmq', + should_start=False, + bind_web_address=downstream_web_address, + instance_name='volttron2', + **kwargs) + + link_name = None + rmq_mgmt = None + try: + # create federation config and save in volttron home of 'downstream' instance + content = dict() + fed = dict() + fed[upstream.rabbitmq_config_obj.rabbitmq_config["host"]] = { + 'port': upstream.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + 'virtual-host': upstream.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + 'https-port': upstream_https_port, + 'federation-user': "{}.federation".format(downstream.instance_name)} + content['federation-upstream'] = fed + import yaml + config_path = os.path.join(downstream.volttron_home, "rabbitmq_federation_config.yml") + with open(config_path, 'w') as yaml_file: + yaml.dump(content, yaml_file, default_flow_style=False) + + # setup federation link from 'downstream' to 'upstream' instance + downstream.setup_federation(config_path) + + downstream.startup_platform(vip_address=downstream_vip, + bind_web_address=downstream_web_address) + with with_os_environ(downstream.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_federation_links() + assert links and links[0]['status'] == 'running' + link_name = links[0]['name'] + + except Exception as e: + print("Exception setting up federation: {}".format(e)) + upstream.shutdown_platform() + if downstream.is_running(): + downstream.shutdown_platform() + raise e + + yield upstream, downstream + + if link_name and rmq_mgmt: + rmq_mgmt.delete_multiplatform_parameter('federation-upstream', link_name) + upstream.shutdown_platform() + downstream.shutdown_platform() + + +@pytest.fixture(scope="module") +def two_way_federated_rmq_instances(request, **kwargs): + """ + Create two rmq based volttron instances. One to act as producer of data and one to act as consumer of data + producer is upstream instance and consumer is the downstream instance + + :return: 2 volttron instances - (producer, consumer) that are federated + """ + instance_1_vip = get_rand_vip() + instance_1_hostname, instance_1_https_port = get_hostname_and_random_port() + instance_1_web_address = 'https://{hostname}:{port}'.format(hostname=instance_1_hostname, + port=instance_1_https_port) + print(f"instance_1 WEB ADDR: {instance_1_web_address}") + instance_1 = build_wrapper(instance_1_vip, + ssl_auth=True, + messagebus='rmq', + should_start=True, + bind_web_address=instance_1_web_address, + instance_name='volttron1', + **kwargs) + print(f"instance_1 VHOME: {instance_1.volttron_home}, WEB ADDR: {instance_1.bind_web_address}") + instance_1.enable_auto_csr() + + instance_2_vip = get_rand_vip() + instance_2_hostname, instance_2_https_port = get_hostname_and_random_port() + instance_2_webaddress = 'https://{hostname}:{port}'.format(hostname=instance_2_hostname, + port=instance_2_https_port) + + instance_2 = build_wrapper(instance_2_vip, + ssl_auth=True, + messagebus='rmq', + should_start=False, + bind_web_address=instance_2_webaddress, + instance_name='volttron2', + **kwargs) + print(f"instance_2 VHOME: {instance_2.volttron_home}, WEB ADDR: {instance_2.bind_web_address}") + + + instance_2_link_name = None + instance_1_link_name = None + + try: + # create federation config and setup federation link to instance_1 + content = dict() + fed = dict() + fed[instance_1.rabbitmq_config_obj.rabbitmq_config["host"]] = { + 'port': instance_1.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + 'virtual-host': instance_1.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + 'https-port': instance_1_https_port, + 'federation-user': "{}.federation".format(instance_2.instance_name)} + content['federation-upstream'] = fed + import yaml + config_path = os.path.join(instance_2.volttron_home, "rabbitmq_federation_config.yml") + with open(config_path, 'w') as yaml_file: + yaml.dump(content, yaml_file, default_flow_style=False) + + print(f"instance 2 Fed config path:{config_path}, content: {content}") + + instance_2.setup_federation(config_path) + instance_2.startup_platform(vip_address=instance_2_vip, bind_web_address=instance_2_webaddress) + instance_2.enable_auto_csr() + # Check federation link status + with with_os_environ(instance_2.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_federation_links() + print(f"instance 2 fed links state: {links[0]['status']}") + assert links and links[0]['status'] == 'running' + instance_2_link_name = links[0]['name'] + + instance_1.skip_cleanup = True + instance_1.shutdown_platform() + instance_1.skip_cleanup = False + + start_rabbit(rmq_home=instance_1.rabbitmq_config_obj.rmq_home, env=instance_1.env) + + # create federation config and setup federation to instance_2 + content = dict() + fed = dict() + fed[instance_2.rabbitmq_config_obj.rabbitmq_config["host"]] = { + 'port': instance_2.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + 'virtual-host': instance_2.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + 'https-port': instance_2_https_port, + 'federation-user': "{}.federation".format(instance_1.instance_name)} + content['federation-upstream'] = fed + import yaml + config_path = os.path.join(instance_1.volttron_home, "rabbitmq_federation_config.yml") + with open(config_path, 'w') as yaml_file: + yaml.dump(content, yaml_file, default_flow_style=False) + + print(f"instance 1 Fed config path:{config_path}, content: {content}") + + instance_1.setup_federation(config_path) + instance_1.startup_platform(vip_address=instance_1_vip, bind_web_address=instance_1_web_address) + import gevent + gevent.sleep(10) + # Check federation link status + with with_os_environ(instance_1.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_federation_links() + print(f"instance 1 fed links state: {links[0]['status']}") + assert links and links[0]['status'] == 'running' + instance_1_link_name = links[0]['name'] + + except Exception as e: + print(f"Exception setting up federation: {e}") + instance_1.shutdown_platform() + instance_2.shutdown_platform() + raise e + + yield instance_1, instance_2 + + if instance_1_link_name: + with with_os_environ(instance_1.env): + rmq_mgmt = RabbitMQMgmt() + rmq_mgmt.delete_multiplatform_parameter('federation-upstream', + instance_1_link_name) + if instance_2_link_name: + with with_os_environ(instance_2.env): + rmq_mgmt = RabbitMQMgmt() + rmq_mgmt.delete_multiplatform_parameter('federation-upstream', + instance_2_link_name) + instance_1.shutdown_platform() + instance_2.shutdown_platform() + + diff --git a/volttrontesting/multiplatform/test_federation.py b/volttrontesting/multiplatform/test_federation.py new file mode 100644 index 0000000000..6dd0a651a7 --- /dev/null +++ b/volttrontesting/multiplatform/test_federation.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- {{{ +# vim: set fenc=utf-8 ft=python sw=4 ts=4 sts=4 et: +# +# Copyright 2020, Battelle Memorial Institute. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This material was prepared as an account of work sponsored by an agency of +# the United States Government. Neither the United States Government nor the +# United States Department of Energy, nor Battelle, nor any of their +# employees, nor any jurisdiction or organization that has cooperated in the +# development of these materials, makes any warranty, express or +# implied, or assumes any legal liability or responsibility for the accuracy, +# completeness, or usefulness or any information, apparatus, product, +# software, or process disclosed, or represents that its use would not infringe +# privately owned rights. Reference herein to any specific commercial product, +# process, or service by trade name, trademark, manufacturer, or otherwise +# does not necessarily constitute or imply its endorsement, recommendation, or +# favoring by the United States Government or any agency thereof, or +# Battelle Memorial Institute. The views and opinions of authors expressed +# herein do not necessarily state or reflect those of the +# United States Government or any agency thereof. +# +# PACIFIC NORTHWEST NATIONAL LABORATORY operated by +# BATTELLE for the UNITED STATES DEPARTMENT OF ENERGY +# under Contract DE-AC05-76RL01830 +# }}} +""" +pytest test cases base historian to test all_platform configuration. +By default all_platform is set to False and historian subscribes only to topics from local message bus. +When all_platforms=True, historian will subscribe to topics from all connected platforms + +""" + +import gevent +import pytest + +from volttron.platform import get_examples +from volttron.platform.agent.known_identities import CONTROL + + +@pytest.mark.federation +def test_federation_pubsub(federated_rmq_instances): + upstream, downstream = federated_rmq_instances + assert upstream.is_running() + assert downstream.is_running() + + subscription_results2 = {} + subscription_results3 = {} + subscriber = downstream.dynamic_agent + publisher = upstream.dynamic_agent + + def callback2(peer, sender, bus, topic, headers, message): + subscription_results2[topic] = {'headers': headers, 'message': message} + print("platform2 sub results [{}] = {}".format(topic, subscription_results2[topic])) + + def callback3(peer, sender, bus, topic, headers, message): + subscription_results3[topic] = {'headers': headers, 'message': message} + print("platform2 sub results [{}] = {}".format(topic, subscription_results3[topic])) + + subscriber.vip.pubsub.subscribe(peer='pubsub', + prefix='devices/campus/building1', + callback=callback2, + all_platforms=True) + + subscriber.vip.pubsub.subscribe(peer='pubsub', + prefix='analysis', + callback=callback3, + all_platforms=True) + + gevent.sleep(1) + for i in range(5): + publisher.vip.pubsub.publish(peer='pubsub', topic='devices/campus/building1', message=[{'point': 'value'}]) + gevent.sleep(1) + message = subscription_results2['devices/campus/building1']['message'] + assert message == [{'point': 'value'}] + + for i in range(5): + publisher.vip.pubsub.publish(peer='pubsub', + topic='analysis/airside/campus/building1', + message=[{'result': 'pass'}]) + gevent.sleep(1) + message = subscription_results3['analysis/airside/campus/building1']['message'] + assert message == [{'result': 'pass'}] + + +@pytest.mark.federation +def test_federation_rpc(two_way_federated_rmq_instances): + instance_1, instance_2 = two_way_federated_rmq_instances + assert instance_1.is_running() + assert instance_2.is_running() + + auuid = None + try: + auuid = instance_2.install_agent( + agent_dir=get_examples("ListenerAgent"), start=True) + assert auuid is not None + test_agent = instance_1.dynamic_agent + kwargs = {"external_platform": instance_2.instance_name} + agts = test_agent.vip.rpc.call(CONTROL, + 'list_agents', + **kwargs).get(timeout=10) + + assert agts[0]['identity'].startswith('listener') + listener_uuid = agts[0]['uuid'] + test_agent.vip.rpc.call(CONTROL, + 'stop_agent', + listener_uuid, + **kwargs).get(timeout=10) + agt_status = test_agent.vip.rpc.call(CONTROL, + 'agent_status', + listener_uuid, + **kwargs).get(timeout=10) + assert agt_status[1] == 0 + finally: + if instance_2.is_running: + instance_2.remove_agent(auuid) + diff --git a/volttrontesting/multiplatform/test_shovel.py b/volttrontesting/multiplatform/test_shovel.py new file mode 100644 index 0000000000..4fac91441d --- /dev/null +++ b/volttrontesting/multiplatform/test_shovel.py @@ -0,0 +1,406 @@ +# -*- coding: utf-8 -*- {{{ +# vim: set fenc=utf-8 ft=python sw=4 ts=4 sts=4 et: +# +# Copyright 2020, Battelle Memorial Institute. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This material was prepared as an account of work sponsored by an agency of +# the United States Government. Neither the United States Government nor the +# United States Department of Energy, nor Battelle, nor any of their +# employees, nor any jurisdiction or organization that has cooperated in the +# development of these materials, makes any warranty, express or +# implied, or assumes any legal liability or responsibility for the accuracy, +# completeness, or usefulness or any information, apparatus, product, +# software, or process disclosed, or represents that its use would not infringe +# privately owned rights. Reference herein to any specific commercial product, +# process, or service by trade name, trademark, manufacturer, or otherwise +# does not necessarily constitute or imply its endorsement, recommendation, or +# favoring by the United States Government or any agency thereof, or +# Battelle Memorial Institute. The views and opinions of authors expressed +# herein do not necessarily state or reflect those of the +# United States Government or any agency thereof. +# +# PACIFIC NORTHWEST NATIONAL LABORATORY operated by +# BATTELLE for the UNITED STATES DEPARTMENT OF ENERGY +# under Contract DE-AC05-76RL01830 +# }}} +""" +pytest test cases base historian to test all_platform configuration. +By default all_platform is set to False and historian subscribes only to topics from local message bus. +When all_platforms=True, historian will subscribe to topics from all connected platforms + +""" + +import gevent +import pytest +from urllib.parse import urlparse +import os + +from volttron.platform import get_examples +from volttron.platform.agent.known_identities import CONTROL +from volttrontesting.fixtures.volttron_platform_fixtures import build_wrapper +from volttrontesting.utils.utils import get_hostname_and_random_port, get_rand_vip, get_rand_ip_and_port +from volttron.utils import rmq_mgmt +from volttrontesting.utils.platformwrapper import with_os_environ +from volttron.utils.rmq_mgmt import RabbitMQMgmt +from volttron.utils.rmq_setup import start_rabbit + +@pytest.fixture(scope="module") +def shovel_pubsub_rmq_instances(request, **kwargs): + """ + Create two rmq based volttron instances. One to act as producer of data and one to act as consumer of data + Create a shovel to forward data from producer to consumer + + :return: 2 volttron instances - (producer, consumer) that have a shovel connection between them + """ + source_vip = get_rand_vip() + source_hostname, source_https_port = get_hostname_and_random_port() + source_web_address = 'https://{hostname}:{port}'.format(hostname=source_hostname, port=source_https_port) + source_instance_name = 'volttron1' + source = build_wrapper(source_vip, + ssl_auth=True, + messagebus='rmq', + should_start=False, + bind_web_address=source_web_address, + instance_name=source_instance_name, + **kwargs) + + sink_vip = get_rand_vip() + sink_hostname, sink_https_port = get_hostname_and_random_port() + sink_web_address = 'https://{hostname}:{port}'.format(hostname=sink_hostname, port=sink_https_port) + sink = build_wrapper(sink_vip, + ssl_auth=True, + messagebus='rmq', + should_start=True, + bind_web_address=sink_web_address, + instance_name='volttron2', + **kwargs) + + sink.enable_auto_csr() + link_name = None + try: + # create shovel config and save in volttron home of 'source' instance + pubsub_config = dict() + pubsub_config['dynamic_agent'] = 'test' + shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=source_instance_name, + sink_host=sink_hostname) + config_path = create_shovel_config(source.volttron_home, + sink.rabbitmq_config_obj.rabbitmq_config["host"], + sink.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + sink_https_port, + sink.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + shovel_user, + pubsub_config=pubsub_config) + + # setup shovel from 'source' to 'sink' + source.setup_shovel(config_path) + source.startup_platform(vip_address=source_vip, bind_web_address=source_web_address) + with with_os_environ(source.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_shovel_links() + assert links and links[0]['state'] == 'running' + link_name = links[0]['name'] + + except Exception as e: + print("Exception setting up shovel: {}".format(e)) + source.shutdown_platform() + sink.shutdown_platform() + raise e + + yield source, sink + if link_name: + rmq_mgmt.delete_multiplatform_parameter('shovel', link_name) + source.shutdown_platform() + sink.shutdown_platform() + + +def create_shovel_config(vhome, host, port, https_port, vhost, shover_user, pubsub_config=None, rpc_config=None): + content = dict() + shovel = dict() + shovel[host] = {'https-port': https_port, + 'port': port, + 'shovel-user': shover_user, + 'virtual-host': vhost, + } + if pubsub_config: + shovel[host]['pubsub'] = pubsub_config + if rpc_config: + shovel[host]['rpc'] = rpc_config + content['shovel'] = shovel + + import yaml + config_path = os.path.join(vhome, "rabbitmq_shovel_config.yml") + with open(config_path, 'w') as yaml_file: + yaml.dump(content, yaml_file, default_flow_style=False) + return config_path + + +@pytest.fixture(scope="module") +def xxx(request, **kwargs): + """ + Create two rmq based volttron instances. One to act as producer of data and one to act as consumer of data + Create a shovel to forward data from producer to consumer + + :return: 2 volttron instances - (producer, consumer) that have a shovel connection between them + """ + source_vip = get_rand_vip() + source_hostname, source_https_port = get_hostname_and_random_port() + source_web_address = 'https://{hostname}:{port}'.format(hostname=source_hostname, port=source_https_port) + source_instance_name = 'volttron1' + source = build_wrapper(source_vip, + ssl_auth=True, + messagebus='rmq', + should_start=False, + bind_web_address=source_web_address, + instance_name=source_instance_name, + **kwargs) + + sink_vip = get_rand_vip() + sink_hostname, sink_https_port = get_hostname_and_random_port() + sink_web_address = 'https://{hostname}:{port}'.format(hostname=sink_hostname, port=sink_https_port) + sink = build_wrapper(sink_vip, + ssl_auth=True, + messagebus='rmq', + should_start=True, + bind_web_address=sink_web_address, + instance_name='volttron2', + **kwargs) + + sink.enable_auto_csr() + link_name = None + try: + # create shovel config and save in volttron home of 'source' instance + # pubsub_config = dict() + # pubsub_config['dynamic_agent'] = 'test' + shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=source_instance_name, + sink_host=sink_hostname) + rpc_config = dict() + rpc_config[source_instance_name] = [['test', CONTROL]] + # instance_1_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=instance_1_name, + # sink_host=instance_2_hostname) + config_path = create_shovel_config(source.volttron_home, + sink.rabbitmq_config_obj.rabbitmq_config["host"], + sink.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + sink_https_port, + sink.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + shovel_user, + rpc_config=rpc_config) + + # setup shovel from 'source' to 'sink' + source.setup_shovel(config_path) + source.startup_platform(vip_address=source_vip, bind_web_address=source_web_address) + with with_os_environ(source.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_shovel_links() + assert links and links[0]['state'] == 'running' + link_name = links[0]['name'] + + except Exception as e: + print("Exception setting up shovel: {}".format(e)) + source.shutdown_platform() + sink.shutdown_platform() + raise e + + yield source, sink + if link_name: + rmq_mgmt.delete_multiplatform_parameter('shovel', link_name) + source.shutdown_platform() + sink.shutdown_platform() + +@pytest.fixture(scope="module") +def two_way_shovel_rmq_instances(request, **kwargs): + """ + Create two rmq based volttron instance and setup shovel connections between the two + for bi-directional data flow + + :return: 2 volttron instances that are connected with shovels + """ + instance_1_vip = get_rand_vip() + instance_1_hostname, instance_1_https_port = get_hostname_and_random_port() + instance_1_web_address = 'https://{hostname}:{port}'.format(hostname=instance_1_hostname, + port=instance_1_https_port) + instance_1_name = 'volttron1' + print(f"instance_1 WEB ADDR: {instance_1_web_address}") + instance_1 = build_wrapper(instance_1_vip, + ssl_auth=True, + messagebus='rmq', + should_start=False, + bind_web_address=instance_1_web_address, + instance_name=instance_1_name, + **kwargs) + print(f"instance_1 VHOME: {instance_1.volttron_home}, WEB ADDR: {instance_1.bind_web_address}") + + instance_2_vip = get_rand_vip() + instance_2_hostname, instance_2_https_port = get_hostname_and_random_port() + instance_2_web_address = 'https://{hostname}:{port}'.format(hostname=instance_2_hostname, + port=instance_2_https_port) + instance_2_name = 'volttron2' + instance_2 = build_wrapper(instance_2_vip, + ssl_auth=True, + messagebus='rmq', + should_start=True, + bind_web_address=instance_2_web_address, + instance_name=instance_2_name, + **kwargs) + print(f"instance_2 VHOME: {instance_2.volttron_home}, WEB ADDR: {instance_2.bind_web_address}") + instance_2.enable_auto_csr() + + instance_2_link_name = None + instance_1_link_name = None + + try: + rpc_config = dict() + rpc_config[instance_1_name] = [['test', CONTROL]] + instance_1_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=instance_1_name, + sink_host=instance_2_hostname) + print(f"shovel user: {instance_1_shovel_user}") + config_path = create_shovel_config(instance_1.volttron_home, + instance_2.rabbitmq_config_obj.rabbitmq_config["host"], + instance_2.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + instance_2_https_port, + instance_2.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + instance_1_shovel_user, + rpc_config=rpc_config) + + print(f"instance 1 shovel config path:{config_path}") + + instance_1.setup_shovel(config_path) + instance_1.startup_platform(vip_address=instance_1_vip, bind_web_address=instance_1_web_address) + instance_1.enable_auto_csr() + + # Check shovel link status + with with_os_environ(instance_1.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_shovel_links() + users = rmq_mgmt.get_users() + print(f"USERS: {users}") + print(f"instance 1 shovel links: {links}, state: {links[0]['state']}") + assert links and links[0]['state'] == 'running' + instance_1_link_name = links[0]['name'] + + instance_2.skip_cleanup = True + instance_2.shutdown_platform() + instance_2.skip_cleanup = False + + # Start RabbitMQ broker to establish shovel link + start_rabbit(rmq_home=instance_2.rabbitmq_config_obj.rmq_home, env=instance_2.env) + + rpc_config = dict() + rpc_config[instance_2_name] = [[CONTROL, 'dynamic_agent']] + instance_2_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=instance_2_name, + sink_host=instance_1_hostname) + + config_path = create_shovel_config(instance_2.volttron_home, + instance_1.rabbitmq_config_obj.rabbitmq_config["host"], + instance_1.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + instance_1_https_port, + instance_1.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + instance_2_shovel_user, + rpc_config=rpc_config) + + print(f"instance 2 shovel config path:{config_path}") + + instance_2.setup_shovel(config_path) + instance_2.startup_platform(vip_address=instance_2_vip, bind_web_address=instance_2_web_address) + + # Check shovel link status + with with_os_environ(instance_2.env): + rmq_mgmt = RabbitMQMgmt() + links = rmq_mgmt.get_shovel_links() + qs = rmq_mgmt.get_queues() + print(f"instance 2 Queues: {qs}") + print(f"instance 2 shovel links: {links}, state: {links[0]['state']}") + assert links and links[0]['state'] == 'running' + instance_2_link_name = links[0]['name'] + + except Exception as e: + print(f"Exception setting up shovel: {e}") + instance_1.shutdown_platform() + instance_2.shutdown_platform() + raise e + + yield instance_1, instance_2 + + if instance_1_link_name: + with with_os_environ(instance_1.env): + rmq_mgmt = RabbitMQMgmt() + rmq_mgmt.delete_multiplatform_parameter('shovel', + instance_1_link_name) + if instance_2_link_name: + with with_os_environ(instance_2.env): + rmq_mgmt = RabbitMQMgmt() + rmq_mgmt.delete_multiplatform_parameter('shovel', + instance_2_link_name) + instance_1.shutdown_platform() + instance_2.shutdown_platform() + + +@pytest.mark.shovel +def test_shovel_pubsub(shovel_pubsub_rmq_instances): + source, sink = shovel_pubsub_rmq_instances + assert source.is_running() + assert sink.is_running() + + subscription_results2 = {} + publisher = source.dynamic_agent + subscriber = sink.dynamic_agent + + def callback2(peer, sender, bus, topic, headers, message): + subscription_results2[topic] = {'headers': headers, 'message': message} + print("platform2 sub results [{}] = {}".format(topic, subscription_results2[topic])) + + subscriber.vip.pubsub.subscribe(peer='pubsub', + prefix='test/campus/building1', + callback=callback2, + all_platforms=True) + + gevent.sleep(1) + for i in range(5): + publisher.vip.pubsub.publish(peer='pubsub', topic='test/campus/building1', message=[{'point': 'value'}]) + gevent.sleep(1) + message = subscription_results2['test/campus/building1']['message'] + assert message == [{'point': 'value'}] + + +@pytest.mark.dev +def test_shovel_rpc(xxx): + instance_1, instance_2 = xxx + assert instance_1.is_running() + assert instance_2.is_running() + + # auuid = None + # try: + # auuid = instance_2.install_agent( + # agent_dir=get_examples("ListenerAgent"), start=True) + # assert auuid is not None + # test_agent = instance_1.dynamic_agent + # kwargs = {"external_platform": instance_2.instance_name} + # agts = test_agent.vip.rpc.call(CONTROL, + # 'list_agents', + # **kwargs).get(timeout=10) + # + # assert agts[0]['identity'].startswith('listener') + # listener_uuid = agts[0]['uuid'] + # test_agent.vip.rpc.call(CONTROL, + # 'stop_agent', + # listener_uuid, + # **kwargs).get(timeout=10) + # agt_status = test_agent.vip.rpc.call(CONTROL, + # 'agent_status', + # listener_uuid, + # **kwargs).get(timeout=10) + # assert agt_status[1] == 0 + # finally: + # if instance_2: + # instance_2.remove_agent(auuid) diff --git a/volttrontesting/utils/platformwrapper.py b/volttrontesting/utils/platformwrapper.py index bce25595a9..8ffca4dd77 100644 --- a/volttrontesting/utils/platformwrapper.py +++ b/volttrontesting/utils/platformwrapper.py @@ -44,6 +44,7 @@ from volttrontesting.utils.utils import get_rand_tcp_address from volttrontesting.fixtures.rmq_test_setup import create_rmq_volttron_setup from volttron.utils.rmq_setup import start_rabbit, stop_rabbit +from volttron.utils.rmq_setup import setup_rabbitmq_volttron utils.setup_logging() _log = logging.getLogger(__name__) @@ -1328,13 +1329,31 @@ def setup_federation(self, config_path): :param config_path: path to federation config yml file. """ with with_os_environ(self.env): - _log.debug("Setting up federation using config : {}".format(config_path)) + print(f"VHOME WITH with_os_environ: {os.environ['VOLTTRON_HOME']}") + setup_rabbitmq_volttron('federation', + verbose=False, + prompt=False, + instance_name=self.instance_name, + rmq_conf_file=self.rabbitmq_config_obj.rmq_conf_file, + max_retries=5, + env=self.env) + + + def setup_shovel(self, config_path): + """ + Set up shovel using the given config path + :param config_path: path to shovel config yml file. + """ + with with_os_environ(self.env): + print(f"VHOME WITH with_os_environ: {os.environ['VOLTTRON_HOME']}") + setup_rabbitmq_volttron('shovel', + verbose=False, + prompt=False, + instance_name=self.instance_name, + rmq_conf_file=self.rabbitmq_config_obj.rmq_conf_file, + max_retries=5, + env=self.env) - cmd = ['vcfg'] - cmd.extend(['--vhome', self.volttron_home, '--instance-name', self.instance_name, '--rabbitmq', - "federation", config_path]) - execute_command(cmd, env=self.env, logger=_log, - err_prefix="Error setting up federation") def restart_platform(self): with with_os_environ(self.env): From 993de54fd229a866319c25404b4c99783c3ea903 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Wed, 26 May 2021 11:24:57 -0700 Subject: [PATCH 18/45] After testing rpc shovel --- volttron/platform/vip/rmq_connection.py | 2 +- volttron/platform/web/csr_endpoints.py | 1 + volttron/utils/rmq_mgmt.py | 12 +- volttrontesting/multiplatform/test_shovel.py | 218 ++++++------------- 4 files changed, 76 insertions(+), 157 deletions(-) diff --git a/volttron/platform/vip/rmq_connection.py b/volttron/platform/vip/rmq_connection.py index 3724802a74..1f97d58139 100644 --- a/volttron/platform/vip/rmq_connection.py +++ b/volttron/platform/vip/rmq_connection.py @@ -360,7 +360,7 @@ def _send_via_rmq(self, destination_routing_key, subsystem, args, msg_id, user): # Fit VIP frames in the PIKA properties dict # VIP format - [SENDER, RECIPIENT, PROTO, USER_ID, MSG_ID, SUBSYS, ARGS...] dct = { - 'user_id': self._rmq_userid, + #'user_id': self._rmq_userid, 'app_id': self.routing_key, # Routing key of SENDER 'headers': dict( recipient=destination_routing_key, # RECEIVER diff --git a/volttron/platform/web/csr_endpoints.py b/volttron/platform/web/csr_endpoints.py index e911adbac0..1165add805 100644 --- a/volttron/platform/web/csr_endpoints.py +++ b/volttron/platform/web/csr_endpoints.py @@ -86,6 +86,7 @@ def _csr_request_new(self, env, data): try: cert = self._certs.approve_csr(identity) #permissions = self._core().rmq_mgmt.get_default_permissions(identity) + _log.debug(f"CREATING NEW RMQ USER: {identity}") permissions = dict(configure=".*", read=".*", write=".*") self._core().rmq_mgmt.create_user_with_permissions(identity, diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 1d940761d3..dd62da96a4 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -721,7 +721,7 @@ def get_shovel_links(self, ssl_auth=None): vhost=self.rmq_config.virtual_host) response = self._http_get_request(url, ssl_auth) links = [] - print(f"get_shovel_links :{response}") + if response: for res in response: lk = dict() @@ -1011,8 +1011,7 @@ def build_agent_connection(self, identity, instance_name): # vctl certs create-ssl-keypair should be used to create a cert/key pair # and then agents should be started. try: - c , k = self.rmq_config.crts.create_signed_cert_files(rmq_user, overwrite=False) - _log.debug(f"build_agent: {c}, {k}") + c, k = self.rmq_config.crts.create_signed_cert_files(rmq_user, overwrite=False) except Exception as e: _log.error("Exception creating certs. {}".format(e)) raise RuntimeError(e) @@ -1031,6 +1030,13 @@ def build_agent_connection(self, identity, instance_name): return param + def create_signed_certs(self, rmq_user): + try: + c, k = self.rmq_config.crts.create_signed_cert_files(rmq_user, overwrite=False) + except Exception as e: + _log.error("Exception creating certs. {}".format(e)) + raise RuntimeError(e) + def build_remote_plugin_connection(self, rmq_user, host, port, vhost, is_ssl, certs_dict=None): """ Check if RabbitMQ user and certs exists for this agent, if not diff --git a/volttrontesting/multiplatform/test_shovel.py b/volttrontesting/multiplatform/test_shovel.py index 4fac91441d..75818fd653 100644 --- a/volttrontesting/multiplatform/test_shovel.py +++ b/volttrontesting/multiplatform/test_shovel.py @@ -169,181 +169,93 @@ def xxx(request, **kwargs): sink_vip = get_rand_vip() sink_hostname, sink_https_port = get_hostname_and_random_port() sink_web_address = 'https://{hostname}:{port}'.format(hostname=sink_hostname, port=sink_https_port) + sink_instance_name = 'volttron2' sink = build_wrapper(sink_vip, ssl_auth=True, messagebus='rmq', should_start=True, bind_web_address=sink_web_address, - instance_name='volttron2', + instance_name=sink_instance_name, **kwargs) sink.enable_auto_csr() - link_name = None + source_link_name = None try: # create shovel config and save in volttron home of 'source' instance - # pubsub_config = dict() - # pubsub_config['dynamic_agent'] = 'test' - shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=source_instance_name, - sink_host=sink_hostname) + source_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=source_instance_name, + sink_host=sink_hostname) rpc_config = dict() - rpc_config[source_instance_name] = [['test', CONTROL]] - # instance_1_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=instance_1_name, - # sink_host=instance_2_hostname) + rpc_config[sink_instance_name] = [['dynamic_agent', CONTROL]] config_path = create_shovel_config(source.volttron_home, sink.rabbitmq_config_obj.rabbitmq_config["host"], sink.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], sink_https_port, sink.rabbitmq_config_obj.rabbitmq_config["virtual-host"], - shovel_user, + source_shovel_user, rpc_config=rpc_config) # setup shovel from 'source' to 'sink' source.setup_shovel(config_path) source.startup_platform(vip_address=source_vip, bind_web_address=source_web_address) - with with_os_environ(source.env): - rmq_mgmt = RabbitMQMgmt() - links = rmq_mgmt.get_shovel_links() - assert links and links[0]['state'] == 'running' - link_name = links[0]['name'] - - except Exception as e: - print("Exception setting up shovel: {}".format(e)) - source.shutdown_platform() - sink.shutdown_platform() - raise e - - yield source, sink - if link_name: - rmq_mgmt.delete_multiplatform_parameter('shovel', link_name) - source.shutdown_platform() - sink.shutdown_platform() - -@pytest.fixture(scope="module") -def two_way_shovel_rmq_instances(request, **kwargs): - """ - Create two rmq based volttron instance and setup shovel connections between the two - for bi-directional data flow - - :return: 2 volttron instances that are connected with shovels - """ - instance_1_vip = get_rand_vip() - instance_1_hostname, instance_1_https_port = get_hostname_and_random_port() - instance_1_web_address = 'https://{hostname}:{port}'.format(hostname=instance_1_hostname, - port=instance_1_https_port) - instance_1_name = 'volttron1' - print(f"instance_1 WEB ADDR: {instance_1_web_address}") - instance_1 = build_wrapper(instance_1_vip, - ssl_auth=True, - messagebus='rmq', - should_start=False, - bind_web_address=instance_1_web_address, - instance_name=instance_1_name, - **kwargs) - print(f"instance_1 VHOME: {instance_1.volttron_home}, WEB ADDR: {instance_1.bind_web_address}") - - instance_2_vip = get_rand_vip() - instance_2_hostname, instance_2_https_port = get_hostname_and_random_port() - instance_2_web_address = 'https://{hostname}:{port}'.format(hostname=instance_2_hostname, - port=instance_2_https_port) - instance_2_name = 'volttron2' - instance_2 = build_wrapper(instance_2_vip, - ssl_auth=True, - messagebus='rmq', - should_start=True, - bind_web_address=instance_2_web_address, - instance_name=instance_2_name, - **kwargs) - print(f"instance_2 VHOME: {instance_2.volttron_home}, WEB ADDR: {instance_2.bind_web_address}") - instance_2.enable_auto_csr() - - instance_2_link_name = None - instance_1_link_name = None - - try: - rpc_config = dict() - rpc_config[instance_1_name] = [['test', CONTROL]] - instance_1_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=instance_1_name, - sink_host=instance_2_hostname) - print(f"shovel user: {instance_1_shovel_user}") - config_path = create_shovel_config(instance_1.volttron_home, - instance_2.rabbitmq_config_obj.rabbitmq_config["host"], - instance_2.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], - instance_2_https_port, - instance_2.rabbitmq_config_obj.rabbitmq_config["virtual-host"], - instance_1_shovel_user, - rpc_config=rpc_config) - - print(f"instance 1 shovel config path:{config_path}") - - instance_1.setup_shovel(config_path) - instance_1.startup_platform(vip_address=instance_1_vip, bind_web_address=instance_1_web_address) - instance_1.enable_auto_csr() + source.enable_auto_csr() # Check shovel link status - with with_os_environ(instance_1.env): + with with_os_environ(source.env): rmq_mgmt = RabbitMQMgmt() links = rmq_mgmt.get_shovel_links() - users = rmq_mgmt.get_users() - print(f"USERS: {users}") - print(f"instance 1 shovel links: {links}, state: {links[0]['state']}") assert links and links[0]['state'] == 'running' - instance_1_link_name = links[0]['name'] + source_link_name = links[0]['name'] - instance_2.skip_cleanup = True - instance_2.shutdown_platform() - instance_2.skip_cleanup = False + sink.skip_cleanup = True + sink.shutdown_platform() + sink.skip_cleanup = False # Start RabbitMQ broker to establish shovel link - start_rabbit(rmq_home=instance_2.rabbitmq_config_obj.rmq_home, env=instance_2.env) + start_rabbit(rmq_home=sink.rabbitmq_config_obj.rmq_home, env=sink.env) rpc_config = dict() - rpc_config[instance_2_name] = [[CONTROL, 'dynamic_agent']] - instance_2_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=instance_2_name, - sink_host=instance_1_hostname) - - config_path = create_shovel_config(instance_2.volttron_home, - instance_1.rabbitmq_config_obj.rabbitmq_config["host"], - instance_1.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], - instance_1_https_port, - instance_1.rabbitmq_config_obj.rabbitmq_config["virtual-host"], - instance_2_shovel_user, + rpc_config[source_instance_name] = [[CONTROL, 'dynamic_agent']] + sink_shovel_user = '{source_instance}.shovel{sink_host}'.format(source_instance=sink_instance_name, + sink_host=source_hostname) + + config_path = create_shovel_config(sink.volttron_home, + source.rabbitmq_config_obj.rabbitmq_config["host"], + source.rabbitmq_config_obj.rabbitmq_config["amqp-port-ssl"], + source_https_port, + source.rabbitmq_config_obj.rabbitmq_config["virtual-host"], + sink_shovel_user, rpc_config=rpc_config) print(f"instance 2 shovel config path:{config_path}") - instance_2.setup_shovel(config_path) - instance_2.startup_platform(vip_address=instance_2_vip, bind_web_address=instance_2_web_address) + sink.setup_shovel(config_path) + sink.startup_platform(vip_address=sink_vip, bind_web_address=sink_web_address) # Check shovel link status - with with_os_environ(instance_2.env): + with with_os_environ(sink.env): rmq_mgmt = RabbitMQMgmt() links = rmq_mgmt.get_shovel_links() - qs = rmq_mgmt.get_queues() - print(f"instance 2 Queues: {qs}") print(f"instance 2 shovel links: {links}, state: {links[0]['state']}") assert links and links[0]['state'] == 'running' - instance_2_link_name = links[0]['name'] + sink_link_name = links[0]['name'] except Exception as e: - print(f"Exception setting up shovel: {e}") - instance_1.shutdown_platform() - instance_2.shutdown_platform() + print("Exception setting up shovel: {}".format(e)) + source.shutdown_platform() + sink.shutdown_platform() raise e - yield instance_1, instance_2 - - if instance_1_link_name: - with with_os_environ(instance_1.env): + yield source, sink + if source_link_name: + with with_os_environ(source.env): rmq_mgmt = RabbitMQMgmt() - rmq_mgmt.delete_multiplatform_parameter('shovel', - instance_1_link_name) - if instance_2_link_name: - with with_os_environ(instance_2.env): + rmq_mgmt.delete_multiplatform_parameter('shovel', source_link_name) + if sink_link_name: + with with_os_environ(sink.env): rmq_mgmt = RabbitMQMgmt() - rmq_mgmt.delete_multiplatform_parameter('shovel', - instance_2_link_name) - instance_1.shutdown_platform() - instance_2.shutdown_platform() + rmq_mgmt.delete_multiplatform_parameter('shovel', sink_link_name) + source.shutdown_platform() + sink.shutdown_platform() @pytest.mark.shovel @@ -379,28 +291,28 @@ def test_shovel_rpc(xxx): assert instance_1.is_running() assert instance_2.is_running() - # auuid = None - # try: - # auuid = instance_2.install_agent( - # agent_dir=get_examples("ListenerAgent"), start=True) - # assert auuid is not None - # test_agent = instance_1.dynamic_agent - # kwargs = {"external_platform": instance_2.instance_name} - # agts = test_agent.vip.rpc.call(CONTROL, - # 'list_agents', - # **kwargs).get(timeout=10) - # - # assert agts[0]['identity'].startswith('listener') - # listener_uuid = agts[0]['uuid'] - # test_agent.vip.rpc.call(CONTROL, - # 'stop_agent', - # listener_uuid, - # **kwargs).get(timeout=10) - # agt_status = test_agent.vip.rpc.call(CONTROL, - # 'agent_status', - # listener_uuid, - # **kwargs).get(timeout=10) - # assert agt_status[1] == 0 - # finally: - # if instance_2: - # instance_2.remove_agent(auuid) + auuid = None + try: + auuid = instance_2.install_agent(vip_identity='listener', + agent_dir=get_examples("ListenerAgent"), start=True) + assert auuid is not None + test_agent = instance_1.dynamic_agent + kwargs = {"external_platform": instance_2.instance_name} + agts = test_agent.vip.rpc.call(CONTROL, + 'list_agents', + **kwargs).get(timeout=10) + + assert agts[0]['identity'].startswith('listener') + listener_uuid = agts[0]['uuid'] + test_agent.vip.rpc.call(CONTROL, + 'stop_agent', + listener_uuid, + **kwargs).get(timeout=10) + agt_status = test_agent.vip.rpc.call(CONTROL, + 'agent_status', + listener_uuid, + **kwargs).get(timeout=10) + assert agt_status[1] == 0 + finally: + if instance_2: + instance_2.remove_agent(auuid) From 67671fdd14ed57edb66ab18b8c85be29a17b8d14 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Wed, 26 May 2021 11:33:03 -0700 Subject: [PATCH 19/45] After testing rpc shovel --- volttron/utils/rmq_setup.py | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index d4e22754aa..dc602e0f0a 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -60,9 +60,10 @@ from volttron.platform.agent.utils import (store_message_bus_config, execute_command) from volttron.utils.prompt import prompt_response, y, y_or_n -from volttron.platform.agent.utils import get_platform_instance_name from volttron.platform import jsonapi from urllib.parse import urlparse +from volttron.platform.web import DiscoveryInfo +from volttron.platform.agent.utils import get_platform_instance_name, get_fq_identity _log = logging.getLogger(os.path.basename(__file__)) @@ -1072,12 +1073,14 @@ def prompt_shovels(vhome, verbose=False, max_retries=12): 'virtual-host': vhost} rmq_mgmt = RabbitMQMgmt() instance_name = get_platform_instance_name() - shovel_user = 'shovel{}'.format(host) + prompt = 'Name for the shovel user: ' + shovel_user = prompt_response(prompt, mandatory=True) - rmq_mgmt.build_agent_connection(shovel_user, instance_name) - import time + #rmq_mgmt.build_agent_connection(shovel_user, instance_name) + #import time - time.sleep(2) + #time.sleep(2) + #shovels[host]['shovel-user'] = instance_name + "." + shovel_user shovels[host]['shovel-user'] = instance_name + "." + shovel_user certs_config, https_port = _prompt_csr_request(shovel_user, host, 'shovel', verbose, max_retries) @@ -1161,6 +1164,10 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): # private_key csr_config['private_key'] = private_cert else: + rmqmgmt = RabbitMQMgmt() + fqid_local = get_fq_identity(rmq_user) + rmqmgmt.create_signed_certs(fqid_local) + remote_https_address = "https://{}:8443".format(host) prompt = 'Path to remote web interface: ' @@ -1310,9 +1317,9 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in raise ValueError("Only can create csr for rabbitmq based platform in ssl mode.") crts = certs.Certs() - _log.debug(f"request_plugin_cert: before create_csr") + csr_request = crts.create_csr(fully_qualified_local_identity, discovery_info.instance_name) - _log.debug(f"request_plugin_cert: after create_csr: {csr_request}") + # The csr request requires the fully qualified identity that is # going to be connected to the external instance. # @@ -1320,6 +1327,7 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in # concatenated with the identity of the local fully qualified identity. remote_cert_name = "{}.{}".format(discovery_info.instance_name, fully_qualified_local_identity) + _log.debug(f"Remote cert name: {remote_cert_name}, fqid: {fully_qualified_local_identity}") remote_ca_name = discovery_info.instance_name + "_ca" json_request = dict( @@ -1372,19 +1380,18 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in def request_cert_for_plugin(rmq_user, https_address, type): value = None parsed_address = urlparse(https_address) - _log.debug(f"request_cert_for_plugin: {https_address}") + if parsed_address.scheme in ('https',): - from volttron.platform.web import DiscoveryInfo - from volttron.platform.agent.utils import get_platform_instance_name, get_fq_identity info = DiscoveryInfo.request_discovery_info(https_address) - _log.debug(f"DiscoveryInfo: {info}") + # This is if both remote and local are rmq message buses. if info.messagebus_type == 'rmq': fqid_local = get_fq_identity(rmq_user) - _log.debug(f"request_cert_for_plugin:{type}, {rmq_user}") + # Check if we already have the cert, if so use it instead of requesting cert again remote_certs_dir = get_remote_certs_dir(type) remote_cert_name = "{}.{}".format(info.instance_name, fqid_local) + _log.debug(f"Remote cert name: {remote_cert_name}") certfile = os.path.join(remote_certs_dir, remote_cert_name + ".crt") _log.debug(f"request_cert_for_plugin:{certfile}") @@ -1474,8 +1481,7 @@ def start_rabbit(rmq_home, env=None): if __name__ == "__main__": - parser = argparse.ArgumentParser( - formatter_class=argparse.RawTextHelpFormatter) + parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('setup_type', help='Instance type: all, single, federation or shovel') parser.add_argument('prompt', default=False, From 0d9d23d7592ad97ca57a45198be052337fc7bbe3 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 27 May 2021 14:47:44 -0700 Subject: [PATCH 20/45] Fixes to shovel rpc tests --- volttron/utils/rmq_setup.py | 28 +++++--------------- volttrontesting/multiplatform/test_shovel.py | 25 ++++++++--------- 2 files changed, 20 insertions(+), 33 deletions(-) diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index dc602e0f0a..cbdea2716b 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -178,13 +178,10 @@ def _get_federation_certs(instance_name, vhome): update_needed = False rmq_mgmt = RabbitMQMgmt() - print(f"_get_federation_certs: {federation_config}, vhome: {federation_config_file}") try: for host, upstream in federation.items(): - rmq_user = 'federation' #upstream['federation-user'] + rmq_user = 'federation' if 'certificates' not in upstream: - print(f"_get_federation_certs: certificates not found:") - rmq_mgmt.build_agent_connection(rmq_user, instance_name) # certificates key not found in shovel config https_port = upstream.get('https-port', 8443) remote_addr = 'https://{}:{}'.format(host, https_port) @@ -208,7 +205,6 @@ def _get_federation_certs(instance_name, vhome): continue if update_needed: federation_config['federation-upstream'] = federation - print(f"write_to_config_file: {federation_config_file}, {federation_config}") write_to_config_file(federation_config_file, federation_config) except KeyError as ex: @@ -288,9 +284,6 @@ def _get_certs_for_shovel(instance_name, vhome): for remote_host, shovel in shovels.items(): if 'certificates' not in shovel: shovel_user = shovel['shovel-user'] - rmq_mgmt.build_agent_connection(shovel_user, instance_name) - import time - time.sleep(2) https_port = shovel.get('https-port', 8443) # certificates key not found in shovel config @@ -1009,9 +1002,7 @@ def prompt_upstream_servers(vhome, verbose=False, max_retries=12): rmq_mgmt = RabbitMQMgmt() instance_name = get_platform_instance_name() upstream_user = 'federation' - rmq_mgmt.build_agent_connection(upstream_user, instance_name) - import time - time.sleep(2) + upstream_servers[host]['federation-user'] = instance_name + "." + upstream_user certs_config, https_port = _prompt_csr_request(upstream_user, host, @@ -1076,11 +1067,6 @@ def prompt_shovels(vhome, verbose=False, max_retries=12): prompt = 'Name for the shovel user: ' shovel_user = prompt_response(prompt, mandatory=True) - #rmq_mgmt.build_agent_connection(shovel_user, instance_name) - #import time - - #time.sleep(2) - #shovels[host]['shovel-user'] = instance_name + "." + shovel_user shovels[host]['shovel-user'] = instance_name + "." + shovel_user certs_config, https_port = _prompt_csr_request(shovel_user, host, 'shovel', verbose, max_retries) @@ -1164,10 +1150,6 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): # private_key csr_config['private_key'] = private_cert else: - rmqmgmt = RabbitMQMgmt() - fqid_local = get_fq_identity(rmq_user) - rmqmgmt.create_signed_certs(fqid_local) - remote_https_address = "https://{}:8443".format(host) prompt = 'Path to remote web interface: ' @@ -1193,7 +1175,7 @@ def _prompt_csr_request(rmq_user, host, type, verbose=False, max_retries=12): return csr_config, https_port -def _request_csr(rmq_user, remote_addr, type, verbose=False, max_retries=12): +def _request_csr(rmq_user, remote_addr, type, verbose=False, cert_exists=True, max_retries=12): ca_file = None certfile = None prvtfile = None @@ -1202,6 +1184,10 @@ def _request_csr(rmq_user, remote_addr, type, verbose=False, max_retries=12): # so that we don't get info level logs showing up during our multiple csr requests logging.getLogger("volttron.platform.web.discovery").setLevel(logging.WARNING) + rmqmgmt = RabbitMQMgmt() + fqid_local = get_fq_identity(rmq_user) + rmqmgmt.create_signed_certs(fqid_local) + response = request_cert_for_plugin(rmq_user, remote_addr, type) success = False diff --git a/volttrontesting/multiplatform/test_shovel.py b/volttrontesting/multiplatform/test_shovel.py index 75818fd653..1f51195e86 100644 --- a/volttrontesting/multiplatform/test_shovel.py +++ b/volttrontesting/multiplatform/test_shovel.py @@ -56,6 +56,7 @@ from volttron.utils.rmq_mgmt import RabbitMQMgmt from volttron.utils.rmq_setup import start_rabbit + @pytest.fixture(scope="module") def shovel_pubsub_rmq_instances(request, **kwargs): """ @@ -141,18 +142,19 @@ def create_shovel_config(vhome, host, port, https_port, vhost, shover_user, pubs import yaml config_path = os.path.join(vhome, "rabbitmq_shovel_config.yml") + print(f"config_path: {config_path}") with open(config_path, 'w') as yaml_file: yaml.dump(content, yaml_file, default_flow_style=False) return config_path @pytest.fixture(scope="module") -def xxx(request, **kwargs): +def two_way_shovel_connection(request, **kwargs): """ - Create two rmq based volttron instances. One to act as producer of data and one to act as consumer of data - Create a shovel to forward data from producer to consumer + Create two rmq based volttron instances. Create bi-directional data flow channel + by adding 2 shovel connections - :return: 2 volttron instances - (producer, consumer) that have a shovel connection between them + :return: 2 volttron instances - connected through shovels """ source_vip = get_rand_vip() source_hostname, source_https_port = get_hostname_and_random_port() @@ -226,8 +228,6 @@ def xxx(request, **kwargs): sink_shovel_user, rpc_config=rpc_config) - print(f"instance 2 shovel config path:{config_path}") - sink.setup_shovel(config_path) sink.startup_platform(vip_address=sink_vip, bind_web_address=sink_web_address) @@ -235,7 +235,6 @@ def xxx(request, **kwargs): with with_os_environ(sink.env): rmq_mgmt = RabbitMQMgmt() links = rmq_mgmt.get_shovel_links() - print(f"instance 2 shovel links: {links}, state: {links[0]['state']}") assert links and links[0]['state'] == 'running' sink_link_name = links[0]['name'] @@ -285,16 +284,18 @@ def callback2(peer, sender, bus, topic, headers, message): assert message == [{'point': 'value'}] -@pytest.mark.dev -def test_shovel_rpc(xxx): - instance_1, instance_2 = xxx +@pytest.mark.shovel +def test_shovel_rpc(two_way_shovel_connection): + instance_1, instance_2 = two_way_shovel_connection assert instance_1.is_running() assert instance_2.is_running() auuid = None try: auuid = instance_2.install_agent(vip_identity='listener', - agent_dir=get_examples("ListenerAgent"), start=True) + agent_dir=get_examples("ListenerAgent"), + start=True) + assert auuid is not None test_agent = instance_1.dynamic_agent kwargs = {"external_platform": instance_2.instance_name} @@ -314,5 +315,5 @@ def test_shovel_rpc(xxx): **kwargs).get(timeout=10) assert agt_status[1] == 0 finally: - if instance_2: + if instance_2 and auuid: instance_2.remove_agent(auuid) From dabb975759939dcc3a84840f22b3f3e7d907175c Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 3 Jun 2021 13:37:55 -0700 Subject: [PATCH 21/45] Fixes for review comments --- volttron/platform/control.py | 6 +- volttron/utils/rmq_mgmt.py | 75 ++++++- volttron/utils/rmq_setup.py | 202 ++++++++++++------ .../fixtures/volttron_platform_fixtures.py | 12 +- 4 files changed, 215 insertions(+), 80 deletions(-) diff --git a/volttron/platform/control.py b/volttron/platform/control.py index 11604a885e..8995aded57 100644 --- a/volttron/platform/control.py +++ b/volttron/platform/control.py @@ -2376,7 +2376,8 @@ def remove_queues(opts): def remove_fed_parameters(opts): try: for param in opts.parameters: - rmq_mgmt.delete_multiplatform_parameter('federation-upstream', param) + delete_certs = _ask_yes_no('Do you wish to delete certificates as well?') + rmq_mgmt.delete_multiplatform_parameter('federation-upstream', param, delete_certs=delete_certs) except requests.exceptions.HTTPError as e: _stdout.write("No Federation Parameters Found {} \n".format(opts.parameters)) except ConnectionError as e: @@ -2387,7 +2388,8 @@ def remove_fed_parameters(opts): def remove_shovel_parameters(opts): try: for param in opts.parameters: - rmq_mgmt.delete_multiplatform_parameter('shovel', param) + delete_certs = _ask_yes_no('Do you wish to delete certificates as well?') + rmq_mgmt.delete_multiplatform_parameter('shovel', param, delete_certs=delete_certs) except requests.exceptions.HTTPError as e: _stdout.write("No Shovel Parameters Found {} \n".format(opts.parameters)) except ConnectionError as e: diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index dd62da96a4..6b30c6a60d 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -710,6 +710,30 @@ def get_federation_links(self, ssl_auth=None): links.append(lk) return links + def get_shovel_link_status(self, name, ssl_auth=None): + state = 'error' + links = self.get_shovel_links(ssl_auth=ssl_auth) + for link in links: + if link['name'] == name: + if 'state' in [link.keys()]: + state = link['state'] + elif 'error' in [link.keys()]: + state = link['error'] + break + return state + + def get_federation_link_status(self, name, ssl_auth=None): + state = 'error' + links = self.get_federation_links(ssl_auth=ssl_auth) + for link in links: + if link['name'] == name: + if 'state' in [link.keys()]: + state = link['state'] + elif 'error' in [link.keys()]: + state = link['error'] + break + return state + def get_shovel_links(self, ssl_auth=None): """ List all shovel links for a given virtual host @@ -726,10 +750,13 @@ def get_shovel_links(self, ssl_auth=None): for res in response: lk = dict() lk['name'] = res['name'] - lk['state'] = res['state'] - lk['src_uri'] = res['src_uri'] - lk['dest_uri'] = res['dest_uri'] - lk['src_exchange_key'] = res['src_exchange_key'] + try: + lk['state'] = res['state'] + lk['src_uri'] = res['src_uri'] + lk['dest_uri'] = res['dest_uri'] + lk['src_exchange_key'] = res['src_exchange_key'] + except KeyError as e: + lk['error'] = 'Error in link' links.append(lk) return links @@ -792,7 +819,7 @@ def is_valid_mgmt_port(port): return port == 15672 or port == 15671 - def delete_multiplatform_parameter(self, component, parameter_name, vhost=None): + def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, delete_certs=False): """ Delete a component parameter :param component: component name @@ -800,6 +827,11 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None): :param vhost: virtual host :return: """ + print(delete_certs) + #self.delete_parameter(component, parameter_name, vhost, + # ssl_auth=self.rmq_config.is_ssl) + + import os vhome = get_home() if component == 'shovel': config_file = os.path.join(vhome, 'rabbitmq_shovel_config.yml') @@ -808,19 +840,42 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None): config_file = os.path.join(vhome, 'rabbitmq_federation_config.yml') key = 'federation-upstream' config = read_config_file(config_file) - print(f"Removing certificate paths from the {component} config file. Please remove remote certificates manually " - "from the VOLTTRON_HOME folder if needed") + + print(f"Removing certificate paths from VOLTTRON_HOME and from the config file") names = parameter_name.split("-") + certs_config = None try: + certs_config = config[key][names[1]]['certificates'] del config[key][names[1]]['certificates'] write_to_config_file(config_file, config) except (KeyError, IndexError) as e: - print(f"names:{e}") + print(f"Missing key:{e}") pass - self.delete_parameter(component, parameter_name, vhost, - ssl_auth=self.rmq_config.is_ssl) + + print(f"certs_config:{certs_config}, type:{type(certs_config)}") + if delete_certs and certs_config: + try: + private_key = certs_config['private_key'] + public_cert = certs_config['public_cert'] + remote_ca = certs_config['remote_ca'] + if os.path.exists(private_key): + os.remove(private_key) + private_dir, filename = os.path.split(private_key) + cert_name = filename[:-4] + '.crt' + cert_path = private_dir.replace('private', 'certs')+'/' + cert_name + print(cert_path) + if os.path.exists(cert_path): + os.remove(cert_path) + if os.path.exists(public_cert): + os.remove(public_cert) + if os.path.exists(remote_ca): + os.remove(remote_ca) + except KeyError as e: + print("Missing Key: {e}") + pass + def build_connection_param(self, rmq_user, ssl_auth=None, retry_attempt=30, retry_delay=2): """ diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index cbdea2716b..61dc14e45c 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -52,14 +52,14 @@ import yaml import time -from . rmq_mgmt import RabbitMQMgmt -from . rmq_config_params import RMQConfig, read_config_file, write_to_config_file +from .rmq_mgmt import RabbitMQMgmt +from .rmq_config_params import RMQConfig, read_config_file, write_to_config_file from volttron.platform import certs from volttron.platform import get_home from volttron.platform.agent.utils import (store_message_bus_config, execute_command) -from volttron.utils.prompt import prompt_response, y, y_or_n +from volttron.utils.prompt import prompt_response, y, n, y_or_n from volttron.platform import jsonapi from urllib.parse import urlparse from volttron.platform.web import DiscoveryInfo @@ -169,14 +169,13 @@ def write_env_file(rmq_config, conf_file, env=None): env_conf.write(env_entries) -def _get_federation_certs(instance_name, vhome): +def _get_federation_certs(vhome): federation_config_file = os.path.join(vhome, 'rabbitmq_federation_config.yml') federation_config = read_config_file(federation_config_file) federation = federation_config.get('federation-upstream', {}) - success = True + success = False update_needed = False - rmq_mgmt = RabbitMQMgmt() try: for host, upstream in federation.items(): @@ -187,8 +186,15 @@ def _get_federation_certs(instance_name, vhome): remote_addr = 'https://{}:{}'.format(host, https_port) print(f"Certificates not found. Requesting CSR from {remote_addr}") _log.debug(f"Certificates not found. Requesting CSR from {remote_addr}") + ca_file = None + cert_file = None + prvt_file = None # request CSR from remote host - ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'federation') + try: + ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'federation') + except Exception as ex: + _log.error(f"{ex}") + if ca_file is not None and cert_file is not None and prvt_file is not None: upstream['certificates'] = {} # root CA @@ -200,12 +206,14 @@ def _get_federation_certs(instance_name, vhome): update_needed = True else: _log.error( - f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance." - "\nContinuing with other configurations") + f"Couldn't get CSR certificates from remote server. Check with admin of remote instance.") continue + else: + success = True if update_needed: federation_config['federation-upstream'] = federation write_to_config_file(federation_config_file, federation_config) + success = True except KeyError as ex: _log.error(f"Federation config has missing key: {ex}") @@ -230,23 +238,40 @@ def _create_federation_setup(is_ssl, vhost, vhome): federation_config = read_config_file(federation_config_file) federation = federation_config.get('federation-upstream', {}) + federation_links = rmq_mgmt.get_federation_links() + for host, upstream in federation.items(): try: name = "upstream-{host}-{vhost}".format(vhost=upstream['virtual-host'], host=host) _log.debug("Upstream Server: {name} ".format(name=name)) + found = False + for links in federation_links: + if links['name'] == name: + found = True + break + if found: + _log.error(f"Federation link with name: {name} already exists. " + "Skipping this configuration and moving to next one") + continue if 'certificates' not in upstream: - _log.error(f"ERROR: Certificates key missing in config.\nContinuing with other configurations") + _log.error(f"Certificates key missing in config.") continue rmq_user = upstream['federation-user'] - # Build destination address - address = rmq_mgmt.build_remote_plugin_connection(rmq_user, - host, - upstream['port'], - upstream['virtual-host'], - is_ssl, - certs_dict=federation[host]['certificates']) + try: + # Build destination address + address = rmq_mgmt.build_remote_plugin_connection(rmq_user, + host, + upstream['port'], + upstream['virtual-host'], + is_ssl, + certs_dict=federation[host]['certificates']) + except Exception as ex: + _log.error("Exception occured while trying to establish rabbitmq connection. " + "Check if rabbitmq is running.") + return + prop = dict(vhost=vhost, component="federation-upstream", name=name, @@ -264,6 +289,10 @@ def _create_federation_setup(is_ssl, vhost, vhome): rmq_mgmt.set_policy(policy_name, policy_value, vhost) + import gevent + gevent.sleep(5) + print(f"Setup for federation with name: {name} is completed." + f"Status is: {rmq_mgmt.get_federation_link_status(name)}") except KeyError as ex: _log.error("Federation setup did not complete. " @@ -271,15 +300,13 @@ def _create_federation_setup(is_ssl, vhost, vhome): "{upstream}".format(key=ex, upstream=upstream)) -def _get_certs_for_shovel(instance_name, vhome): +def _get_certs_for_shovel(vhome): shovel_config_file = os.path.join(vhome, 'rabbitmq_shovel_config.yml') shovel_config = read_config_file(shovel_config_file) shovels = shovel_config.get('shovel', {}) - - rmq_mgmt = RabbitMQMgmt() update_needed = False - success = True + success = False try: for remote_host, shovel in shovels.items(): if 'certificates' not in shovel: @@ -289,8 +316,15 @@ def _get_certs_for_shovel(instance_name, vhome): # certificates key not found in shovel config remote_addr = 'https://{}:{}'.format(remote_host, https_port) print(f"Certificates not found. Requesting CSR from {remote_addr}") + ca_file = None + cert_file = None + prvt_file = None # request CSR from remote host - ca_file, cert_file, prvt_file = _request_csr(shovel_user, remote_addr, 'shovel') + try: + ca_file, cert_file, prvt_file = _request_csr(shovel_user, remote_addr, 'shovel') + except Exception as ex: + _log.error(f"{ex}") + if ca_file is not None and cert_file is not None and prvt_file is not None: shovel['certificates'] = {} # root CA @@ -302,12 +336,14 @@ def _get_certs_for_shovel(instance_name, vhome): update_needed = True else: _log.error( - f"ERROR: Couldn't get CSR certificates from remote server. Check with admin of remote instance." - "\nContinuing with other configurations") + f"Couldn't get CSR certificates from remote server. Check with admin of remote instance.") continue + else: + success = True if update_needed: shovel_config['shovel'] = shovels write_to_config_file(shovel_config_file, shovel_config) + success = True except KeyError as exc: _log.error("Shovel config has missing Key: {}".format(exc)) success = False @@ -334,21 +370,31 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): for identity, topics in pubsub_config.items(): # Build source address rmq_user = instance_name + '.' + identity - src_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, - local_host, port, - vhost, is_ssl) + try: + src_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, + local_host, port, + vhost, is_ssl) + except Exception as ex: + _log.error("Exception occured while trying to establish rabbitmq connection. " + "Check if rabbitmq is running.") + return if 'certificates' not in shovel: - _log.error(f"ERROR: Certificates not found.\nContinuing with other configurations") + _log.error(f"Certificates not found.\nContinuing with other configurations") continue rmq_user = shovel['shovel-user'] - # Build destination address - dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, - remote_host, - shovel['port'], - shovel['virtual-host'], - is_ssl, - certs_dict=shovels[remote_host]['certificates']) + try: + # Build destination address + dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, + remote_host, + shovel['port'], + shovel['virtual-host'], + is_ssl, + certs_dict=shovels[remote_host]['certificates']) + except Exception as ex: + _log.error("Exception occured while trying to establish rabbitmq connection. " + "Check if rabbitmq is running.") + return if not isinstance(topics, list): topics = [topics] @@ -369,8 +415,8 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): "dest-exchange": "volttron"} ) rmq_mgmt.set_parameter("shovel", - name, - prop) + name, + prop) rpc_config = shovel.get("rpc", {}) _log.debug("RPC config: {}".format(rpc_config)) for remote_instance, agent_ids in rpc_config.items(): @@ -384,17 +430,24 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): vhost, is_ssl) if 'certificates' not in shovel: - _log.error("ERROR: Certificates not found.\nContinuing with other configurations") + _log.error("Certificates not found.\nContinuing with other configurations") continue rmq_user = shovel['shovel-user'] - # Build destination address - dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, - remote_host, - shovel['port'], - shovel['virtual-host'], - is_ssl, - certs_dict=shovels[remote_host]['certificates']) + try: + # Build destination address + dest_uri = rmq_mgmt.build_remote_plugin_connection(rmq_user, + remote_host, + shovel['port'], + shovel['virtual-host'], + is_ssl, + certs_dict=shovels[remote_host][ + 'certificates']) + except Exception as ex: + _log.error("Exception occured while trying to establish rabbitmq connection. " + "Check if rabbitmq is running.") + return + _log.info("Creating shovel to make RPC call to remote Agent" ": {}".format(remote_identity)) @@ -416,6 +469,12 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rmq_mgmt.set_parameter("shovel", name, prop) + import gevent + gevent.sleep(2) + print(f"Setup for shovel with name: {name} is completed. " + f"Status is: {rmq_mgmt.get_shovel_link_status(name)}") + + except KeyError as exc: _log.error("Shovel setup did not complete. Missing Key: {}".format(exc)) @@ -575,7 +634,7 @@ def _create_certs(rmq_config, admin_client_name, server_cert_name): 'organization-unit', 'common-name']) or all( - k in cert_data for k in ['ca-public-key', 'ca-private-key'])): + k in cert_data for k in ['ca-public-key', 'ca-private-key'])): _log.error( "\nNo certificate data found in {} or certificate data is " "incomplete. certificate-data should either contain all " @@ -673,7 +732,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na # Load either the newly created config or config passed try: rmq_config.load_rmq_config() - _log.debug(f"RMQConfig 2: {setup_type}, {rmq_config.volttron_home}, os env: {os.environ['VOLTTRON_HOME']}") + _log.debug(f"RMQConfig : {setup_type}, {rmq_config.volttron_home}, os env: {os.environ['VOLTTRON_HOME']}") except (yaml.parser.ParserError, yaml.scanner.ScannerError, yaml.YAMLError) as exc: _log.error("Error: YAML file cannot parsed properly. Check the contents of the file") @@ -748,15 +807,37 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na log_name) if setup_type in ["all", "federation"]: + fed_config_yml = os.path.join(rmq_config.volttron_home, 'rabbitmq_federation_config.yml') + if os.path.exists(fed_config_yml): + prompt = f"rabbitmq_federation_config.yml already exists in VOLTTRON_HOME: {rmq_config.volttron_home}.\n"\ + "Do you wish to use this config file? If no, rabbitmq_federation_config.yml \n" \ + "will be replaced with new config file" + prompt = prompt_response(prompt, + valid_answers=y_or_n, + default='Y') + if prompt in n: + os.replace(fed_config_yml, rmq_conf_file) + # Create a multi-platform federation setup invalid = False - s = _get_federation_certs(rmq_config.instance_name, rmq_config.volttron_home) + s = _get_federation_certs(rmq_config.volttron_home) if s: _create_federation_setup(rmq_config.is_ssl, rmq_config.virtual_host, rmq_config.volttron_home) if setup_type in ["all", "shovel"]: + shovel_config_yml = os.path.join(rmq_config.volttron_home, 'rabbitmq_shovel_config.yml') + if os.path.exists(shovel_config_yml): + prompt = f"rabbitmq_shovel_config.yml already exists in VOLTTRON_HOME: {rmq_config.volttron_home()}.\n"\ + "Do you wish to use this config file? If no, rabbitmq_shovel_config.yml \n" \ + "will be replaced with new config file" + prompt = prompt_response(prompt, + valid_answers=y_or_n, + default='Y') + if prompt in n: + os.replace(shovel_config_yml, rmq_conf_file) + # Create shovel setup invalid = False if rmq_config.is_ssl: @@ -765,7 +846,7 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na port = rmq_config.amqp_port # Check if certs are available in shovel config. If missing, request CSR - s = _get_certs_for_shovel(rmq_config.instance_name, rmq_config.volttron_home) + s = _get_certs_for_shovel(rmq_config.volttron_home) if s: _create_shovel_setup(rmq_config.instance_name, @@ -845,7 +926,7 @@ def _create_rabbitmq_config(rmq_config, setup_type, verbose=False, max_retries=1 if is_file_readable(root_public): break while True: - prompt =\ + prompt = \ 'Enter the root CA certificate private key file:' root_key = prompt_response(prompt, mandatory=True) if is_file_readable(root_key): @@ -1005,10 +1086,10 @@ def prompt_upstream_servers(vhome, verbose=False, max_retries=12): upstream_servers[host]['federation-user'] = instance_name + "." + upstream_user certs_config, https_port = _prompt_csr_request(upstream_user, - host, - 'federation', - verbose, - max_retries) + host, + 'federation', + verbose, + max_retries) if not certs_config: # we did not get certificates - neither existing, nor through csr process # exit @@ -1092,7 +1173,7 @@ def prompt_shovels(vhome, verbose=False, max_retries=12): import re topics = re.sub(r"\s", "", topics) multi_topics = topics.split(",") - shovels[host]['pubsub'] = {agent_id : multi_topics} + shovels[host]['pubsub'] = {agent_id: multi_topics} prompt = prompt_response( '\nDo you want shovels for RPC communication? ', valid_answers=y_or_n, default='N') @@ -1339,10 +1420,10 @@ def request_plugin_cert(csr_server, fully_qualified_local_identity, discovery_in remote_certs_dir = get_remote_certs_dir(type) if status == 'SUCCESSFUL' or status == 'APPROVED': crts.save_agent_remote_info(remote_certs_dir, - fully_qualified_local_identity, - remote_cert_name, cert.encode("utf-8"), - remote_ca_name, - discovery_info.rmq_ca_cert.encode("utf-8")) + fully_qualified_local_identity, + remote_cert_name, cert.encode("utf-8"), + remote_ca_name, + discovery_info.rmq_ca_cert.encode("utf-8")) os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(remote_certs_dir, "requests_ca_bundle") elif status == 'PENDING': pass @@ -1455,7 +1536,7 @@ def start_rabbit(rmq_home, env=None): _log.debug("Rabbitmq is not running. Attempting to start") msg = "Error starting rabbitmq at {}".format(rmq_home) # attempt to start once - execute_command(start_cmd, env=env, err_prefix=msg, logger=_log) + execute_command(start_cmd, env=env, err_prefix=msg, logger=_log) start = False else: if i > 60: # if more than 60 tries we assume something failed @@ -1477,4 +1558,3 @@ def start_rabbit(rmq_home, env=None): setup_rabbitmq_volttron(args.setup_type, args.prompt) except KeyboardInterrupt: _log.info("Exiting setup process") - diff --git a/volttrontesting/fixtures/volttron_platform_fixtures.py b/volttrontesting/fixtures/volttron_platform_fixtures.py index d3cb74f1d5..322c9d7563 100644 --- a/volttrontesting/fixtures/volttron_platform_fixtures.py +++ b/volttrontesting/fixtures/volttron_platform_fixtures.py @@ -571,16 +571,16 @@ def federated_rmq_instances(request, **kwargs): @pytest.fixture(scope="module") def two_way_federated_rmq_instances(request, **kwargs): """ - Create two rmq based volttron instances. One to act as producer of data and one to act as consumer of data - producer is upstream instance and consumer is the downstream instance + Create two rmq based volttron instances. Create bi-directional data flow channel + by creating 2 federation links - :return: 2 volttron instances - (producer, consumer) that are federated + :return: 2 volttron instances - that are connected through federation """ instance_1_vip = get_rand_vip() instance_1_hostname, instance_1_https_port = get_hostname_and_random_port() instance_1_web_address = 'https://{hostname}:{port}'.format(hostname=instance_1_hostname, port=instance_1_https_port) - print(f"instance_1 WEB ADDR: {instance_1_web_address}") + instance_1 = build_wrapper(instance_1_vip, ssl_auth=True, messagebus='rmq', @@ -588,7 +588,7 @@ def two_way_federated_rmq_instances(request, **kwargs): bind_web_address=instance_1_web_address, instance_name='volttron1', **kwargs) - print(f"instance_1 VHOME: {instance_1.volttron_home}, WEB ADDR: {instance_1.bind_web_address}") + instance_1.enable_auto_csr() instance_2_vip = get_rand_vip() @@ -603,8 +603,6 @@ def two_way_federated_rmq_instances(request, **kwargs): bind_web_address=instance_2_webaddress, instance_name='volttron2', **kwargs) - print(f"instance_2 VHOME: {instance_2.volttron_home}, WEB ADDR: {instance_2.bind_web_address}") - instance_2_link_name = None instance_1_link_name = None From 1116b88e88d800c423f1a1ecf35e94231201297b Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 4 Jun 2021 14:17:02 -0700 Subject: [PATCH 22/45] Added more fixes after testing --- volttron/platform/control.py | 6 +- volttron/platform/instance_setup.py | 27 ++++++- volttron/utils/rmq_mgmt.py | 32 +++----- volttron/utils/rmq_setup.py | 83 +++++++++----------- volttrontesting/multiplatform/test_shovel.py | 6 +- 5 files changed, 75 insertions(+), 79 deletions(-) diff --git a/volttron/platform/control.py b/volttron/platform/control.py index 8995aded57..d02d5174b5 100644 --- a/volttron/platform/control.py +++ b/volttron/platform/control.py @@ -2255,7 +2255,7 @@ def list_shovel_links(opts): try: if links: name_width = max(5, max(len(lk['name']) for lk in links)) - status_width = max(3, max(len(lk['state']) for lk in links)) + status_width = max(3, max(len(lk['status']) for lk in links)) src_exchange_key_width = max(3, max(len(lk['src_exchange_key']) for lk in links)) src_uri_width = max(3, max(len(lk['src_uri']) for lk in links)) dest_uri_width = max(3, max(len(lk['dest_uri']) for lk in links)) @@ -2266,12 +2266,12 @@ def list_shovel_links(opts): 'SRC_EXCHANGE_KEY', src_exchange_key_width)) for link in links: _stdout.write(fmt.format(link['name'], name_width, - link['state'], status_width, + link['status'], status_width, link['src_uri'], src_uri_width, link['dest_uri'], dest_uri_width, link['src_exchange_key'], src_exchange_key_width)) except (AttributeError, KeyError) as ex: - _stdout.write("Error in shovel links") + _stdout.write(f"Error in shovel links as {ex}") def list_bindings(opts): diff --git a/volttron/platform/instance_setup.py b/volttron/platform/instance_setup.py index 8cf57edee0..4c0ee76b49 100644 --- a/volttron/platform/instance_setup.py +++ b/volttron/platform/instance_setup.py @@ -949,23 +949,42 @@ def process_rmq_inputs(args_dict, instance_name=None): vhome = get_home() if args_dict['config'] is not None: + if not os.path.exists(vhome): + os.makedirs(vhome, 0o755) if args_dict['installation-type'] == 'single': vhome_config = os.path.join(vhome, 'rabbitmq_config.yml') + if args_dict['config'] != vhome_config: + copy(args_dict['config'], vhome_config) elif args_dict['installation-type'] == 'federation': vhome_config = os.path.join(vhome, 'rabbitmq_federation_config.yml') + if os.path.exists(vhome_config): + prompt = f"rabbitmq_federation_config.yml already exists in VOLTTRON_HOME: {vhome}.\n" \ + "Do you wish to use this config file? If no, rabbitmq_federation_config.yml \n" \ + "will be replaced with new config file" + prompt = prompt_response(prompt, + valid_answers=y_or_n, + default='N') + if prompt in n: + copy(args_dict['config'], vhome_config) elif args_dict['installation-type'] == 'shovel': vhome_config = os.path.join(vhome, 'rabbitmq_shovel_config.yml') + if os.path.exists(vhome_config): + prompt = f"rabbitmq_shovel_config.yml already exists in VOLTTRON_HOME: {vhome}.\n" \ + "Do you wish to use this config file? If no, rabbitmq_shovel_config.yml \n" \ + "will be replaced with new config file" + prompt = prompt_response(prompt, + valid_answers=y_or_n, + default='N') + if prompt in n: + copy(args_dict['config'], vhome_config) else: print("Invalid installation type. Acceptable values single|federation|shovel") sys.exit(1) - if args_dict['config'] != vhome_config: - if not os.path.exists(vhome): - os.makedirs(vhome, 0o755) - copy(args_dict['config'], vhome_config) setup_rabbitmq_volttron(args_dict['installation-type'], verbose, instance_name=instance_name, max_retries=args_dict['max_retries']) else: setup_rabbitmq_volttron(args_dict['installation-type'], verbose, prompt=True, instance_name=instance_name, max_retries=args_dict['max_retries']) + def main(): global verbose, prompt_vhome parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 6b30c6a60d..a3faded69e 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -706,7 +706,7 @@ def get_federation_links(self, ssl_auth=None): for res in response: lk = dict() lk['name'] = res['upstream'] - lk['status'] = res['status'] + lk['status'] = res.get('status', 'Error in link') links.append(lk) return links @@ -715,10 +715,7 @@ def get_shovel_link_status(self, name, ssl_auth=None): links = self.get_shovel_links(ssl_auth=ssl_auth) for link in links: if link['name'] == name: - if 'state' in [link.keys()]: - state = link['state'] - elif 'error' in [link.keys()]: - state = link['error'] + state = link['status'] break return state @@ -727,10 +724,7 @@ def get_federation_link_status(self, name, ssl_auth=None): links = self.get_federation_links(ssl_auth=ssl_auth) for link in links: if link['name'] == name: - if 'state' in [link.keys()]: - state = link['state'] - elif 'error' in [link.keys()]: - state = link['error'] + state = link['status'] break return state @@ -745,18 +739,14 @@ def get_shovel_links(self, ssl_auth=None): vhost=self.rmq_config.virtual_host) response = self._http_get_request(url, ssl_auth) links = [] - if response: for res in response: lk = dict() lk['name'] = res['name'] - try: - lk['state'] = res['state'] - lk['src_uri'] = res['src_uri'] - lk['dest_uri'] = res['dest_uri'] - lk['src_exchange_key'] = res['src_exchange_key'] - except KeyError as e: - lk['error'] = 'Error in link' + lk['status'] = res.get('state', 'Error in link') + lk['src_uri'] = res.get('src_uri', '') + lk['dest_uri'] = res.get('dest_uri', '') + lk['src_exchange_key'] = res.get('src_exchange_key', '') links.append(lk) return links @@ -827,9 +817,8 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, :param vhost: virtual host :return: """ - print(delete_certs) - #self.delete_parameter(component, parameter_name, vhost, - # ssl_auth=self.rmq_config.is_ssl) + self.delete_parameter(component, parameter_name, vhost, + ssl_auth=self.rmq_config.is_ssl) import os vhome = get_home() @@ -854,7 +843,6 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, print(f"Missing key:{e}") pass - print(f"certs_config:{certs_config}, type:{type(certs_config)}") if delete_certs and certs_config: try: private_key = certs_config['private_key'] @@ -865,7 +853,7 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, private_dir, filename = os.path.split(private_key) cert_name = filename[:-4] + '.crt' cert_path = private_dir.replace('private', 'certs')+'/' + cert_name - print(cert_path) + if os.path.exists(cert_path): os.remove(cert_path) if os.path.exists(public_cert): diff --git a/volttron/utils/rmq_setup.py b/volttron/utils/rmq_setup.py index 61dc14e45c..33e85d7fe0 100644 --- a/volttron/utils/rmq_setup.py +++ b/volttron/utils/rmq_setup.py @@ -186,14 +186,14 @@ def _get_federation_certs(vhome): remote_addr = 'https://{}:{}'.format(host, https_port) print(f"Certificates not found. Requesting CSR from {remote_addr}") _log.debug(f"Certificates not found. Requesting CSR from {remote_addr}") - ca_file = None - cert_file = None - prvt_file = None # request CSR from remote host try: ca_file, cert_file, prvt_file = _request_csr(rmq_user, remote_addr, 'federation') except Exception as ex: _log.error(f"{ex}") + ca_file = None + cert_file = None + prvt_file = None if ca_file is not None and cert_file is not None and prvt_file is not None: upstream['certificates'] = {} @@ -204,10 +204,6 @@ def _get_federation_certs(vhome): # private_key upstream['certificates']['private_key'] = prvt_file update_needed = True - else: - _log.error( - f"Couldn't get CSR certificates from remote server. Check with admin of remote instance.") - continue else: success = True if update_needed: @@ -237,20 +233,20 @@ def _create_federation_setup(is_ssl, vhost, vhome): 'rabbitmq_federation_config.yml') federation_config = read_config_file(federation_config_file) federation = federation_config.get('federation-upstream', {}) - - federation_links = rmq_mgmt.get_federation_links() + federation_names = [] + try: + federation_links = rmq_mgmt.get_federation_links() + federation_names = [link['name'] for link in federation_links] + except AttributeError as ex: + _log.error(f"Unable to reach RabbitMQ management API. Check if RabbitMQ server is running. " + f"If not running, start the server using start-rabbitmq script in root of source directory.") + return for host, upstream in federation.items(): try: name = "upstream-{host}-{vhost}".format(vhost=upstream['virtual-host'], host=host) - _log.debug("Upstream Server: {name} ".format(name=name)) - found = False - for links in federation_links: - if links['name'] == name: - found = True - break - if found: + if name in federation_names: _log.error(f"Federation link with name: {name} already exists. " "Skipping this configuration and moving to next one") continue @@ -316,14 +312,15 @@ def _get_certs_for_shovel(vhome): # certificates key not found in shovel config remote_addr = 'https://{}:{}'.format(remote_host, https_port) print(f"Certificates not found. Requesting CSR from {remote_addr}") - ca_file = None - cert_file = None - prvt_file = None + # request CSR from remote host try: ca_file, cert_file, prvt_file = _request_csr(shovel_user, remote_addr, 'shovel') except Exception as ex: _log.error(f"{ex}") + ca_file = None + cert_file = None + prvt_file = None if ca_file is not None and cert_file is not None and prvt_file is not None: shovel['certificates'] = {} @@ -334,10 +331,6 @@ def _get_certs_for_shovel(vhome): # private_key shovel['certificates']['private_key'] = prvt_file update_needed = True - else: - _log.error( - f"Couldn't get CSR certificates from remote server. Check with admin of remote instance.") - continue else: success = True if update_needed: @@ -362,6 +355,14 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): shovels = shovel_config.get('shovel', {}) rmq_mgmt = RabbitMQMgmt() + shovel_names = [] + try: + shovel_links = rmq_mgmt.get_shovel_links() + shovel_names = [link['name'] for link in shovel_links] + except AttributeError as ex: + _log.error(f"Unable to reach RabbitMQ management API. Check if RabbitMQ server is running. " + f"If not running, start the server using start-rabbitmq script in root of source directory.") + return try: for remote_host, shovel in shovels.items(): @@ -403,6 +404,10 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): topic)) name = "shovel-{host}-{topic}".format(host=remote_host, topic=topic) + if name in shovel_names: + _log.error(f"Shovel with name: {name} already exists. " + "Skipping this configuration and moving to next one") + continue routing_key = "__pubsub__.{instance}.{topic}.#".format(instance=instance_name, topic=topic) prop = dict(vhost=vhost, @@ -417,10 +422,12 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): rmq_mgmt.set_parameter("shovel", name, prop) + import gevent + gevent.sleep(2) + print(f"Setup for shovel with name: {name} is completed. " + f"Status is: {rmq_mgmt.get_shovel_link_status(name)}") rpc_config = shovel.get("rpc", {}) - _log.debug("RPC config: {}".format(rpc_config)) for remote_instance, agent_ids in rpc_config.items(): - _log.debug("RPC config: {}".format(rpc_config)) for ids in agent_ids: local_identity = ids[0] remote_identity = ids[1] @@ -453,6 +460,10 @@ def _create_shovel_setup(instance_name, local_host, port, vhost, vhome, is_ssl): name = "shovel-{host}-{identity}".format(host=remote_host, identity=local_identity) + if name in shovel_names: + _log.error(f"Shovel with name: {name} already exists. " + "Skipping this configuration and moving to next one") + continue routing_key = "{instance}.{identity}.#".format( instance=remote_instance, identity=remote_identity) @@ -807,17 +818,6 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na log_name) if setup_type in ["all", "federation"]: - fed_config_yml = os.path.join(rmq_config.volttron_home, 'rabbitmq_federation_config.yml') - if os.path.exists(fed_config_yml): - prompt = f"rabbitmq_federation_config.yml already exists in VOLTTRON_HOME: {rmq_config.volttron_home}.\n"\ - "Do you wish to use this config file? If no, rabbitmq_federation_config.yml \n" \ - "will be replaced with new config file" - prompt = prompt_response(prompt, - valid_answers=y_or_n, - default='Y') - if prompt in n: - os.replace(fed_config_yml, rmq_conf_file) - # Create a multi-platform federation setup invalid = False s = _get_federation_certs(rmq_config.volttron_home) @@ -827,17 +827,6 @@ def setup_rabbitmq_volttron(setup_type, verbose=False, prompt=False, instance_na rmq_config.virtual_host, rmq_config.volttron_home) if setup_type in ["all", "shovel"]: - shovel_config_yml = os.path.join(rmq_config.volttron_home, 'rabbitmq_shovel_config.yml') - if os.path.exists(shovel_config_yml): - prompt = f"rabbitmq_shovel_config.yml already exists in VOLTTRON_HOME: {rmq_config.volttron_home()}.\n"\ - "Do you wish to use this config file? If no, rabbitmq_shovel_config.yml \n" \ - "will be replaced with new config file" - prompt = prompt_response(prompt, - valid_answers=y_or_n, - default='Y') - if prompt in n: - os.replace(shovel_config_yml, rmq_conf_file) - # Create shovel setup invalid = False if rmq_config.is_ssl: diff --git a/volttrontesting/multiplatform/test_shovel.py b/volttrontesting/multiplatform/test_shovel.py index 1f51195e86..31020ddf2a 100644 --- a/volttrontesting/multiplatform/test_shovel.py +++ b/volttrontesting/multiplatform/test_shovel.py @@ -110,7 +110,7 @@ def shovel_pubsub_rmq_instances(request, **kwargs): with with_os_environ(source.env): rmq_mgmt = RabbitMQMgmt() links = rmq_mgmt.get_shovel_links() - assert links and links[0]['state'] == 'running' + assert links and links[0]['status'] == 'running' link_name = links[0]['name'] except Exception as e: @@ -205,7 +205,7 @@ def two_way_shovel_connection(request, **kwargs): with with_os_environ(source.env): rmq_mgmt = RabbitMQMgmt() links = rmq_mgmt.get_shovel_links() - assert links and links[0]['state'] == 'running' + assert links and links[0]['status'] == 'running' source_link_name = links[0]['name'] sink.skip_cleanup = True @@ -235,7 +235,7 @@ def two_way_shovel_connection(request, **kwargs): with with_os_environ(sink.env): rmq_mgmt = RabbitMQMgmt() links = rmq_mgmt.get_shovel_links() - assert links and links[0]['state'] == 'running' + assert links and links[0]['status'] == 'running' sink_link_name = links[0]['name'] except Exception as e: From bd45bbed060d0cda9f59283598006ec34f8e12af Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 4 Jun 2021 14:47:23 -0700 Subject: [PATCH 23/45] updated example configuration --- examples/configurations/rabbitmq/rabbitmq_shovel_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml index 09668640d3..4cf61a4284 100644 --- a/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml +++ b/examples/configurations/rabbitmq/rabbitmq_shovel_config.yml @@ -3,7 +3,7 @@ shovel: volttron2: # remote hostname https-port: 8443 port: 5671 - shovel-user: volttron1.shovelvolttron2 #.shovel + shovel-user: volttron1.shovelvolttron2 #. virtual-host: volttron certificates: private_cert: "path to private cert" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem From 50d37f98f720f55a878a10372dd1cfe2aea80c77 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Fri, 4 Jun 2021 15:19:35 -0700 Subject: [PATCH 24/45] Update multi-platform-rabbitmq-deployment.rst --- .../multi-platform-rabbitmq-deployment.rst | 95 +++++++++---------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 115c62a799..c9735fa527 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -68,9 +68,8 @@ To setup federation on the VOLTTRON instance, run the following command on the d vcfg rabbitmq federation [--config optional path to rabbitmq_federation_config.yml] [--max-retries optional maximum CSR retry attempt] -This establishes federation links to upstream servers. Once a federation link to the upstream server is established on -the downstream server, the messages published on the upstream server become available to the downstream server as if -it were published locally. +This establishes federation links to upstream servers. Here the default maximum retry attempt is set to 15. Once a federation link to the upstream server is established on +the downstream server, the messages published on the upstream server become available to the downstream server as if it were published locally. Multi-Platform RPC With Federation @@ -280,28 +279,25 @@ upstream servers on the downstream server and make the VOLTTRON exchange .. code-block:: bash - vctl rabbitmq list-federation-parameters - NAME URI - upstream-volttron2-volttron amqps://volttron2:5671/volttron?cacertfile=/home/volttron/vhome/test_fed/certificates/federation/volttron2_ca.crt&certfile=/home/volttron/vhome/test_fed/certificates/federation/volttron2.volttron1.federation.crt&keyfile=/home/volttron/vhome/test_fed/certificates/private/volttron1.federation.pem&verify=verify_peer&fail_if_no_peer_cert=true&auth_mechanism=external&server_name_indication=volttron2 + vctl rabbitmq list-federation-links + NAME STATUS + upstream-volttron2-volttron running Copy the upstream link name and run the below command to remove it. .. code-block:: bash - vctl rabbitmq remove-federation-parameters upstream-volttron2-volttron + vctl rabbitmq remove-federation-links upstream-volttron2-volttron + Do you wish to delete certificates as well? [Y/n] y + Removing certificate paths from VOLTTRON_HOME and from the config file .. note:: - These commands only remove the federation parameter from RabbitMQ and certificate entries from rabbitmq_federation_config.yml on the publisher node. - `It does not remove the actual certificates.` Rerunning the federation command for same setup will reuse the existing certificates. - If you need to rerun the federation command again for the same setup - and need to create fresh certificates, then you will need to manually remove public and private certificates. - Private certificates will be in - $VOLTTRON_HOME/certificates/private. Public certificates will be in two directories: - $VOLTTRON_HOME/certificates/federation and $VOLTTRON_HOME/certificates/certs. - Further, you should request the remote instance admin to delete earlier generated certificates through admin web - interface before a new CSR is sent for approval. + These commands removes the federation parameter from RabbitMQ, deletes the certificates from VOLTTRON_HOME and certificate entries from + rabbitmq_federation_config.yml on the publisher node. The remote admin must delete the remote certificates through admin web + interface. If you need to rerun the federation command again for the same setup, then a fresh CSR request is made to the remote instance. + The remote admin has to approve the new request as before. @@ -319,26 +315,28 @@ Path: `$VOLTTRON_HOME/rabbitmq_shovel_config.yml` # Mandatory parameters for shovel setup shovel: - rabbit-2: - port: '5671' - virtual-host: volttron - certificates: - csr: true - private_cert: "path to private key" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem - public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt - remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt - - # Configuration to forward pubsub topics - pubsub: - # Identity of agent that is publishing the topic - platform.driver: - - devices - # Configuration to make remote RPC calls - rpc: - # Remote instance name - volttron2: - # List of pair of agent identities (local caller, remote callee) - - [scheduler, platform.actuator] + volttron2: # remote hostname + https-port: 8443 + port: 5671 + shovel-user: volttron1.shovelvolttron2 #. + virtual-host: volttron + certificates: + private_cert: "path to private cert" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem + public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt + remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt + # Configuration to forward pubsub topics + pubsub: + # Identity of agent that is publishing the topic + platform.driver: + # Topic pattern to be forwarded + - devices + + # Configuration to make remote RPC calls + rpc: + # Remote instance name + volttron2: + # List of pair of agent identities (local caller, remote callee) + - [scheduler, platform.actuator] To forward PubSub messages, the topic and agent identity of the publisher agent is needed. To perform RPC, the instance name of the remote instance and agent identities of the local agent and remote agent are needed. @@ -547,27 +545,26 @@ Please note that each instance should have a unique instance name. .. code-block:: bash - vctl rabbitmq list-shovel-parameters - NAME SOURCE ADDRESS DESTINATION ADDRESS BINDING KEY - shovel-volttron2-devices amqps://volttron1:5671/volttron?cacertfile=/home/volttron/vhome/test_shovel/certificates/certs/volttron1-trusted-cas.crt&certfile=/home/volttron/vhome/test_shovel/certificates/certs/volttron1.platform.driver.crt&keyfile=/home/volttron/vhome/test_shovel/certificates/private/volttron1.platform.driver.pem&verify=verify_peer&fail_if_no_peer_cert=true&auth_mechanism=external&server_name_indication=volttron1 amqps://volttron2:5671/volttron?cacertfile=/home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt&certfile=/home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt&keyfile=/home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem&verify=verify_peer&fail_if_no_peer_cert=true&auth_mechanism=external&server_name_indication=volttron2 __pubsub__.volttron1.devices.# + vctl rabbitmq list-shovel-links + NAME STATUS SRC_URI DEST_URI SRC_EXCHANGE_KEY + + shovel-volttron2-devices running amqps://volttron1:5671/volttron amqps://volttron2:5671/volttron __pubsub__.volttron1.devices.# Copy the shovel name and run following command to remove it. .. code-block:: bash - vctl rabbitmq remove-shovel-parameters shovel-volttron2-devices - + vctl rabbitmq remove-shovel-links shovel-volttron2-devices + Do you wish to delete certificates as well? [Y/n] y + Removing certificate paths from VOLTTRON_HOME and from the config file + .. note:: - These commands only remove the shovel parameter from RabbitMQ and certificate entries from rabbitmq_shovel_config.yml on the publisher node. - `It does not remove the actual certificates.` Rerunning the shovel command for same setup will reuse the existing certificates. - But if you need to rerun the shovel command again for the same setup and need to create fresh certificates, then you will - need to manually remove public and private certificates. Private certificates will be in - $VOLTTRON_HOME/certificates/private. Public certificates will be in two directories: - $VOLTTRON_HOME/certificates/shovel and $VOLTTRON_HOME/certificates/certs. - Further, you should request the remote instance admin to delete earlier generated cert through the admin web - interface before a new CSR is sent for approval. + These commands removes the shovel parameter from RabbitMQ, deletes the certificates from VOLTTRON_HOME and certificate entries from + rabbitmq_shovel_config.yml on the publisher node. The remote admin must delete the remote certificates through admin web + interface. If you need to rerun the federation command again for the same setup, then a fresh CSR request is made to the remote instance. + The remote admin has to approve the new request as before. DataMover Communication From 1235c7a96cd3345db3037484fbb69aefe5715387 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 4 Jun 2021 15:30:21 -0700 Subject: [PATCH 25/45] Renamed remove-shovel-parameters and remove-federation-parameters with remove-shovel-links and remove-federation-links --- volttron/platform/control.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/volttron/platform/control.py b/volttron/platform/control.py index d02d5174b5..a7c3b857f3 100644 --- a/volttron/platform/control.py +++ b/volttron/platform/control.py @@ -3055,13 +3055,13 @@ def add_parser(*args, **kwargs) -> argparse.ArgumentParser: rabbitmq_remove_queues.add_argument('queues', nargs='+', help='Queue') rabbitmq_remove_queues.set_defaults(func=remove_queues) - rabbitmq_remove_fed_parameters = add_parser('remove-federation-parameters', + rabbitmq_remove_fed_parameters = add_parser('remove-federation-links', help='Remove federation parameter', subparser=rabbitmq_subparsers) rabbitmq_remove_fed_parameters.add_argument('parameters', nargs='+', help='parameter name/s') rabbitmq_remove_fed_parameters.set_defaults(func=remove_fed_parameters) - rabbitmq_remove_shovel_parameters = add_parser('remove-shovel-parameters', + rabbitmq_remove_shovel_parameters = add_parser('remove-shovel-links', help='Remove shovel parameter', subparser=rabbitmq_subparsers) rabbitmq_remove_shovel_parameters.add_argument('parameters', nargs='+', help='parameter name/s') From cec635b915e42715ec85720f62db2555967d09cf Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Fri, 4 Jun 2021 15:54:33 -0700 Subject: [PATCH 26/45] Changed image as per new shovel instructions --- .../multi-platform/files/cmd_line.png | Bin 148408 -> 190720 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/files/cmd_line.png b/docs/source/deploying-volttron/multi-platform/files/cmd_line.png index 03945f113f7a93a30050b94d02fb3ff0744205fc..96e38199a1ea95b20d3d5e9e9a963d2554367730 100644 GIT binary patch literal 190720 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

Ye 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

4g@5l!an`l}hy(pwPbr})8H)$gMekCz&O40%} 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�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 G`~Lt32(HZl literal 148408 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 H@vHv@mQXX- From 6cf8905459a5261e24df77654e65156f13963277 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Fri, 4 Jun 2021 15:57:11 -0700 Subject: [PATCH 27/45] Changed image as per new shovel instructions --- .../multi-platform/files/cmd_line.png | Bin 190720 -> 207832 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/files/cmd_line.png b/docs/source/deploying-volttron/multi-platform/files/cmd_line.png index 96e38199a1ea95b20d3d5e9e9a963d2554367730..f9bfcbbecb333f0d5cb4e588862fc667f781acc8 100644 GIT binary patch literal 207832 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%0AqA=y$H_a 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 VP?{Pal1Gse{#GsYHq}mTs z1cnn=yF}MV<4IaR4TaF*O1C;8yR?66c?n7{R^e^CJs#d7TA0YwztPAnRrO<{xEubs zyot=6yn-wctzlyMnpl^by8aNYhyf3V#b=eo| z-z9}FEwMskrEn1yXhj-iqjqQM0>38R8`VTNVt|^N%(^mfj4Y|HRn#ouZCwa>7@Lg5 zPuEblzcp+R)7FTPT}6TZZj9Cb0HGTUa{o(s*0olYG8=jA`Fv`1 zqG~DbC{bTSMk`iRa_2qz0~RKJjn~AhuDlzrZh%grE^c=odUptN#8TUyEC|*ks&rCE zU+we2>O@_9kiOt-S`+_FDUxLwDMyHj`y6skgmf+*VTg5{{?k?SeMtI4=UBU6)fari zgDOu_jz~^RA%*H9KElJ_%$VawJ33QWl3W8%Qzw%Z8Vzy{lzduffsCWHs=ZgC1^B03 z=qzi>O|2Lkj*ZZAh$V)9o*$xQXjiYW!q?bNKm1I~Gx>rK%dKlyG+gZ2PPQN5RhnVqJim2N$>97ZgMt!<1U@DrNsKk zs!0<*wLJvr&QpR&s;(>Zz#URb)^b@!5G!S{pHDWt=L!cGO?6`ht*I~$z%uN*Mb*j( z6Rx@6w6xP#8gpy1VdB)C_$H0S^TmfMyiJv+HE`bUq;fVcxU%Z3HOw~Q*IEzgTklJi zQ!K=-d7cSSUW=wkt6(DFX>*h<%n3ZJpRzWI4yZov=d&{=t4jM{69 z18k^d)hI)7L;J}U?d3RPN+)dwScy@@LqAy(eB%t2x4=<8tbb24FpEiDLcB3^ zj_;>U|D7wdXw6USd9ajyQbC5L_EdN9#|hp&uX9_D-2@$6r&p-1-W+M@-3J9NW#;zl zE8M+#zUZqJzMDL~$8zx+cHVzLt@sG;xRHH%GgH1cR``jN^F*r4RyiL=vpt_0!;L?1K8(|?h5dtNMRH>iR$XRZci%qV%^8l5 zTV~WY0fZpC)(>ogn9Mb(u-8AED&!?&hKeu@_h=>8rgNvA2-2?krt-Z&W-)Q*;GV(7O#iQsbLJE{)1pJ0)v3 zC%`_hy&1781>>B96_cmV1b=$(u95^Z0!xMD*sPDLR2AvHtGZsXivu`5hn^K?qDFfC z^GssZSG}q?xo7D88Y3>p#aiwbuf~0>3jhdKvTNTO3AFn;m6?j<&T{tOZl#n}q0tFs zILyi)e7%R9=M=p`9f6^Sdm(>LJk1!yX{C8T%ZdDAYxvQ`H^T<4o1v3j>s)e(@V9(vo|yvj6*@i;&t zviyW<4l&t+Nj|OzpX(m+^s|5?x@?jp>Q^KZw8mKKtMy}7tOgt3Zd_J)YGM9<64l4o zD-S=fHcCKLM^y^Fi$1u zrjI;5o1R~@>@l7WPe$RlTx8G4CY|7evwUk^?5C_Tz_W8pg4q`ve4p2%18vQa>vs}! z1=qqlfTC>Oj)XcETk%eYzDi!(Ho_p8(5NcrZbt|62pkz4zuIBV&we>~j{nSL&b7Y@Dgbf_up`*6akRemyP3rIpuLS9UE!R{7`iEui#Me4vg+G@8>b%tQSMH^#a2gdNl?|s(1|dbnb|MwZ8j%W@2)t;YN1o zlB^run-n+lg#XGCG2iz6Xx$NcjsYaueJSK*kreK${S)7cN}-fq>H9b8r<5>6;Yk*zO5GWqeNL&Xm~_{s!Bb%O1&b?yn<2f4f5 z_<)E>;+mY>S#-k$%Y8N##u>lH05Xt3>7Rc)M%S2vM@n&KCay}MOUQfYIDKI!VE?wP z&>qj()NN|9Puz&iejzKx6XHnL)i^E6O1nxD`+JNVvkTgv=Joo?{Q?g>XFAPf4f;F_ zFHegvL+BiEJMfMhpi|~S25kYBCSVx@s<4!1Via6tVOjU4? zT?FL_y0vCO=B|gxX+VNwI&OxY=5gusH~^ew(Q$aX@-k{txy~eBTh-!udvfUDFwgS? zWz1h)nTmB+n_tS2$a8i-SPYIY&D+e;eTp1hFT+AC#UfjvmRf>LEN#ZoMQ4x9UjW`l z3b+jykk=Did}V-#Va^GO7|DeOeB4l}Yym)IE_s5t&rLL+ugS&bxXmM|V)&elCU7aZ zW5@|@s4x$-$@)xdL%>ta81N?4#QO52NR4jM@1~^IJ?Fa2**T)??2QVV>`@yqKj+Wlur;b* zWSg-@=CS0QT@`m5IjvPjJMKhupN0NHs68Bl08c9S9aH~~F{X;j*vh#kCp8*>fjG(r zzT<2p$Aljxma#!BWo_CK%}2}#jl%Sy_uevHmXzOMCg`3{(EJ?ZQu-~*!0TpuGc>y= zx+1iojUX1Gl#8J=(~(8I`m%lx6bRRq4NM)S{pZ;<=gVRTzOFO(zMbJgOSaJL+Jh5n zpANHaa8sqB5FwH&%>iiBAPL5G-(aFKUFRfOAL$`I`JT2DBQWV&+dj#7X?}&ay>@?6 z?1qS@0gfiyJy~kRn99J$`1w7_hECVr#QY{yxX}M36E~!bF+xC>KzH}rEu^cO0PCue zr6x<3S3BeD5&V42_boALh3|ds^1k8RS!@O;#>23v@khwlC-Yb3pu{o*eKP!DGH#!% zi;mc-83(Mix(}%8#?IDH5)cJ3zUI}!bAS+}`MnupUO#6!u~<7XuguiU@hs}X+A%-{ z&X(mz1yHG`-=&cv^2W!A-K8nwXGA%=U-Xc0$?LUAm8~;i$*I8~WikQ)EB}a)EiY1f z>x(W|xRY$)h|N@$yZtdZ7+p_G`PUd!z&$#Kmr22 z@<5N;nc^tJd)1Qs`&tK^9-;>&-=xh+^e|+3*-0B(MmCyWR#PeA-U|U+zktAAO9yx6 z5WOW_F;jf0ES3e?9uL)Z+tV^%^*EBLgTlr^%TkAG}$#; z6JSF0YCa=V2wo!AL^%Krs%E`o>BX23gehlr;4=NE0oNWf&zYY@~(e9Ye`3URPM@L#p!zkq`X zyjdcf%y|YEoXit(97G%HeDx8tarr%MSu|G6|NLIsQ0qaOd(UC;U!M3Wk7;NCb zNWg!aiT_X<4HP)aL=D|WFp*nfu1>3Mnh&~k^S8SHP205i*t}2(w>)j915SAK`q|pl zARP7%K$HoZR!)lbbwryG?yVo9s84$Q56(-02-bDX9rKzMzfaG*m0aL|l3`SW*~PZx z4K3KzU4c#czTAN-Ebi#4eHr$`aO?jk)fIvb{)13Sf!hBU>-GP4w5WvXj0w%V@|3It z36!ADT>KH7PO0O6BDDD-JA>*|YxK}wDO8s-3E-=@E1Mq0TF`}&SH`~ocf(_Yogw-yd58mZ>y%}KURV#ZqJYw*ec|1W$8jd3`1eqlwiMO*eEO#lF6KrG7I`If=qrbakIhD zoGK%^r%K_u_jBWKA0lA-6U4IDgMRgC5|5S1ncZ7zM;bP)efLQH`Gxn(M1C}!+#p?@8eRU zwr0=zD#1QaP=lkUUY<8RoQ?i1{#PRaXQTl!3JpbqzLO#D(Di02`?5MzoVbBfg3>w^ zIz9(yZ@!c@KxNyk=s!883Km9sEK9t1U`N$9bA_~%sasVLJvBAZN3)H&q0tW#+fN{ge=)Y zq;odg2YacOJ!TR{K-OL*s2`LOuT^dCueUy!Sebt|!j5(cJYeJ=E79*YK$#sWR%0}K zypg7F0P4BB-?((Vbn$96{G4a1l0l=#{Mi`<{d)VSdZWJ8X{(T0y3p~WF^Nes>x5(_ zCF6eergWQ`jq$-$e2?2O|4?k{w&YB(9Q}#p_qZeaa~P-sL*#unsP9Ro+V)+t?xQBl zn%TBL*bzBTDoNZ3b(d<_cfo>fz3;&P8SnKQi_6v}>{I&FkXp+PGK%n{p0`GdPf)ZA z-}D3>;Q_5$)0wjNJQ{=kAp#KLnr`NY>%;}Zs%hdWRnXjt3dfLltf3f-jtrLzQy&kjMF{zkA$ zEhvQh)A}ANe~>aH^#8@%HwH=CblZ0Kv~5h=w%t8#+nTm*+xE2WX=B>9ZQC|)&G((} z#Cy;AcYoZ7s)~w=r=G}sGIwU~z1LnV;3SEAAMRQY*Wx>~hb;cp+4{_E{>SL*Y+c7) z_w{{0!Bs7meS>iWx!A$BA!%$a_2GQT;b?}GN-8dPCRqTza#?1nFD|6cAFO++E zuc!WXuu?Eg<8xPKUOw&4OIa74?FBf?HVBVdL|dej*R|dHZ1IZ*Hm>nZKBv>(fYnr+ z|H8mck0&(GK$=Ce<_UyX2%IXsg|7w%3KnBGpQVln6Fn6qIu3_D2r^r8)Sg%ct$usM zKhKwswl>TiFqyxGkXl)yLdAk;a910Y?Wd9F<5FpfizInD#$@)0sJ78;dYVo6((GGh zvMBt!K<5{OI^Xfc2P)D}=YQXK{8;A0($Ck%vfEcu%m3;2c%}7pzG3mfr?V10vdE*w zu0@_OnZTp%J7kGCKfN*(J~*q zv(RLn^$FKC2Nu6&sI?KW<`k;rF-jGRz(sj)EZ*O(sy5qR^EFqb$@RgGN8cj$0^Zs5 z_{TapNNB;%P{pJ%CoERVmlAi3>jfj5mSNVWXUG{6N#6qMO1Q4Xi4)Q~Tw5VryA z*YSgAiv=0IPss=!We>x;LBbp@bTzox?_Hsa7G8g9iUIIWFk$yvSZv9xadjExtdBTR z<(Pm>>M+YDjkm^>wY*=An!Z`;{6-bqsk+0en<8}`y-|6$vi2gnEe>*=3%|<{6E5sI z1F9gUY;pJ;iG96KmwSXt4(lB>BwWmQ=6lMpceRuN!Zh(0^`gs-(3aHgsNeg$eu{*| zF4O*v#u1FhOwjazBgWi(^QvDp{AilUGaEi|bOPp8ec_#cRJg+n&^Yf}@%#l@pGA!NLLJ-&(cS8x0!E=Z=4DHnrQG?8z>4 zt>`XZ2_FRT5&gAV21vX9GX9K3=?6 zp4IcGOZWyA&8jMcQPggk`9rWzemp*HLD(9|jKo|*;IGfL+7rVP!c_dRp*8ud@Y<{x zomaQRuB9=4B`~uf3E1*n0YI;} zVi_j^-mwpE9ew<<+jDnd%M%^SNb;mB#{!3d&kw`xYL`{-O8plnx zj2dfqu&Pv#p4W&}udG`$Z3dfdlcJ~N%i@Lh;pzbO327S}(}p-7Knapp8rMV&p##25 zl8hTK;9e8E;o!d+W8F^BdUYC0y*F;%^RTt$Ti1#K)s4+-G|xAYQi#W5itweXrRwJ} zc3a)bTh;Yq0H7cF+(wo*9v@d_0C zw=L_py9@ZOw@V@oTo8BcE4+;B;e^J;If%Cy2Wmzvr4ZG?UQU7W(r`QrOVBa5X=Bxy z4GY|C8{0qW7+K|w`^&JiS4e6{;~jdnTd3h+bl5LD5sVs%JIztd0AY`use@Du{^y;y zD<7jcM}sSv0=*caOq=i~viRp+;;y%Acrx;FmuX3*jvc=RHiQ9o+tna{1F#mavy_&Q zphxTNM)H@c3C(Y&Aj%avUB3Xjy|b!Y8ju^?2aupQFu&KfUUtsz@L$6*fq@Ht8L9(L z{F4|{kIU35WWd?67XWT@>mg24*Nsl2hAE3_D_aPaB!_P~20G-B6QIzGJ*2zYXxOH}@!AWEpHmST`(8wVc&sY%!dmL352b z06c9T&*v5P>n!27J%p(L<|v34Ps!|%gh=PgxowSOuzAH-D2`LIr* zNr5&h6xTJ??dP*OU#UA;W4m!teATMtg&yL8XbH5UUUUp8DKKm#I2Em9>hTP>j>|A) zUPzE8!k@{mkyB>{sLf0>S6l|N{cpBw@|{2-34i?BtOdx}1yNs$d+MdO?2rN0SOuO- zDm*_)U2Uux>_oH1+D$4Cu6s8LTMC$Io*U{C@>i`+#zguMal!63JR~+0!u9S3w@yU5 zIDs!(qW+a$-n05L^OufsYqPhOGYT?AOE!T1N=O=RH`yuiZP+z z9{?#b3US|uhiGHN`7t)%WlT*msg_b;To(k_0Rs{+?HX_$7yGBmSdl_CfsCtuwX)Yy zH@jDNKiyyH=J4p?@pX=o`idUfkXcC9t8T-Uv6!B+d0Y79Xm_Y)82=MlY^ zbw$o^4(V0Q;!mpB@G(X+>b4_p#dvX@K3^4C?f{2eJdb%!rVh#JT1?cDCLIL8pSXQq zw6wGK{M?B~tNo7Zay%FkHr6kp8X8>i@KKrXg$!ol?B|5ipAkoqV1cYUX(2 zlmW27$B7ATR7q<#TO=2_t=Z(zSapfvSS~d@`}fQS)i$1h7h{dtnoiX^0=EM1_7k0w z%W}i0RYz9jayYh`D$O|yW#;kz(9riZqJPV-yA@0mfGw)JEj`t}mthf(MXkx!H^~ZQ zGGnE?2A69rvB=Za|A3`S;xhQGdo;5e?f}sC=?(0;3gyNIAar;F1iZ5NIZe>Kl)Qsm zd;WAbCU!i)P-LF>3{C()46X_*Gd(H-vl~w>M~D7yroIV`;xA_S2I9QE#-;+A!eRP8 zZokMf{`AiA#g^13Vj*sgY2U*g!V$=98%o5H=(a<4C+qbv1ig9~>zm1FaO(XyvG*@a zvTg_=T;EpAZ@a&2JC!NvxQJ7?70~)2BdB9=PDs;XA0At*$%WreuWp}2B7Qxzy&xT zd}Mf89KM$-kM7al`y@$#{DP03&ofNbG)ipj9s^#LTd#IJfSs9(Yo=pC-AcU+_G-^c zY3x0(r+t0?CF$ws!VGKuQAow_2-}!+Am8}Z#t6O6vvWL-o5B>O)=+!bAX;Ak_XVAm zFjiJu55EI?;o)30vn`}0(O)(Fjo;W1R>i7+T(yIhX!vCV{2V zthNtUDW1<@@&3^{yq2p=SjErrRze201$FWFF{Dq6T|#PU6E*73&OK6T$hkcvqwj}n zm;QTr=^704*f^O?D_h^ij^NRd^!BWE`cP#5z{tlm7x!zqdTPe6x`sOf1T6q?+pvqO z*U{qB!^f~aS`mDLNrNu2FOI8i40qQ|1yzXma;}2kJpTI;_o8R6r{a_xt64u;+RnOKuEA-Z(e}Q&@_x#vNb13ERPnM1QEuelK(#*E2g$(C!fn{ReMN|%r0To#vn~M{B zPw`f$@_MX*tZ>021P6Zl8J30}fyn)Uo~P!vb^-!w)J|FT*K;Y)Q|ZLBPQlREd2M=x zU3jRhE+)tqkQ6TJXx#}RG*Q3idxh|IzWYn}nu~U8Yy2{M+=JB;HrcR^+b!F_*fE8_ zoYwW(lN^g-Lq}hBQHne=e_8U%We?07M(7KG>{fqi!-qWwxUNi$OXC9=I(uz#`3DUG z1gdwhCUJSwYZLWXz-W+LUJ$Ix5T&hvr>$9H?t5nwpPfzMl&~kN6%o1 z7Tx<`FyX=EQWt&%sU3vjWpZJpX=?wWSCe+(=l|>`t3q*)x*L}x6y%V7b0T_}R`TX% z3*Y?dzLM^GjtRZ96(g$+*)eJA88a?h4)+h!DQM(^DkXjtydjOomo;kTY6M=Q+%Em4^^%mXOG#=D>H;4 zGRISb2=YGH!}{7!a5^;_GE!=P>R1y9Cb!uEqP&`e`lP-kvUDz6{eKRv=_f27>r@g& zv^TzX+upOTkGf1WXx$*xVMpGl<8>fBS0opl_Es0D59fEZ>k8Rp1@<*uc{e+2V#1vW zJwb2PF5UcGoQHOU9S1b`te!gLK9?zhX+3G0)#JF!Z|7F2kKr3fa5KR2YM5 zt_0iZpE_MaEYW9Sn)2RJvcX!+QX+pb?f>uuFT|$Omo{N~8G*>|jQvQF=a{W^=`!4? zG*^4c>!bI53RWAyW~#So{;dB)XMrg6aL(TK++SfLo+5d~K^EVqYoEF`|Pm*d|Rc{q%`UDr)o6Tdg(4kw3AySk1JFx)$8b1R)+aLOpwe+BDF zDsu+7qRW15UsKZ?;6@gjvif*D+^*aXEIRZvFS$;%XBJU`y|5!}>71gsbhR1(6s>H3k;^c@r zk4~6fqZz)KTZ%qjASdIf?yi44ymRGq1gCA4ZIfh85qI&qi^9*QYe4tM^deveFZkGE z@d)3t3rr8j;ieQuh_}rJwkA}ao5K~n`YV^#b9ZQxhfPK(N$UpKiS^7e_LjXs(8u|U zJG*H-dWFDv{a{tYsMLRErqFTc>uW$ycZDiG< zV$HCXS`vE)SE=6Q@%1BlW_$&Bu)ki7$-p>BjLf0b0MaHt%p!9@PafrNm}eNXZ>4?* zqgXAq6w^+247A-wl>R9oh!6yaX&6TR&9w2V*Q|b*wO#ZAAAJ@*^ej6TGrmX(A!Gyu zl&`{&=1WJ`Yc3!yL`djn=B?N){<(8Y1~!dUHU|u1fba2k2Bf|^H=G38%MRc%o-H|d zJolbeWBbSvu&-~mReii+xI>?s==nBEF%{)mJtYop;$gWT^_w&L!%@J0PQ)0RB8TtX zf$d4i++8?iLKRHYVVc$<3^Vk%8G4K5xT$?K@}XFZW;l&~Se%1?ORm~na+o#`@IgLC zbZT_msLNK$FH!&V{75F&!p`LqH;_t)7Wrc3`WAwF%XR5bF}nS!IW- z8m`K%O}YbC9RKs@f>OOI8#JUL=$tK_u;c_TGCZFqVYcc>O#yz27=x`zUh?CHfk^yOl%72+W35nc{ z6!)cz?HKe>ZM!+&k9-2iTkK9JGRLa;Ua(G{&es|qp#bX0Apmxdnh$z5Tx9y{E;_qi z^4R%bR$%zayVfp6G~!DRbY51lHe+#okL5OJVqib9>rG@$QwLzYxfwe~YqnQhH+|kP z53d4$b#1z{FrH>k8y^RsSHbK0VEt4(Q$hC}?<@2@65`d!CVx4fiSF@{gP~jNMkaFJ zS1wUFc}*rxUQ6K=JHgVP3h$jMY1MtcNpp32-o0KkjgjJAyFF_~1CW z8lp)|6HI$*_nQyPnT3>bvgchA-5VcMkpr%2hnfX&!IH zbl9nZDG4FGI!YMJkI}u3KK;s++>q1xKf!ZtY_?vv1b3bwE&d+}mt2&)&U6IqP6MZ= zrk<$z)THnfkOo}QU^#ERz*Z2x@`$rC89uCC^2f@IsS!ey0~JRLUvyo8;8+a)wnTl@ z-*sF$PO0sCpyts$qgzpmsgLHK6(AmhoK~qY^KVl$Xlpgy(2OB3WUJ9v#Lz_bn>cTy z8i6p8D8{5Iwd-|@iD7=%L@AOosZT*h!YG}1Fpq7;)yTG=&Qje##bCiraa6Fo&(R_Q z+)hS|V;`pz<$S!QtI{B0QeY%*)iusHieyl(3o_Q?l2J3IAtbgXazpi)VnvuMNc=0a zE6V{ z7guAq6(N!@e2yJwDYRV~9~*t2Z*khTkbPFodmoO{FPZe@A&_YrrepD!pSZk2yRskc z*ehK)m0HDDMucn8M;*6XIM4ZCBy#pltlng8h{sm`)Qh&L_-NVKssv8R!i-|^eynR~ z&n$fM9Oqf=NuDTHfnc&lI3VAm9Zi|@pvAtbyU>W0AVysEIQkW}Xcng&_p29^^)qFs ztNNMIPY$BF*3+YX?|D!n3_*&!uPd7YJ1Zd$n;CZ1Pn;S!{i$r$$(E1MeuXZp3GNs& z9F3@o4Grtei*NDc4J3)>IJlpKFpF-XIi4c0r`T0+x89oPqh=yeen0kJsguDt084|Q zn>8i51yIU4vrVsCn4b7}vuN=`?Ync&DNfAWf&FQwyMO1@50|CDO~7TLRy{&x??uVaV8v73p(e5<{QeD5U5y)&svYAS7t2zBdNR=Um3S5)ut|C(D5n_I5w7%N+HF~bq!uBmB zz;;t0d(UTv_54KmM-EjhP0isQmzv)hmqT#dRJIE zRps^;G95cSGv=nRKYirv`v_{ipoEfMl4LV!l|UyJ^NS1A?G$l8Ypjl#rrmP=S}uRq=Pd1 z-S?bv_!?^VTr~hXP3d)rF=@|U%go;cxjtOaJPK2r{^u5KP8UJv?T8-kxH)_=l)GdhdMa47DlXmdNf@ky3V-p>p;p2dCjJ%HMJ< z4zk@roqgCs8re~;uV>70h2QVC^GrC8n7Q2oF2pU>L+>Lj)}~b{7F;{IF5>Cl9+o_# zS~MnK?s4prbQ#3l?n2;e4Tma^6O&9rKm1B(E$$9-e-<9)mApRC z-s`+XW_5N->p=gauJIRlb{t&#!X$9arOM=AYo56vI@Z)40C!Z= z=7OAaeCe;J4reX%X@vW`K(fwwBNkY4k@=BKuSSbd4;*Ht2NvE03_O(KXnmuPTyQU2 zf$7!ZZ-1FGO4sbX6+d!u??rf9ds?5fnqrc|5PbYoN3Li1#ntSl3(s)AS2_;clt%#B zY?c^hImPUmRRTMbwS-K0c3-7nB1$!|pf#KWgSr0D#pxDqNT$t)zdlFR`C9nP`c-&c zr6#^dC`Ow}7}HKL!La8R14Zl4vA(lO(hY=5;}h2Uehg)QT9@Q60+p9#w7y?@Y2|tw zokwYtlMtHe2JY0iM*|`(CZqMqcm5HI%n9wV!_}vUt&69{1L67u@k+MsgT-A~P&urL z2q%$q=;aRkFP2~PEO>=g2?yfhgwYU8iW@s$uZIZvFac|?+KCsLHMXxg$0HHd48Bi% zYc1B5#J)qnCpi~M$&#;1HD4M*3`f)SCjH;C^P~*&{H+1q8Dhy)Q6aE{ee~V z8FyTW$tTY`i0!7hoV14>lEgFlP5^V6dCnSpinjyd6GrvsqQmnU*LUrj-6UkktcJ>S zo0juxuH%r``>3+_&VALf;VmjDbI6TQUCn{ckb!_Cb@r?)65$SG;2Pb$5v-*H_57ms zOUa3)X~<>Q%Yr6Q(~!A1wSs!%~lVzci43I!F z070H^jlrA7t!iCUVok>hn?WkVi;cy$s^>#%`DWmpZ7RfqJx~GQIeWv~oNcWkBpu4e zNj~w{2^w}UP;pCU&JOoO?zG!viXHi3A=vTcoYciTwgHZ&gw8B!o!2pJfNt>@O!tqACtf{BzSmZQQ>;9Cqdqrt8EksS?OH7$c zU+o-?$kl1`drJ{h>X+p}1Dq1s2P47PTN@tJ9eZ-X`$ohkrQGNDt871KS&=Z!n9P^% zZfgm-NM1odWsAvt)v_ZuzUg1WbYd3O@{}L7sWF+RGS63&*(IauGBOil7{i7UK1^dv{B+D#9~j8{wKUZ~DB~O)KO$!U0urFDd?+3&KR5HoSpC)af~3J;;psTP_;=0 zK^!A>J8*PqfhV6jSX!B(_VlrWTWs7MG}E$9q^9!%t@otGKUL@G*^_^+CAgf|9k)22 zbxuOOKftb(Iwm6}WhEDIybn^+oizZcP&#h+jL})7P46N$`ClXKSiwFr%PmU7R0_;1 zt)kD3y-=hbPYwM@-#&{fVK?uMfF>MEh zsha_lXxU@I#GZJU>h=iyFlO#&7%B8!rYnb?Uc&@Lb-MSK^N)cq#JFDWs~cmg>wz=j z{O*Zg(Ib-{KJ#GbAZ7`%9DV(g!9&($gFZPbLPuBn_CE6%%Pn-zcU1tfm1T7Dh3Qsv>tm$NB1E@_KmHSJAzPTpM5oLyvv=4*M~PX1J3Cgo zpp?fBMqh@|TkgND+8hog1@O$tBi#B?8V6Eys{_Cerf%MY=Na)!T_y!T`QCxl@@~?@ zwU3g71n@Ygu?|Jgu)K3Mr<^sX(8wG(6Y7Ojh$07emWpzk^fy6n?u-vxTYA@$yaQ?J zTpG@8*3@r;(Uu`M>#bIfu2^M$e7IW^OOI4NukS0b**%o1AL6BSkOq!UvU4KCh`>ri}V5_iKQ7{9`L zPM{1>wP7d#I0^zJ%@ezK4zW~A=EOH(XN#ZnoTllNadlE<;iW>;TWYIg`<3P@LMCJa zZgK26Oz@W z%bGlFR~p(Uf;(ut=EbEe(^Q%x4}eUCmtfaoEjgTxLC`PF{X4ojb{ZCbtyK9X7qNb4 z%fr|e`b(tk4taZ;Z5m(^(|A4}4JPjjkoUNpIXF&9(b%o?nmltrRUR6hTaKm`T(Ceo zW`ND%pw$f&>)wNWD|h$pPi3u9TC%&T<4lIZOgW;{@0U2KzAMXZFYSbKQOD7@%jeDD zJdBzOqIrT2-OeX%YT)qsG~4+C_6-+Gj{L449dKILOI;=9Km5IHcT`2d7^f1 zneRB8nDYyzw1V@!*Y~uPDKP$Q^S}wJHJ}X5iJzRGr)eowJ(H? zjc+AqxjGo@qnBCT$`zDVEW4mdUbe?kBhvn0X>(W}%ra0YBL3ZF{j2mT7e-}bxCz&; zpE8@1&;?4G?fs>It>Aa34x_rFhBmx&+4nW1#z(t}G-@6s%JW6*oXw>XT_SMhv3wjAFcZS<7<%co-Pbapt~_*$V!UFjq_BgPn=T|B+d z9?@yUtd7Q4$DU^}uQ@lGU5tYqNVWp$lyzd>5nyJU7)=`~#Ozr?`r&^%NN3aYnPwB# ze*ue~zVut^9AQ3i%_TehSt*GDDTca^#LQHgql``_m95{!K%e{}VLYYpiE3Qb;WM}y z7En~0QT4RqY>X_S);iS};p0a2!k#wRR9W%e4a@0`S3|Sk7?m_hh|{O)^li8Sy|xoM zRaR6?4SjC*CWc6q6I!xLgC=2>Eb!jY>tu;7icfte7D3`~DraWsTx!4~gUC&0Voi`& z3F1^RCsh?iEL{@EDkWm&#qN0YyyV5KpWVv1#s%J)&t9hNg}$m_4egYrP}t(8oPMJl z0t}IDuE9y>h&e-boo151PTvR?UY@Wegoxl_P~(p-*#6_w2tc=BXHk~Noy-tkV)hy! z0WG!mIN9V!sX6GG$iTri@vTZQ$Zs+U3mqR8Ztcq<2lKc`{Ay=tse#4Pe{O=n;tiS+ zcZ6G}+RQ~>r_~@Ht2N@$QP^reK+oxer}c0U_Ng`ZyZnMB0nBpr=+FJD203dVP&wfd zBY|q7je&~l#|b^djiRBdUgu=<74R$V)!F$dG7=jmCd9o}*)*}wPvQQps%F?rCWIzJ z9l@X2Ydvi8Z9GFw zPMijKafw>mkQq=n#b&E_NN7Z;TV7TH(IW+4_!#S`-f$CZA40S<2njB9>YrCQAg@ssrQ z%~Tgn(SwL<+lN43yIMf@+*IGlL!U)9#<7dWg@Bm?tBgEZq8B*X^Sj%-ewlaHTfY^f z%#f9rg)i;efvzLaeR3y3^A!*Uj;WI zqo8y6po~ZETs0^r*m$`MM{V9y?BL5c>{E%LK#C@FS-zWt%=E$ zSNu7#L+h*8jg$IX(xQ4gxd(A7j|2!7tpfNiCDEaGaPWRnU%^3CjaA29Y4)KxB2Z$l zJXwmGEKh(0F*pKDz*$VDN`p!`uEspsgy|Ou0r!9yXmHQEvyouSufcr=oZ{VxbmYI@ z@{V0oO}o9zV^OUooD8^aBkZ^jrY+yYl2>~H-;nuW#r(clpB1wq0)=EC<bLYf=Te`l6cyeQHk_{#zqTs`P4;$IL2MchE8h26rSLbJAP)vwFgq^G@KS2h zuota$M+Vp;?lH!ddx|2v)`+@vSgt5^gUHjw$WaT@llDAS`PUEwWmc)X;hEd zf|IBG_UT0zi$Ls9A-r8#osi?Teeza#G!E~AVaNCm*%SqDTb$O9nAY*bzba@7UUyG9 z8Ql5d9m{q4kkwOlVsMLE*n_`$|BRONB1NN#&Cf>UDC6eT(Va-k{>%p5xO9cVz`ocQ!kY-I|Jr#8F?Q20L)4_s(yrDa;MHQt9{Y z6i)A>$HxrQ=Yyz_v+et;1Nb?I3|}C=@I%ZOV}Kepl)g&XHilMslEH6?fg;f%i#K%n zYL{>oO43w;8XHn11Lq>b^h_j!KkcPPyx(S2tfd6aT}XvELBO`|B`^VYgM>6kUd(`F z+9_;J&I2dd;J5iG6bhh$$X?RSnJqmM$`9W^~tPvxus5rWR9MRN$@$;B3txLdhxMklX(F81t9660*WNh;?`kt}}t z;2#`~#=%}wU^w;DZ}`RP&(^Q@uyV+#Dz~zzeqn+?z8!oJA%M^YRhFR+?#6qA@gJSw z0q9of#)<@ImErs?=4BYg0G)$Z*I~n?>mhjC?H?{`ZtdaByK(4@a@;>vs&m!fZ%{H? zzm3LEJgCFRsMSIXZ0O6f41f0?BEJPh_#Hrs$Jo@NxG?1p!o>R_U|#aBR^GES8LJ&P z-Jb%4p0`(qjF}z}#DUzY%QNM3V~mF=dhTpmmU$M91aK`05V#|>W4hT~Y&IvXh!10v z^P&mrZQeQW>ohg)G{b3`En}B=uKBDr_}Zui)NaLKq=DMP5E>{&zx)IFbgj<%#jwwp zknqs6WAe^xMCZG#EOcJvIXcF6pPcqm*pxluD1?nZgPxV)MoX(lp|NwO%aczewPUGN zrbwvO6Nvgx&lN<@7ovRv0?rnu+y9pRka4zG(&o{2laVyTg)irF0p6-$^%KfI88iM5 zdzGUR)5=22%N{XdTgqa?WJm?Syhu}TUzlnDX~(B{8m%BI5R9MdYjd^sE3dd8c|yRL zQIJBciqQCs7x+Qy*VnaG4^K{3o6aO!h)0d$+m38&u0~TrpC}}x9N%vT`@kUQ_;`Tx zb|{A&1@%MUa@_1*gm}du?kpDQfbiuFU8}d;X~gx-r0{gYk9(a|kX{L^@i*TB35%`6 zl0_(j_%Rt0D}^0~TG`e&CM%^5=<6AyQ0`m{^gdTFsI=8gJ(l?A>r3b((GS?l&SyHa zC!TnknbW%lE!5Q82~aL-j|4i#*z>KmIi@b4bA*%*Z#vncdPA2B_x?n@=W=+_#O+?k zy1pMA;n|4so(VH6&}Z_qbGT6mOxed%sx2^Jx9Gk4eS{Zcx$e^CvhL=eR^zyc2t z3DD#0q0AXQ2>UUy+Fd$f%mX7=+(eu!q@`@tbR~YHr;}I6jZ?|ke?IlnTDU*<_$F>dO6=dk;^x^ z_(o+4l{_E~EEpLxSahHSMf&IgHuu-;kbtY?7J-rXurh6#7~33$0s3x;CQ3Lr{Ncd_ zAn}vPCnDrw;W4*js$(dnW24R2tg5^npp3u@15O~x(7b0jug=Qp|0+)V6$A+S)glyn zY4xl{A}N8k$YON|nmwZl_KU&SL=|;{GTJM2L7|P^fY$BZcN_pum8q%FNB+=`#yzBA zw19%_9T0xu1%j^AXq-;^H)T2*xx`lo9~!(ZMoU{U1IK$xflkhcKNJy{ncVFXhD%`^ z9!(vT@lU%Ek_#enX^-8PuQKr{x*LZfsEc%Q<>cAN*Lz0ua*e4%DjkgF{`Hjk3h)RLSbP#R{RC)mf zRB$i6|L)|xu)X&!9nyXH@D6LEzKMX3Tz&#-PdOiE&*^}%k_gX&@jmj4dsrFpE6dEP zx6kz8Z8tt5JD>?vz$&x=M;8!$08T&xkj4M&``?l!z)Kh{4^Z*Q8pig&=;MC~R{an9 zcrwEMSCW5^-G6-=ApiLPdr`vs@=!HWYPyk(wY8#l8zxo@iz4b$vavMLe|WC{HMIt_ zjb?YzsnACVg_FQ0{#Tj4b9F% zG(Vq;)^$u8M`yw*3^mRo&0Q!qi9Z)QTrAe*^W1|4vP6tq8Srtx6E=w;ys`Tg|N_e?~MJfaDKplKZV)wM&x z@_{RwuS2|`KKI<=V9I-UQOv%O_WrNIsP4~9Dzqi%yTzUU@De97M?_R*uYigpf}<=VFNvp=7)_~;lW;#3dxK( zj32%Tco_FyphYuZG8eE&?$kx~iKYGXU=0=yZU6WBK99UmytK9Y#@-TMCJc81W0e*;luD&@NQhDL-v|^tOgh^PE9aLoW*)BF5SS4se@8Ujb0wqAM=P75`jWipgf) zQ`z!EX!@S8?sdPGPGgNdDh#MdAeA&wCT}#%mrNC{vpA8Qkfw~NWeS(~QmFsg!!l86 zv7D1}82FRBM*BJT=AGFa9>eB|@$j72R+g@GQ+RWcu;0ID8FjU8FsV*nGdZL-kdp1= ztR?PO78e(FP2Lw41A3I#?@FWlS*+>zbiM!6!M{BS}NaERY7xKW5HE#t_Wp3Hgtc_k zuX%cz7xuXtFGWm@uiZ-Wxn0mFsG)IWYDAjMn*8gZH!CHQ;G0p{)f~ZQ@>TMjiK5IY z;$F0CJ!*a+&Qn^V=oI#0;8F zy|O&C|D0G+Pz7~9Y=`G8hw9K-T_-M1=mk|O>^$M8Xw5(!yO9&PmrUfcwuf%cCdt+D zP=DrmxkLk~x}dY%IcHezm6aM$oO;WNxLf8W{(GtdYIZ24t0l^GGvs~c-ZAc0oKo|- zM#hgKNGqLPWj8C%M~xv0cJ-?`jNAAcqe&7y)+7aVVTLH=l?rTB8S#mbw;R~PO^O$Y z^5gzFIh5coSi?CDXnxSHP`@5& zmD+aQ=I$kmK`X@EDT@4~XN;=9xam*BjpD;lr=QCkijE5+YON_C>8hv#c5=$EGsFVx zzy{&K#y6;5@Cm9Lt)rq!Gxqeal&q2YRAc@Oe9YYZAWLlY@CB-W|K}he(ndLKT>LZP!LJTxum-59dr|vCd_K|5^FP1;Y9}T>ked=N;eH|<^wJsuHq2H0?zfjq zBa!5nkZ+k_X}0WlpMnAq&iU_A>gO0Z{T<1&!IWQJcx?Yi7&`0{&Av>5uySkg8}83@ zV_jh0AU;cyk&iHF?2wNQ2`2(E7~5kKgWdd7=9nr_CHF;gporU6R+$LmK`f1hk}wdF z3GRRNDvT20RZ&v28U{Gfo8h>aa;cuP6?2Z6n)@d4?RS1@OS)8v)X#`EKH%YIgymZY zX2Wfi^*&muiX1&eL8Nh0qy2A(4>)>{|7bBNnpWrEWu)St+Wv60M-TWn^? zJD3+v(Ho>2lFu&f=L(`u%6)w{xfK3wjo0cv@UIuc@)Z=&WRtX+Bey|#AIfYfFZk`) zU|wVS53noJKu7h8j_s^}8ZV}&q#i(A=yUq_|J%W@r)nxaeRa$N*LOy?mOi+Uo33_- z{Ga^*95(@FM*n7E_|NbCBthE$#cuJRA(H-)fdBT)x|{IN#t{q#7|qs=7}Tnxs(~sX zv;2?qYM2CM%m3h{_!SiQ|Mwyi{>K~3ep1E(@x}Q?lEiS~T6G*OEXs(sej~z-I+usu z5M`nq-dAO{tD0sl??EbE1E<{gzvme$k-FkyG7TYbg#ZeO?{i3rQ6#JN*fqBHA^^Q7 zXYU^$8kUUgMn?OJ$yD=<;ZFJSy0b6WyIjo_IG4*c{6n@W;A{yNlk_Y}g}Wmn9_B~I z1C%#}zJ-Q5wqA}BB^gIsE|wn+%90%v{J(g;u7$s9uEwa4=ox+T-Y2{+Yh&aJz#~dp zue{rHwrKE+mc8^m)0{nNoP-1}Xbcl5jeaN2EkB-*dbAH8-C@WfbUGV+b%T~NGSRLz z(IqTo22!C<0YZ3c%qs4f2VD9|d7TuDEl{OF)av}PISwp~(Xzp5Mk8tR%0mwtiKS)w z)f8l6bhX_5^FLIQ`uho?zNj%wgOQKCCEkNOo0^)6y$HjAW+!NAExG?#+e$=Y*NRWs zGJxBZ%}d*(VPOL3i95|7@;xq|Ko!eEM5vppY(~PS@J3@?=PBi;l;B)HClS?@AWFa7 zCLj!9PC@1Pl*iOzv)P0mM5S{H%k-Mv4vI~m06>q~unBtWsXYHIh zzi4nUa%GRE$YwIghxb-%$K)6oD=Q>6wybsQ0Zk5uD_&znZ$Sxkw};xlJL*>v zPG9vpY!6Z}X)lm%@yNDlzI$qKPG=H8>!&xHm?#AO&c0a{1$ubZU&+oCJ#I+N?fDFW z&%Krs(ngHEl%BW960ue*!AfJXv3m0LwgL+3OR1cGBa^PU-Bh&Cpq8|Rk)>YGZWp(I ze!a97}yki;uNqLkOQP{~l-;1eo4DBX=x{7aJ~N!+|8 zkJI9G;_5F)^Iq?{=IO$JyLG5{p_W`rxic-$4Ku+8QnjN?+d!rtLlt%wD0R3s9QJH- zi;|yS?$odK+C{V)GnlWkUd30^r!2M;z@BQJL*Q2l)chA`Rwv`r87IG zEtU4j7kdqmpEiQqN=jZomP*3brHssSWVN(YG>?S8oNL%2pZ$$g5byJc&-iAmV(80u6tbG?GB zt&V`G7PtS=`=RHQPk`fYC8bo40>dhsbc1vT+*X21GV>An^zBEiO8bF)@i-~bP|dZA zsX-dDWULw;3NUwdm3b;_aRp96iY~yVPk?msZWUh;I%=+LDcq{i*i+CPW8~}sSNV*F zJ6;y0zbmp|Uopb1ULDINR*r9}Qi{;Nih1A&(8PG6NiS}32+O$8?Q-<(!aIdKav1V( zt)xtc=lxdo6A#^d z%f7YNoMX(FCIEK`A6w3oiH`zr#MPlCvtMPRrnY64Cd_qtwHEhpB4hmo*Bj~xd_DJSy3EXcm2y`n8)m2l za!Yc5e@i{u!Mohd>&ktIp*o(s8qH+<#~(d&Y$Zm%)$bXf;76&#dkKOa?yhfbWY)Y% z6{BHI``QRZO^RN?bKGD77TT-%rQ3iDU4aw$uGfD^y=ej}3;5_Rg4Qr|_9{3ssCH4LouC-a$X|tqU7&gxflF?^7 zbo(z>&EGqy&S2BO9e|hsE8n_ow#p@-wXm;k7HGl?%Pw^4z=<_A0zaWCQyRrRrZ)}V zfn!k$M}Cjjy@tuF;i_Sd3&nz-t$XI@l<6TlX(5|2qV-1wxqskT*y8 ztNcDlaI1`I%rLXq`?7be!aL6%*xT72Zawcb%4onb?9gz9`;6eYj7DNVwL}M;ze7BT$kcf-Ae&pn-t|{t9myi z_0gT!YIkTCv`INwOr9Jh%sbEh8Lww~H*fds(jrPCblX9+d-qRZRLefKa>e;M@=i_N zN6N|imz8?ZE~^~TYGW%(`Se|cR~D2z$WNHh5PIH4|#xCp#40=N%p_c(1iQ?6JpQ4}DZ<@DxVh;jXTEkW+n-QsX z`FtF?oANKYT`48sDU>Lg4C(c8&Oi>1pL~Yy7ME*vFP6%qWd=rmZ(gQL21XxqdpxE2 zZ!=t`Pf#e=h_h?+Ax{Px#>CyY^)mYPixz=>OqP?GQ&y<4f2>W2`TGJ~>938D-Ae zQSuNK>?D8}XF0v|cS)}}G(_pjkdb$kbYUa}?y;#pdf|i%w&@&r5_ci~VH(Jzx?@1_&YD(HVm|j$1NEEN)a@Rx3u=ZJY!c zGM6y*^ZX5z3=+D44JnLaPC+o7eyO``bCKfd5yyIt{dVJz_WOFJZ#@zJ?VNz;etGp- zYfrh+oX&YN^a~-gBQiDL$fS>|K+RPTQ;r0Dd8B_l5-^$Wom*T-2Ne>1UpqCjn)&;_ z+w(KX^n01fo%ansJh+E%W0c8pEHLSBc6)YkbwN`V<(wZGVkd?w+=bl#9SLd#aaI|c zM^`)mJ9v>)RRWs+I_RvodD>Qhyx`D4Hbx!vDwb5KY1drx)npFiMalf4S2!?`zTv|Y z%B3bkzSXFQE0V<$VeUmuf-A)1=CON&ydJi`=cWVs4x%HkEEBpb8{DRP6cT3O5cJSEDqx*?lagu{S5MpEs zRBq{@i%VH2#5`S0`B$B*!xvc>-8DC%{d)#wsuzVt|6BLr^>U_ghw0eFevhwV1_e$o zP}1yAqvJd+BPV51vE|T&Hy2!XZo&Ah+Xtl|TBD+I;*8a^{!lUFXk`cC#Q~!tF~@N? z*c+rtdNT^web{x{yM8(Dh0VC#$yK>&6?IrH>7C-|gz(gPD{5q<9~`};ZIAvS;6k$<{ja$N_0KxqEf7UKIoWII(( zxuhFlHXPH00*F4#G@UH!5U3x<<2e2UE>Vd391sgh=r$1Jh*G}J!mB}nGoRRq7QQq9TTESLd8WQsFjg!X#p#HN{Tqdd5PSH z*bbTBT2Nn}JZ4natK=D9xSrD_;m0V~DA zuPRxI07psq9$dDO8DGKwUQQ`n5857Q^a~AT=djIV$t2iMJ8uZxS&YBO}Ts4Yg z6&z0AY8ZN@b$;&JwR0vv^q<7BxUWqB10bPq?7 zk-&Zl-~u0C8e?9~>8m6F6MFI~3BS8Suhjw>CzWO}$N>%y>y7Zf_5}{xlJDgBWq`5F z!15$9%tMonAzM#3Th?qxuLNYSrj`Y7n$Ygx?0XEYAgD6kdM@XJ7ER1y)r;)8$tmTB zUg+?_#1$zQRki7P;P}g9+eqt;&Y2$?^v^gXbq z41zghv`}}-sO3cSI2^)m=J-k1c1}2&`ZUFaZFv+JUJ}IPx(W3>Xb4NcxVIKcp<(u` zApRjuD}^bSRa@h2zwyt5^C8?F-h0hti7qW9gLv8}ov3KQ%5A|{v3xV>`X zp=DXfI>N-N3h5|+!k(DCQ@vH*7pfSJv?w{c(eX~jY4~I^Hnaru*e_R+KJqnU=C#gE zCv(RQQbx0K3iAyP&+_Z#JS!yqxPI6n*d=(z1pRng+bEYe&wnT5x zVmXj@ECid(CXzo_;B7(9N5hdayW8f&zNHvZ$$Pq-QOZ)P@bB9WS{n-QW~18!B9G;h zf=i-c!M{p&r^RN8HPpV;I;j{f6&J#`3mt2OyOR&i7sVO@yySn!E_VIe{8N27+?LVV zIc>%t8{w~gYLHo%Dbio|Ic~Y!dOHl`FBUNMy1KR1>y~uYhx=&23|@!l1&;A_5#DmO z!=W1Jw~56}wp44lKglnPrbtKaOA+a#2LA}d0RNp$Pj8Kkw%2m&<&Wi*y-9GLIS!vi zDi5BAmP<(np7Xnerft$JnMY*xA1-CwrMB+p3~XM5Mknj{O;*!5!4jqPSm-kUsLlJX+)vlG$OJi#*v&^4OVq4+{Txk!MAVZWc#LooY2~aylUG)`2lw1 zHVuZfYUnQ+QuJpPU_C^xA-gB(X_nr@Jv}tw=no6OJNH0 zCF`R5X_Uy9eUfy!A3^J5PZ%1e$BTeOWD4|S#kRrsGO1&x^;T=l?jp{(lB@Zl@-H%r zsP3{{n0cyT`{{gZWtL;8+1K;$>Ck8;HGn&|7Ga7}`*Dm7%;+@O<(&=h`9(|`Y|5U> z)G3Bm5gTWxr~2W9h;!VyGs_7;U()2cPlO{x+&dbq>Eu|4Uu%XuyFgG1b0i&C6GX_| zc=H!w8ph7s>rl8UpSg47jvcw_%7d55Ao;-CbU-yT|Fl0qkdwa`+J|t)1TzoAK@$x) zCecc6m~5wl3_*r=hN$2e7Do%8?V(f%X(NK^s-p1E))BbJ5CM@<0bi(-T!vEtjAITC zk&T%bp0j&!{Z4`R8r8mI0Ih)NU=O{cF0K(JP6G(i^&xueWH5~6mi5VyY*P;?50VNQ ztGR)N*pHhDzcq$rjW~@Sj7HnN;}wiWovS#g3v)-DxKT+%1Ghp&pM}*_mWO*va8mlG99s+pwU>lec}aJJ~)9T8~T~Tp-DanSbNgU6`7P zBa_FZX#??}p$wsPEVq((#wDb!Iw8vA6f_#Yknio&PUru{%xdN9^}j#VhHCdQ0Po8* z^;|E3=iAyXcGJWamQK}^7b#g`Dd+wY_}vFjx=m{Wpy**Dt2EqEnxL@ki;c7c0GJ(4qCK))_MjT$w%FKHM4 zi8g{9Y7axismf~h-LYZKo_u|OM#I54a2eLy&G0#icu?E}`#b676O0QqpSHnp?e~9q z{6Bj5c`I*62-toUIt5txa#nA*1rl>j@D2#yOk8I`cHNW2lICRg@RdCy_@$#mn1yC4Y5P#Ji&ZLdS=1rBvE^{Vqug)9hzjsLw zB!a^%o@fuXx%jom4VimPB5nX@+8>uBXO&ld-rJ56+TMV08+qPFd@EfRb2uA%5ixbw zdVb8YTA)ZC-u*Ig!xlA=fgvWDGm>>&6r8TT?wB}+Tv zdPD0b+;UbN=Lct1o-#z+JH4?=&w%d+*nFS-Dy*Jbo`9<%S<*cMSf0%Z_9my;_^Q!p zcPA9D#jPqb_&!5#?u1p~0_68dJvi#WLa74$u1CIjOk$Cn;EXU^<8d2era1sl!@$L; ze-);MU2L~Gw{Qmm5(QqBmv3y&#$fD!OAHEytu1N?iAKqJ-h8K4iIb{`%P0J_a|wWc zz+|Mv%$;eMoq5n6)I&)!uck&di+el>ifV{~r&ih5L9d}PUsE3Zu$QIiy`_80d6rQZ zkNxRQmmA_2m0~!X8l@C`8mAnfL0~uUV{Kph#cM2?M_wzv4Dl-? zI2)qMF&Yn3d>ry@Ks-hXUKWyz1$j?VqbH7)XW|YX>kt*{^0}PX`dL6q(AWeM^%}bQ zm{Mxk)OZ7&c!xYy>I_g^RtSTqvEbb0`}O*T+!SN^q0B_D)|vIrYP@&g3GkBbdeXfA z!S`}!T<7(6V-QL@eP&?mG`6=Q<9*%v&}5Th^q6dGlR$DeTLLWT1t&iSGZFD=cTE+` z9sCNHaP)beRP#1;Em38=2|z;nET*z^2+UOu^PlWkx-*#uGMr*QEH(sq_jg9W3eMjh zzIFH+ffUV3ab*w9r>r`beG4uF<$lHIDqvDAcQ~xxcEkbVT;Agd`p&T-uR=b)8JHB5tm-YBtUxY_i`f{gE_hwoJvs&-Cutcd z$A>=?09=xJ7K3~lQbPID^i^&Twz7}F_k+8Cr0$nRlIYPb^X@wCGt{@=43XG@L zoS*rZl()0it`ssbn8jm_Wq!G(s-FFBsHfPd{l`yF@&#?d@vT{%X*cL4spfYE#S2fpDI zO0bC=V&}G^-*1;T-uAC%6wGCfksnfYgK{=BzO(1TYARHcPDhq9-}m*<(6E)JQiOei z^?wMiEc=EVwFUjfS1v)fCxqcxpdOsMq+0~)ZOl>m-iBp3r$(s zjDlJz>63G$%p@|JllYi6Ssp6*)-$E-r>?;B7Vj3e+LHkpzW}wH$7xC3{;+*6JmxFC-_OGl;bZ>))Hv2-`{@C0ZtNqOgTGS z_y2tQHtMmR1$aH6K6j3n2EK*evr5!ouy*ZprUH&FK791oQS)HP+*EWw%A?jDz_;x6 z?g)Q(^fAeP`w99sc69AuCR!gY6-qV^p|jlM(-E@aW3N3sA7Xj0B?XlDYz(Asm97fF zwyP#}9EQgnxt7TV8>kv5n)i**Wg1!K&XXPve-bGrBj55^1EF+^(SPR-TYvU&y1W<0 z0e+I>>x2HU+texcrpk+rX8-LRaG1*9GWXfnBiGDI;F~OFj_cMuLrZk8$|FO3*_|t2=N-|7&5|_gsXYV9{%Cfqw-Qa%aV6IzC#o*VW{Sw zjn*+%&@PdseQpM_HPVid8)P(i-Q3Q;TzsFAxk{cE-|c)K)(W20LR+<++zy^w_s@N^ zI31j*(7R_Yd}=FsYQy+ibzL0h&L8-`o~-i3J%X?>nv0aKvE7;sy2S02p>4dy`)-+t^_q$xi|wx+eVa5??pCeDt?OZxRLk?pHY+4fix`c# z>8ihDPao#t)QgV1dsZ4~Q1<*#nHXM(l~v^ZA?U38ESNn$xA?0*uT6-$p%t;Xo>dD* zK-p5bWI*+)O}fQyyT#h}ye~W%A6infO3|IciH-8I%@Y$M+0k}ECB{CqYaMGy@u*Dl z)SH~TKS!7Pk1SL41FLE!x;uduL^@1r*i4(Mvfb{l5R+q{>7d_ki6>-? z2%i&&lNO!4-T4zoJ)-@LKvG;{54hY- zW@|UrouFdvJ@HLJ<0qSCl40(f29ba4#Dg1+JW~~P=pR=daDD0PRw}MV4>7MPJ^-Q^ zR>e)!QiA{ysqrs03?YWBAx&bbsNX@PmJFfSQGpBJ)G>K}K;@k~crN{vagxlcSHRIq zxqQO|PxM|I*JtJudhnwE*Gzjss?}2uH#NaW&XoS15X~%N@=UHQ#;WtSB9{~o;wi|G~Yhg8;XRD7!So^fMx?);e)E^uQ9sMU%E z5(t3bo8m9Y!pYEgyGQJ8v&tXn#&HJtYSnTqlBE}!23Cvx;=O$<__qjbPI3~>_J&dL zPiw#Cez*;)%%(FGwWHwc9w`1rKYmRgZ>-orsTX`7xcC#70B%TH#sTl9P3vqcu?=c= zqvf71lt-PHBTnwc@OJvK{*+reHeogzq1vU>uqME9Qr#JN|yQ?^~4|&j*Fjjo=%GgUIClq^(lWd@4&P2Kl+ ze!IG~I5W2qa;cHajoQ)^t|{h!Z&whrI$RmQn!rCc;_w)X^&gw$PV_EU>5~yR1TS`S zr2=W9hjyXa`U%s_Muk`$|Dztj^u!`O^m6}WLXj)bURTi`eY@KXk~mb^m4>tR5Ba1u9KQ7s z;tw28FFF}9O4<4vvF;rT3d5`--5u8h^x*CJruldGopL<(SJ9aeT@=5#{tEx0`xM}- zG(9iSksbK76vMtWnN75i^y6_etwnaHXWTkE9-s^t&3T^A-H$wSk*vg zAEEZJF3oavqN=|)b96|Ay%OCiG%k3s=c{MX#jlFOT=kdm2dj7xxuRB2IBVPgYRR`S zR;Y=W_BJ3(Ga}cYOewqu_HS-oN(MLoga8kzU*1s1 z?}PWs?{)gQ8L5MBKcR5YkaCp8pg0%5ccRZ^6fz*cbJmYm6J&qD4xx0!w=R@a*nLT8ir@L^W24&#|LL`#0WSXd$P&% zMV46M&SVRL1IL}VnYwOz4O@n+$|?Jitw)?9K_qRh=m@_8y+lLfI{or|TIs`?rrD)i zAHB7gc|;OoWjYU0)sAd17~*_xJjGKYheL6ui!DRYAB!yFNG%L?vs~Vlrj)hJrHSJXsYl+( zTvk7f#6-^dJ5=K&Wm2gnj&`5>!qcE=k+a(zFH`-5nQzry%-Uxo>n>a4O0}dStk7su z5YHW(J)ssicUMaKs1LQ+5U2kc?@*WRU~OfUBK@$Z0heb1di;h2yjttA%(~?{dM*7k zR-owUdFg}u#Xj-j&T3RJoP|)4>Ed8&1ASJ&WLvOymTw?JBXSSf^$Eo9t zwZMh3yS}2N=^Jmb;0gbaN#3PdEtO1n5Z}S+-N!{YQ};{7{Q3+%!0FKOJ7(WJYlt+` z(<6eT7b%O>cLI;^O6S*&vBvDm&T)W^7}>!wm82KCfe0Iu&TU5fxM_b3f6Wf$8-uxQ ztoOQ~p9r1m(P;}E1oOgCs!^E&r$bGkg+!+9<%{(4eeUspgL9t>mYIO|-{01wUwX^& zoAXe1gGp>9r{KSGuZUdC52MaV_#)GQkPby$eFMwYxDBHK-$Bgii;4A#1N4RZ^&QXpkA!Wf%7o0R^ zoRNGo9x64MQpdjyF`>R#x5Q~txwmLsMa^!9h#?%s+7U_Q2yqR|kW|Ax6fE?%UC*)? zceH}1Kzd3}n6Ad!CE`zxOG4L`1iqiN-{5StVeY6bO{hdvZ^RejjEpJISJG;EA+pUA zyu&sbfcMR4bxEpRJnrbgFvAC;sC+HbKnyI4dj6Ht?p9o9VSn6gwf>-<27U;Tff@;{ zq2~Ho5tjWN)r)C1`+0HEH{c3=2(}cgQTbfHn9a{5U9V4@?lC4OUTr|agmgQu&)Ef? z`ELfbA1T9yky~4mvxD+nj29anx>v&5nD`3$4qxMJ_YvaOFo=`dz1_1E?TW#a{gl<3 zmN@<#Ht2Bb-JQ+R#%{;JySoCyob!YGAYS)s08yu*2}4P3G+nHa-Oo-J5%J2dqBenP z8I-(YJx=IOImx=lDvHCGL1AOU;kqpxaC*XW#zFl1nY)gLCjrUV&~A-QZK@&Zf~PxY zygp8ToU;|sScE|8@+%~hbF;BoZHb43@B6T&-ChdYW^G8AEPBCFAkYC*#fom6-^NWc znw5R+PP&O~)LhK=_;>LHe1&#~n8>rhUH$Dhh%-^U_W>$Ho*(b_4M!e-Y+5fGxPpFp z#c6n>NB3mfXK77XZr9T^ZdodHF?;SUNB|X=<&B=VFXu0a5uuwJsw}7p1o*=}@oFqp z3@l^g?1c$sa`D>__6}5dO1ouQGj#8n)#>02mouMH`gpX32hZTt2_B&w(HR;W_aV#&tJ=jQnpa59N{c|4#ZMWDMo|yK!{;Btm z*)*l6^e(XBrJA-EoU8%^>wGR$wpv^C{vOcUh4*!|As0|+1^Bt%)8OiW1Q>|E5* zLh7QIAr|Qvc`OB2sl_b+tlX>xEB};jAAqA+_6j!|fFkW%8K8pU$X8WaldFjO%{c($ z=Tw4SZGjgJ18Dqpd+tTjoPRPqKRaIOv992a!}`*azn`&k2+xL=JaW7ALLIP#tKYST z<)S;3MQ?*lg)ut5Lzb|}h0JUBPumr@P|{D><{Ft+VJVj@I?e6c+#agsh`k`h)(@dn zbYq4bgP%8c_JKjVTFFa^a!5~rnMCG)-38z@)(3rw)km*DN3-=a?_ucCOxsMrKmRa~ zXtHBKi*=X9ie-cb2uN#lx4iIJ`L`s>{Apto)9Z*k_NCuE{QFarW9?|{yzz0QEz?WB z-M`?6M>yZqD<_%Wg>w%7ZxYkhr>8{;9vi#_Ay{Do*G>=+pZ7B2BI>WaOG2OVAX~2+ z1*5HTN;pg<_ia!s+m@2xbrtB1f)jVc|LV~!;D?f7!~Lv%OrEC!^>=NfZm0WvxCeUU zTCmRwFkoWPZQda;%xBE;LqrX!racHAqv=+PtGdOGTf2UO`7MzuVZA#}HuAu*Bbt(# ztoEn5ZnM3Gp5F6!4=#&gJySx7gk@D&j=Be=WIH_Bmf+__o+35HPUqW}V~61k36D)t zl0^&N+-W2J_c6Jy;f#E!^A*e{rRk` zAZz(W2OkdHjz5Zf%Ge(b{ha61x|@Ir<_jh%S%@0=FT$gEUJdu&CLY&a%Z+Xhy^1JH zpGw+mC@ncUU-$^14Easfu+`Amuox@yf8`Zgq`EoiKclsd<^(SPF;vo~fCYG4n@g|! zuBpC`fhY*EYP0tm>qgO*?LzA^vML``NWT^gL0HlJz4rq?x|Cm8K2;&9wh;ww!NOLp z9G}UTyAkMpH$qwd&n|<4Wxt7^$qA;{Gg9uGyjv&yVpJ3&X6$=5YU_ea;XIyh0Exp@ zI!bq%L#6Rx`^*h2`fhen@-}syZvms6)>(xzz0Xj(w{v8HIp)}c%#Ok*=l5JE8+vhc zcvOlml9YzNL&3ve9SXBjG>l#3Qj8QfHmh{eUKdcu?%~D8`zv9?k=p`iEQpprK=p3m+*L=R46p6-FsfCuYP=gC=Vk5oYJoVXjEjo3YZcB*!OX zR|{^WEi?yONRWj9|& ziD`|-I6uw-4rPjRbVr9k&jcMRJ?SFVhp$>KS4~&Es<1`JvprLBQcSmF^Bi}?dkK(` z#@KAKY16AM`?#bU8s-I? zT*#XL;B_z@!$sLAD%32e_4qck`A2Gx(^b1g7HHv!bT@MGa>kMG6rd9_vc1ctgdp%- z>8%C&ONuQg#1@#mL8mAM5G(KG6ZQ#VggjtEZF zBa)8XeDN_ID&u=PMxCD$3w&hSX1wV%A#{x9YKnrz9!JP^v7TRTo*z4=QCj?}a>^US z*9^lMTm02)ooB%7ovI=c4N~KZO7#MN_z7`dWD1I}N!XTd+$|p>to=l{TM~Gb>%Tyn zJk*I|{T?*_+=su9g$hZN*X|TYvI#u)49GGltO3~PWcKw~{@a(h=?i;X7ZM6MDLek~ zx$4EZ`iSbFp#_xWyvTc4{6 zfZ?3*i3H2V_3t$V zJ}77Swrz}mT=wGr079$ZCf|CkKFl4mBT?AzY=gyMhA;tvYDfNTS=Da?xm)){*JVbZ zZ^J_MW5qCcquVq5yyi@RsDsaEz~^q!JYd9+U*pM9aN;sAHRsdPY8ql}*HNo|@)k;C zUs{>zS?lw;KkZux&u8(`avC;$o`9`P;#5S1A#R3 zZo{_O1+nJT;~7t9wnj?rVKCk2&ga{Kl#ZH{v+|OAC&> zE-=5})#n5o5R9U9)=wmPDEvESk0Ou@Ron6HDv)bG`T&5*!uCxxUm3n$2H}V)-iFu} zS?1rtRZYO_&~~8Jh${YX?Cp-{N1-mC(yMjfZ@IfIKZIO`a8MJ$)rJ7?t3p%+vu(F6 zlrQ7kAN}h`iv6WEt#3xKfzP>4f+i4vicUVIvJHicNRli$?&0^;9JZ)pGiJ lLPJdC^)X8& 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%0AGinJP;6~8`m1!;fSW)&>~_W}R9aG$4AUs1 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 IpS}4%0J5bXQ2+n{ literal 190720 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

Ye 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

4g@5l!an`l}hy(pwPbr})8H)$gMekCz&O40%} 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�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 G`~Lt32(HZl From 250c68a980cdf1272650f532aecd93f836bd3ba7 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Fri, 4 Jun 2021 16:26:12 -0700 Subject: [PATCH 28/45] Update multi-platform-rabbitmq-deployment.rst Removing reference to Datamover agent --- .../multi-platform-rabbitmq-deployment.rst | 115 ------------------ 1 file changed, 115 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index c9735fa527..ced4582b95 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -566,118 +566,3 @@ Please note that each instance should have a unique instance name. interface. If you need to rerun the federation command again for the same setup, then a fresh CSR request is made to the remote instance. The remote admin has to approve the new request as before. - -DataMover Communication ------------------------ - -The DataMover historian running on one instance makes RPC call to platform historian running on remote -instance to store data on remote instance. Platform historian agent returns response back to DataMover -agent. For such a request-response behavior, shovels need to be created on both instances. - -1. Please ensure that preliminary steps for multi-platform communication are completed (namely, - steps 1-3 described above) . - -2. To setup a data mover to send messages from local instance (say v1) to remote instance (say v2) - and back, we would need to setup shovels on both instances. - - Example of RabbitMQ shovel configuration on v1 - - .. code-block:: json - - shovel: - # hostname of remote machine - rabbit-2: - port: 5671 - certificates: - private_cert: "path to private key" # For example, /home/volttron/vhome/test_shovel/certificates/private/volttron1.shovelvolttron2.pem - public_cert: "path to public cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2.volttron1.shovelvolttron2.crt - remote_ca: "path to CA cert" # For example, /home/volttron/vhome/test_shovel/certificates/shovels/volttron2_ca.crt - rpc: - # Remote instance name - v2: - # List of pair of agent identities (local caller, remote callee) - - [data.mover, platform.historian] - virtual-host: v1 - - This says that DataMover agent on v1 wants to make RPC call to platform historian on v2. - - .. code-block:: bash - - vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] - - - Example of RabbitMQ shovel configuration on v2 - - .. code-block:: json - - shovel: - # hostname of remote machine - rabbit-1: - port: 5671 - rpc: - # Remote instance name - v1: - # List of pair of agent identities (local caller, remote callee) - - [platform.historian, data.mover] - virtual-host: v2 - - This says that platform historian on v2 wants to make RPC call to DataMover agent on v1. - - a. On v1, run below command to setup a shovel from v1 to v2. - - .. code-block:: bash - - vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] - - b. Create a user on v2 with username set to remote agent's username - ( for example, v1.data.mover i.e., .) and allow - the shovel access to the virtual host of v2. - - .. code-block:: bash - - cd $RABBITMQ_HOME - vctl rabbitmq add-user - - c. On v2, run below command to setup a shovel from v2 to v1 - - .. code-block:: bash - - vcfg rabbitmq shovel [--config optional path to rabbitmq_shovel_config.yml] [--max-retries optional maximum CSR retry attempt] - -3. Start Platform driver agent on v1 - - .. code-block:: bash - - ./stop-volttron - vcfg --agent platform_driver - ./start-volttron - vctl start --tag platform_driver - -4. Install DataMover agent on v1. Contents of the install script can look like below. - - .. code-block:: bash - - #!/bin/bash - export CONFIG=$(mktemp /tmp/abc-script.XXXXXX) - cat > $CONFIG < Date: Thu, 8 Jul 2021 16:22:36 -0700 Subject: [PATCH 29/45] When a shovel/federation is being deleted, the corresponding certs should also be deleted if there are no more shoves/federation connected to the remte host --- volttron/platform/control.py | 2 +- volttron/utils/rmq_mgmt.py | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/volttron/platform/control.py b/volttron/platform/control.py index a7c3b857f3..22ecb394ce 100644 --- a/volttron/platform/control.py +++ b/volttron/platform/control.py @@ -2376,7 +2376,7 @@ def remove_queues(opts): def remove_fed_parameters(opts): try: for param in opts.parameters: - delete_certs = _ask_yes_no('Do you wish to delete certificates as well?') + delete_certs = _ask_yes_no(f'Do you wish to delete certificates as well for {param}?') rmq_mgmt.delete_multiplatform_parameter('federation-upstream', param, delete_certs=delete_certs) except requests.exceptions.HTTPError as e: _stdout.write("No Federation Parameters Found {} \n".format(opts.parameters)) diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index a3faded69e..c089479fee 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -817,8 +817,29 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, :param vhost: virtual host :return: """ - self.delete_parameter(component, parameter_name, vhost, + shovel_names_for_host = [] + try: + self.delete_parameter(component, parameter_name, vhost, ssl_auth=self.rmq_config.is_ssl) + if component == 'shovel': + _, host, _ = parameter_name.split('-') + shovel_links = self.get_shovel_links() + shovel_names = [link['name'] for link in shovel_links] + for name in shovel_names: + _, h, _ = name.split('-') + if host == h: + shovel_names_for_host.append(name) + + # Check if there are other shovel connections to remote platform. If yes, we + # cannot delete the certs since others will need them + if delete_certs and len(shovel_names_for_host) > 1: + print(f"Cannot delete certificates since there are other shovels connected to remote host: {host}" + f" will need it for connection") + return + except AttributeError as ex: + _log.error(f"Unable to reach RabbitMQ management API. Check if RabbitMQ server is running. " + f"If not running, start the server using start-rabbitmq script in root of source directory.") + return import os vhome = get_home() @@ -840,9 +861,10 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, del config[key][names[1]]['certificates'] write_to_config_file(config_file, config) except (KeyError, IndexError) as e: - print(f"Missing key:{e}") + print(f"Error: Missing key in {config_file}:{e}") pass + # Delete certs from VOLTTRON_HOME if delete_certs and certs_config: try: private_key = certs_config['private_key'] @@ -861,10 +883,9 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, if os.path.exists(remote_ca): os.remove(remote_ca) except KeyError as e: - print("Missing Key: {e}") + print(f"Error: Missing key in {config_file}: {e}") pass - def build_connection_param(self, rmq_user, ssl_auth=None, retry_attempt=30, retry_delay=2): """ Build Pika Connection parameters From 5fcfd5d7336378476f2c8da3978b36627e5ab32a Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 8 Jul 2021 17:12:47 -0700 Subject: [PATCH 30/45] Updating documention --- .../multi-platform-rabbitmq-deployment.rst | 48 +++++++------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index ced4582b95..7b704432a5 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -4,7 +4,8 @@ Multi-platform RabbitMQ Deployment ================================== -With ZeroMQ based VOLTTRON, multi-platform communication was accomplished in three different ways: +With ZeroMQ based VOLTTRON, multi-platform communication was accomplished in three different ways described below. +Similar behavior can be accomplished with RabbitMQ-VOLTTRON as well. #. Direct connection to remote instance - Write an agent that would connect to a remote instance directly. @@ -17,7 +18,6 @@ With ZeroMQ based VOLTTRON, multi-platform communication was accomplished in thr and take care of the message routing for us. In RabbitMQ-VOLTTRON, we make use of the :ref:`Federation Plugin ` to achieve this behavior. - Terminology ----------- @@ -26,6 +26,22 @@ The upstream server is the node that is publishing some message of interest; we The downstream server is the node that will receive messages from the upstream server; we shall refer to this node as the subscriber node. Note that upstream server & publisher node and downstream server & subscriber node will be used interchangeably for the rest of this guide. +Multi-Platform Communication With RabbitMQ SSL +========================================================= +RabbitMQ-VOLTTRON uses SSL based authentication for connection to the platform. This feature is extended to connection +between multiple VOLTTRON platforms. The below figure shows the + +.. image:: files/multiplatform_ssl.png + +Suppose there are two virtual machines (VOLTTRON1 and VOLTTRON2) running single instances of RabbitMQ; VOLTTRON1 and VOLTTRON2 +want to talk to each other via the federation or shovel plugins. For shovel/federation to have authenticated connection to the +remote instance, it needs to have it's public certificate signed by the remote instance's CA. So as part of the shovel +or federation creation steps, a certificate signing request is made to the remote instance. The admin of the remote instance +should be ready to accept/reject such a request through VOLTTRON's admin web interface. To facilitate this process, the +VOLTTRON platform exposes a web-based server API for requesting, listing, approving, and denying certificate requests. For +more detailed description, refer to :ref:`Agent communication to Remote RabbitMQ instance `. +After the CSR request is accepted, an authenticated shovel/federation connection can be established. + Using the Federation Plugin --------------------------- @@ -132,22 +148,6 @@ VOLTTRON instance "volttron2" on host "host_B". First, a federation link needs .. _RabbitMQ-Multi-platform-SSL: -Multi-Platform Federation Communication With RabbitMQ SSL -========================================================= - -For multi-platform communication over federation, we need the connecting instances to trust each other. - -.. image:: files/multiplatform_ssl.png - -Suppose there are two virtual machines (VOLTTRON1 and VOLTTRON2) running single instances of RabbitMQ; VOLTTRON1 and VOLTTRON2 -want to talk to each other via the federation or shovel plugins. For shovel/federation to have authenticated connection to the -remote instance, it needs to have it's public certificate signed by the remote instance's CA. So as part of the shovel -or federation creation steps, a certificate signing request is made to the remote instance. The admin of the remote instance -should be ready to accept/reject such a request through VOLTTRON's admin web interface. To facilitate this process, the -VOLTTRON platform exposes a web-based server API for requesting, listing, approving, and denying certificate requests. For -more detailed description, refer to :ref:`Agent communication to Remote RabbitMQ instance `. -After the CSR request is accepted, an authenticated shovel/federation connection can be established. - Installation Steps ------------------ @@ -220,18 +220,6 @@ upstream servers on the downstream server and make the VOLTTRON exchange volttron2.volttron1.federation 172.20.0.2 APPROVED - c. Create a user in the upstream server (publisher) and provide it access to the virtual host of the upstream RabbitMQ server. - The username should take the form of .federation. - For example, if the downstream server name is "volttron1", and instance of local instance is "volttron2" then the instance name would be "volttron2.volttron1.federation". - Run the below command in the upstream server - - .. code-block:: bash - - vctl rabbitmq add-user - Do you want to set READ permission [Y/n] - Do you want to set WRITE permission [Y/n] - Do you want to set CONFIGURE permission [Y/n] - 5. Test the federation setup. a. On the downstream server run a listener agent which subscribes to messages from all platforms From 12f33a548100bcd599018c451e3df436d0b6bfad Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 9 Jul 2021 09:30:41 -0700 Subject: [PATCH 31/45] Adding more documentation info --- .../multi-platform-rabbitmq-deployment.rst | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 7b704432a5..90e786a7bb 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -18,6 +18,7 @@ Similar behavior can be accomplished with RabbitMQ-VOLTTRON as well. and take care of the message routing for us. In RabbitMQ-VOLTTRON, we make use of the :ref:`Federation Plugin ` to achieve this behavior. + Terminology ----------- @@ -27,9 +28,10 @@ The downstream server is the node that will receive messages from the upstream s Note that upstream server & publisher node and downstream server & subscriber node will be used interchangeably for the rest of this guide. Multi-Platform Communication With RabbitMQ SSL -========================================================= +---------------------------------------------- RabbitMQ-VOLTTRON uses SSL based authentication for connection to the platform. This feature is extended to connection -between multiple VOLTTRON platforms. The below figure shows the +between multiple VOLTTRON platforms. The below figure shows the 2 remote VOLTTRON platforms can establish authentication +connection to the other. .. image:: files/multiplatform_ssl.png @@ -46,6 +48,10 @@ After the CSR request is accepted, an authenticated shovel/federation connection Using the Federation Plugin --------------------------- +.. note:: + Please make sure that a single instance of RabbitMQ VOLTTRON is setup before attempting to create a federation link + :ref:`platform installation steps for RMQ ` + Connecting multiple VOLTTRON instances can be done using the federation plugin. To create a RabbitMQ federation, we have to configure the downstream volttron instance to create federated exchange. A federated exchange links to other exchanges. In this case, the downstream federated exchange links to the upstream exchange. Conceptually, messages published to the @@ -92,7 +98,7 @@ Multi-Platform RPC With Federation ---------------------------------- For multi-platform RPC communication, federation links need to be established on both the VOLTTRON -nodes. Once the federation links are established, RPC communication becomes fairly simple. +nodes. Once the federation links are established, RPC communication becomes fairly simple. .. image:: files/multiplatform_rpc.png @@ -292,6 +298,10 @@ upstream servers on the downstream server and make the VOLTTRON exchange Using the Shovel Plugin ----------------------- +.. note:: + Please make sure that a single instance of RabbitMQ VOLTTRON is setup before attempting to create a shovel link + :ref:`platform installation steps for RMQ `. + Shovels act as well-written client applications which move messages from a source to a destination broker. The below configuration shows how to setup a shovel to forward PubSub messages or perform multi-platform RPC communication from a local (i.e. publisher node) to a remote instance (i.e. subscriber node). The configuration expects `hostname`, `port` and From ac844943e64f6af2038fb4ad838ea26aa6be246e Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Mon, 12 Jul 2021 11:38:52 -0700 Subject: [PATCH 32/45] Fixed more problems related to deletion --- .../multi-platform-rabbitmq-deployment.rst | 9 ----- volttron/platform/instance_setup.py | 4 +++ volttron/utils/rmq_config_params.py | 8 ++--- volttron/utils/rmq_mgmt.py | 35 +++++++++---------- 4 files changed, 25 insertions(+), 31 deletions(-) diff --git a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst index 90e786a7bb..fe2943c6b4 100644 --- a/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst +++ b/docs/source/deploying-volttron/multi-platform/multi-platform-rabbitmq-deployment.rst @@ -496,15 +496,6 @@ Please note that each instance should have a unique instance name. .. image:: files/csr_accepted.png - c. Create a user in the subscriber node with username set to the publisher instance's - agent name (for example: volttron1-admin) and allow the shovel access to - the virtual host of the subscriber node. - - .. code-block:: bash - - cd $RABBITMQ_HOME - vctl rabbitmq add-user - 4. Test the shovel setup. a. Start VOLTTRON on publisher and subscriber nodes. diff --git a/volttron/platform/instance_setup.py b/volttron/platform/instance_setup.py index 4c0ee76b49..4f24a684cb 100644 --- a/volttron/platform/instance_setup.py +++ b/volttron/platform/instance_setup.py @@ -966,6 +966,8 @@ def process_rmq_inputs(args_dict, instance_name=None): default='N') if prompt in n: copy(args_dict['config'], vhome_config) + else: + r = copy(args_dict['config'], vhome_config) elif args_dict['installation-type'] == 'shovel': vhome_config = os.path.join(vhome, 'rabbitmq_shovel_config.yml') if os.path.exists(vhome_config): @@ -977,6 +979,8 @@ def process_rmq_inputs(args_dict, instance_name=None): default='N') if prompt in n: copy(args_dict['config'], vhome_config) + else: + r = copy(args_dict['config'], vhome_config) else: print("Invalid installation type. Acceptable values single|federation|shovel") sys.exit(1) diff --git a/volttron/utils/rmq_config_params.py b/volttron/utils/rmq_config_params.py index d801ece8fd..554eaa4023 100644 --- a/volttron/utils/rmq_config_params.py +++ b/volttron/utils/rmq_config_params.py @@ -58,9 +58,9 @@ def read_config_file(filename): with open(filename, 'r') as yaml_file: data = yaml.safe_load(yaml_file) except IOError as exc: - _log.error("Error reading from file: {}".format(filename)) + _log.error(f"Error reading from file: {filename}, Exception: {exc}") except yaml.YAMLError as exc: - _log.error("Yaml Error: {}".format(filename)) + _log.error(f"Yaml Error: {filename}. Exception: {exc}") return data @@ -69,9 +69,9 @@ def write_to_config_file(filename, data): with open(filename, 'w') as yaml_file: yaml.dump(data, yaml_file, default_flow_style=False) except IOError as exc: - _log.error("Error writing to file: {}".format(filename)) + _log.error(f"Error writing to file: {filename}. Exception: {exc}") except yaml.YAMLError as exc: - _log.error("Yaml Error: {}".format(filename)) + _log.error(f"Yaml Error: {filename}. Exception: {exc}") class RMQConfig(object): diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index c089479fee..5ff9894253 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -818,9 +818,11 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, :return: """ shovel_names_for_host = [] - try: - self.delete_parameter(component, parameter_name, vhost, + self.delete_parameter(component, parameter_name, vhost, ssl_auth=self.rmq_config.is_ssl) + print(f"Deleted {component} parameter: {parameter_name}") + + try: if component == 'shovel': _, host, _ = parameter_name.split('-') shovel_links = self.get_shovel_links() @@ -829,10 +831,9 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, _, h, _ = name.split('-') if host == h: shovel_names_for_host.append(name) - # Check if there are other shovel connections to remote platform. If yes, we # cannot delete the certs since others will need them - if delete_certs and len(shovel_names_for_host) > 1: + if delete_certs and len(shovel_names_for_host) >= 1: print(f"Cannot delete certificates since there are other shovels connected to remote host: {host}" f" will need it for connection") return @@ -851,21 +852,19 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, key = 'federation-upstream' config = read_config_file(config_file) - print(f"Removing certificate paths from VOLTTRON_HOME and from the config file") - - names = parameter_name.split("-") - - certs_config = None - try: - certs_config = config[key][names[1]]['certificates'] - del config[key][names[1]]['certificates'] - write_to_config_file(config_file, config) - except (KeyError, IndexError) as e: - print(f"Error: Missing key in {config_file}:{e}") - pass - # Delete certs from VOLTTRON_HOME - if delete_certs and certs_config: + if delete_certs: + print(f"Removing certificate paths from VOLTTRON_HOME and from the config file") + names = parameter_name.split("-") + + certs_config = None + try: + certs_config = config[key][names[1]]['certificates'] + del config[key][names[1]]['certificates'] + write_to_config_file(config_file, config) + except (KeyError, IndexError) as e: + print(f"Error: Did not find certificates entry in {config_file}:{e}") + return try: private_key = certs_config['private_key'] public_cert = certs_config['public_cert'] From f7047823a607a557773f69e02b9ba8d74dd458b4 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Wed, 14 Jul 2021 12:22:55 -0700 Subject: [PATCH 33/45] Added link to volttron publications --- docs/source/developing-volttron/community.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/developing-volttron/community.rst b/docs/source/developing-volttron/community.rst index d8fd8e1bf1..05f32dde04 100644 --- a/docs/source/developing-volttron/community.rst +++ b/docs/source/developing-volttron/community.rst @@ -44,5 +44,10 @@ available through a Zoom meeting. To be invited to the link meeting, contact the Meetings are recorded and can be reviewed `here `__. +Publications +============ + +VOLTTRON white papers and technical reports can be found at https://volttron.org/publications + .. |VOLTTRON| unicode:: VOLTTRON U+2122 From bd98d5ecf0f52b1bbef88da9c113db6b83d2753e Mon Sep 17 00:00:00 2001 From: "C. Allwardt" Date: Thu, 15 Jul 2021 00:21:45 -0700 Subject: [PATCH 34/45] Added .gitattributes file for line endings --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..182dcf65e8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Handles CLRF/RF EOL issue +* text=auto \ No newline at end of file From bc9e6efc4f452047bf8fb3ff3b9ed9f3521e29bc Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 15 Jul 2021 10:56:56 -0700 Subject: [PATCH 35/45] Fixed testcases for file watcher, log statistics and sysmon --- .../Tests/test_file_watcher.py | 60 +++++++++---------- .../Tests/test_log_statistics.py | 56 +++++++++-------- .../ops/SysMonAgent/tests/test_sysmonagent.py | 5 +- 3 files changed, 65 insertions(+), 56 deletions(-) diff --git a/services/ops/FileWatchPublisher/Tests/test_file_watcher.py b/services/ops/FileWatchPublisher/Tests/test_file_watcher.py index 8e5493c5f3..4250402487 100644 --- a/services/ops/FileWatchPublisher/Tests/test_file_watcher.py +++ b/services/ops/FileWatchPublisher/Tests/test_file_watcher.py @@ -46,26 +46,12 @@ from volttron.platform import get_ops, get_home from volttron.platform.vip.agent import Agent -test_path = os.path.join(get_home(), "test.txt") - -test_config = { - "files": [ - { - "file": test_path, - "topic": "platform/test_topic" - } - ] -} - @pytest.fixture(scope="module") def publish_agent(request, volttron_instance): # 1: Start a fake agent to publish to message bus agent = volttron_instance.build_agent(identity='test-agent') - with open(test_path, "w") as textfile: - textfile.write("test_data") - agent.callback = MagicMock(name="callback") agent.callback.reset_mock() @@ -75,7 +61,6 @@ def stop_agent(): print("In teardown method of publish_agent") if isinstance(agent, Agent): agent.core.stop() - os.remove(test_path) request.addfinalizer(stop_agent) return agent @@ -98,18 +83,33 @@ def test_default_config(volttron_instance, publish_agent): volttron_instance.remove_agent(watcher_uuid) -# def test_file_watcher(volttron_instance, publish_agent): -# watcher_uuid = volttron_instance.install_agent( -# agent_dir=get_ops("FileWatchPublisher"), -# config_file=test_config, -# start=True, -# vip_identity="health_test") -# -# with open(test_path, "w+") as textfile: -# textfile.write("more test_data") -# -# gevent.sleep(1) -# -# assert publish_agent.callback.call_count == 1 -# print(publish_agent.callback.call_args) -# volttron_instance.remove_agent(watcher_uuid) +def test_file_watcher(volttron_instance, publish_agent): + test_path = os.path.join(get_home(), "test.txt") + + with open(test_path, "w") as textfile: + textfile.write("test_data") + + test_config = { + "files": [ + { + "file": test_path, + "topic": "platform/test_topic" + } + ] + } + + watcher_uuid = volttron_instance.install_agent( + agent_dir=get_ops("FileWatchPublisher"), + config_file=test_config, + start=True, + vip_identity="health_test") + + with open(test_path, "w+") as textfile: + textfile.write("more test_data") + + gevent.sleep(1) + + assert publish_agent.callback.call_count == 1 + print(publish_agent.callback.call_args) + volttron_instance.remove_agent(watcher_uuid) + os.remove(test_path) diff --git a/services/ops/LogStatisticsAgent/Tests/test_log_statistics.py b/services/ops/LogStatisticsAgent/Tests/test_log_statistics.py index 8aeeeeee65..284cbd58c2 100644 --- a/services/ops/LogStatisticsAgent/Tests/test_log_statistics.py +++ b/services/ops/LogStatisticsAgent/Tests/test_log_statistics.py @@ -45,25 +45,29 @@ from volttron.platform.vip.agent import Agent from volttron.platform import get_ops, get_home -# TODO fix finding test logs test_config = { - "file_path": os.path.join(get_home(), "volttron.log"), "analysis_interval_sec": 2, "publish_topic": "platform/log_statistics", "historian_topic": "analysis/log_statistics" } - @pytest.fixture(scope="module") def publish_agent(request, volttron_instance): + test_config = { + "file_path": os.path.join(volttron_instance.volttron_home, "volttron.log"), + "analysis_interval_sec": 2, + "publish_topic": "platform/log_statistics", + "historian_topic": "analysis/log_statistics" + } # 1: Start a fake agent to publish to message bus agent = volttron_instance.build_agent() - publish_agent.callback = MagicMock(name="callback") - publish_agent.callback.reset_mock() + agent.callback = MagicMock(name="callback") + agent.callback.reset_mock() - agent.vip.pubsub.subscribe(peer='pubsub', prefix=test_config.get("publish_topic"), - callback=publish_agent.callback).get() + agent.vip.pubsub.subscribe(peer='pubsub', + prefix=test_config.get("publish_topic"), + callback=agent.callback).get() def stop_agent(): print("In teardown method of publish_agent") @@ -91,20 +95,24 @@ def test_default_config(volttron_instance, publish_agent): volttron_instance.remove_agent(stats_uuid) -# def test_log_stats(volttron_instance, publish_agent): -# stats_uuid = volttron_instance.install_agent( -# agent_dir=get_ops("LogStatisticsAgent"), -# config_file=test_config, -# start=True, -# vip_identity="health_test") -# -# gevent.sleep(1) -# -# # building another agent should populate the logs -# volttron_instance.build_agent(identity="log_populate") -# -# gevent.sleep(2) -# -# # TODO do mock asserts -# -# volttron_instance.remove_agent(stats_uuid) +def test_log_stats(volttron_instance, publish_agent): + test_config["file_path"] = volttron_instance.log_path + print(f"File path: {test_config['file_path']}") + + stats_uuid = volttron_instance.install_agent( + agent_dir=get_ops("LogStatisticsAgent"), + config_file=test_config, + start=True, + vip_identity="health_test") + + import gevent + gevent.sleep(1) + + # building another agent should populate the logs + volttron_instance.build_agent(identity="log_populate") + + gevent.sleep(1) + + assert publish_agent.callback.call_count >= 1 + + volttron_instance.remove_agent(stats_uuid) diff --git a/services/ops/SysMonAgent/tests/test_sysmonagent.py b/services/ops/SysMonAgent/tests/test_sysmonagent.py index be405c835e..8cc07cf5f0 100644 --- a/services/ops/SysMonAgent/tests/test_sysmonagent.py +++ b/services/ops/SysMonAgent/tests/test_sysmonagent.py @@ -102,8 +102,8 @@ def add_topic(peer, sender, bus, topic, headers, messages): agent.vip.pubsub.subscribe('pubsub', base_topic, callback=add_topic) - max_wait = 1 + max(value for key, value in _test_config.items() if key.endswith('_interval')) - + max_wait = 1 + max(value for key, value in _test_config.items() if key.endswith('_interval')) + 8 + print(f"Max wait: {max_wait}, topics: {topics}, seen_topics: {seen_topics}") assert poll_gevent_sleep(max_wait, lambda: set(topics) <= seen_topics) @@ -124,6 +124,7 @@ def test_reconfigure_then_listen(sysmon_tester_agent): listen(sysmon_tester_agent, new_config) +@pytest.mark.dev def test_default_config(sysmon_tester_agent): """ Test that the topic can be reconfigured From d2876dad4f27319c537fcbf998cdc4d89a3ece55 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Thu, 15 Jul 2021 18:29:06 -0700 Subject: [PATCH 36/45] Added is_web_available() to check web packages are installed --- .../TopicWatcher/tests/test_remote_topic_watcher.py | 1 + volttron/platform/__init__.py | 11 +++++++++++ volttron/platform/main.py | 6 +++--- .../fixtures/volttron_platform_fixtures.py | 7 +++++-- volttrontesting/utils/platformwrapper.py | 2 +- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/services/ops/TopicWatcher/tests/test_remote_topic_watcher.py b/services/ops/TopicWatcher/tests/test_remote_topic_watcher.py index 84c0704b99..1dcb30e142 100644 --- a/services/ops/TopicWatcher/tests/test_remote_topic_watcher.py +++ b/services/ops/TopicWatcher/tests/test_remote_topic_watcher.py @@ -182,4 +182,5 @@ def onmessage(peer, sender, bus, topic, headers, message): u"Topic(s) not published within time limit: [('fakedevice2/all', 'point'), " \ u"'fakedevice2/all', 'fakedevice']" in \ alert_messages + alert_messages.clear() diff --git a/volttron/platform/__init__.py b/volttron/platform/__init__.py index 38097b710c..2ade1daebc 100644 --- a/volttron/platform/__init__.py +++ b/volttron/platform/__init__.py @@ -213,6 +213,17 @@ def is_rabbitmq_available(): return rabbitmq_available +def is_web_available(): + web_available = True + try: + import jwt + from jinja2 import Environment, FileSystemLoader, select_autoescape + from ws4py.server.geventserver import WSGIServer + except ImportError: + web_available = False + return web_available + + __config__ = None diff --git a/volttron/platform/main.py b/volttron/platform/main.py index f81db6f07f..c4baa43646 100644 --- a/volttron/platform/main.py +++ b/volttron/platform/main.py @@ -963,7 +963,6 @@ def rmq_router(stop): del event protected_topics = auth.get_protected_topics() - # Spawn Greenlet friendly ZMQ router # Necessary for backward compatibility with ZMQ message bus green_router = GreenRouter(opts.vip_local_address, opts.vip_address, @@ -1029,7 +1028,6 @@ def rmq_router(stop): enable_store=False, message_bus='zmq') ] - entry = AuthEntry(credentials=services[0].core.publickey, user_id=CONTROL, capabilities=[{'edit_config_store': {'identity': '/.*/'}}, @@ -1040,6 +1038,7 @@ def rmq_router(stop): # Begin the webserver based options here. if opts.bind_web_address is not None: if not HAS_WEB: + _log.info(f"Web libraries not installed, but bind web address specified\n") sys.stderr.write("Web libraries not installed, but bind web address specified\n") sys.stderr.write("Please install web libraries using python3 bootstrap.py --web\n") sys.exit(-1) @@ -1050,6 +1049,7 @@ def rmq_router(stop): if opts.message_bus == 'rmq': if opts.web_ssl_key is None or opts.web_ssl_cert is None or \ (not os.path.isfile(opts.web_ssl_key) and not os.path.isfile(opts.web_ssl_cert)): + _log.info(f"web_ssl_key/web_ssl_cert") # This is different than the master.web cert which is used for the agent to connect # to rmq server. The master.web-server certificate will be used for the platform web # services. @@ -1090,7 +1090,6 @@ def rmq_router(stop): # capabilities=['allow_auth_modifications'], # comments='Automatically added by platform on start') # AuthFile().add(entry, overwrite=True) - health_service = HealthService(address=address, identity=PLATFORM_HEALTH, heartbeat_autostart=True, enable_store=False, @@ -1114,6 +1113,7 @@ def rmq_router(stop): # Done with all start up process write a PID file + _log.info(f"Writing to PID file: {pid_file}") with open(pid_file, 'w+') as f: f.write(str(os.getpid())) diff --git a/volttrontesting/fixtures/volttron_platform_fixtures.py b/volttrontesting/fixtures/volttron_platform_fixtures.py index d9450f5459..94b3430c45 100644 --- a/volttrontesting/fixtures/volttron_platform_fixtures.py +++ b/volttrontesting/fixtures/volttron_platform_fixtures.py @@ -7,7 +7,7 @@ import psutil import pytest -from volttron.platform import is_rabbitmq_available +from volttron.platform import is_rabbitmq_available, is_web_available from volttron.platform import update_platform_config from volttron.utils import get_random_key from volttrontesting.fixtures.cert_fixtures import certs_profile_1 @@ -17,9 +17,12 @@ PRINT_LOG_ON_SHUTDOWN = False HAS_RMQ = is_rabbitmq_available() +HAS_WEB = is_web_available() + ci_skipif = pytest.mark.skipif(os.getenv('CI', None) == 'true', reason='SSL does not work in CI') rmq_skipif = pytest.mark.skipif(not HAS_RMQ, reason='RabbitMQ is not setup and/or SSL does not work in CI') +web_skipif = pytest.mark.skipif(not HAS_WEB, reason='Web libraries are not installed') def print_log(volttron_home): @@ -270,7 +273,7 @@ def volttron_instance_web(request): @pytest.fixture(scope="module", params=[ - dict(sink='zmq_web', source='zmq', zmq_ssl=False), + pytest.param(dict(sink='zmq_web', source='zmq', zmq_ssl=False), marks=web_skipif), pytest.param(dict(sink='zmq_web', source='zmq', zmq_ssl=True), marks=ci_skipif), pytest.param(dict(sink='rmq_web', source='zmq', zmq_ssl=False), marks=rmq_skipif), pytest.param(dict(sink='rmq_web', source='rmq', zmq_ssl=False), marks=rmq_skipif), diff --git a/volttrontesting/utils/platformwrapper.py b/volttrontesting/utils/platformwrapper.py index bce25595a9..ff0027b0f6 100644 --- a/volttrontesting/utils/platformwrapper.py +++ b/volttrontesting/utils/platformwrapper.py @@ -613,7 +613,7 @@ def startup_platform(self, vip_address, auth_dict=None, msgdebug=False, setupmode=False, agent_monitor_frequency=600, - timeout=60, + timeout=120, # Allow the AuthFile to be preauthenticated with keys for service agents. perform_preauth_service_agents=True): From 841442e1a92c66ad5e92c675bb66a5eb3f5f7d79 Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Fri, 16 Jul 2021 09:23:08 -0700 Subject: [PATCH 37/45] Update main.py Removed debug logs --- volttron/platform/main.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/volttron/platform/main.py b/volttron/platform/main.py index c4baa43646..c22a164543 100644 --- a/volttron/platform/main.py +++ b/volttron/platform/main.py @@ -1049,7 +1049,6 @@ def rmq_router(stop): if opts.message_bus == 'rmq': if opts.web_ssl_key is None or opts.web_ssl_cert is None or \ (not os.path.isfile(opts.web_ssl_key) and not os.path.isfile(opts.web_ssl_cert)): - _log.info(f"web_ssl_key/web_ssl_cert") # This is different than the master.web cert which is used for the agent to connect # to rmq server. The master.web-server certificate will be used for the platform web # services. @@ -1113,7 +1112,6 @@ def rmq_router(stop): # Done with all start up process write a PID file - _log.info(f"Writing to PID file: {pid_file}") with open(pid_file, 'w+') as f: f.write(str(os.getpid())) From 28222e9c9d12470bee4b8b6f612f5c7133368f10 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 16 Jul 2021 09:54:22 -0700 Subject: [PATCH 38/45] fixed paremeter issue --- volttron/utils/rmq_mgmt.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 5ff9894253..46458bd718 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -824,18 +824,20 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, try: if component == 'shovel': - _, host, _ = parameter_name.split('-') + parameter_parts = parameter_name.split('-') shovel_links = self.get_shovel_links() shovel_names = [link['name'] for link in shovel_links] + print(f"shovel names : {shovel_names}") + print(f"shovel links: {shovel_links}") for name in shovel_names: - _, h, _ = name.split('-') - if host == h: + name_parts = name.split('-') + if parameter_parts[1] == name_parts[1]: shovel_names_for_host.append(name) # Check if there are other shovel connections to remote platform. If yes, we # cannot delete the certs since others will need them if delete_certs and len(shovel_names_for_host) >= 1: - print(f"Cannot delete certificates since there are other shovels connected to remote host: {host}" - f" will need it for connection") + print(f"Cannot delete certificates since there are other shovels " + f"connected to remote host: {parameter_parts[1]}") return except AttributeError as ex: _log.error(f"Unable to reach RabbitMQ management API. Check if RabbitMQ server is running. " From 1da6ec395999226eb171f41aded66a06facee2fd Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 16 Jul 2021 10:00:43 -0700 Subject: [PATCH 39/45] Removed debug statement --- volttron/utils/rmq_mgmt.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/volttron/utils/rmq_mgmt.py b/volttron/utils/rmq_mgmt.py index 46458bd718..657e0ed0bf 100644 --- a/volttron/utils/rmq_mgmt.py +++ b/volttron/utils/rmq_mgmt.py @@ -827,8 +827,6 @@ def delete_multiplatform_parameter(self, component, parameter_name, vhost=None, parameter_parts = parameter_name.split('-') shovel_links = self.get_shovel_links() shovel_names = [link['name'] for link in shovel_links] - print(f"shovel names : {shovel_names}") - print(f"shovel links: {shovel_links}") for name in shovel_names: name_parts = name.split('-') if parameter_parts[1] == name_parts[1]: From 86a3621d10908e7a2e5ffd58f238206d3d999b39 Mon Sep 17 00:00:00 2001 From: shwetha niddodi Date: Fri, 16 Jul 2021 16:00:38 -0700 Subject: [PATCH 40/45] Moved MessageDebuggerAgent to services/contrib --- services/{ops => contrib}/MessageDebuggerAgent/IDENTITY | 0 services/{ops => contrib}/MessageDebuggerAgent/README.md | 0 services/{ops => contrib}/MessageDebuggerAgent/conftest.py | 0 .../MessageDebuggerAgent/messagedebugger.config | 0 .../MessageDebuggerAgent/messagedebugger/__init__.py | 0 .../MessageDebuggerAgent/messagedebugger/agent.py | 0 .../MessageDebuggerAgent/messageviewer/__init__.py | 0 .../MessageDebuggerAgent/messageviewer/viewer.py | 0 services/{ops => contrib}/MessageDebuggerAgent/requirements.txt | 0 services/{ops => contrib}/MessageDebuggerAgent/setup.py | 0 .../MessageDebuggerAgent/tests/sqlalchemy_dry_run.py | 0 .../MessageDebuggerAgent/tests/test_message_debugging.py | 2 +- 12 files changed, 1 insertion(+), 1 deletion(-) rename services/{ops => contrib}/MessageDebuggerAgent/IDENTITY (100%) rename services/{ops => contrib}/MessageDebuggerAgent/README.md (100%) rename services/{ops => contrib}/MessageDebuggerAgent/conftest.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/messagedebugger.config (100%) rename services/{ops => contrib}/MessageDebuggerAgent/messagedebugger/__init__.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/messagedebugger/agent.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/messageviewer/__init__.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/messageviewer/viewer.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/requirements.txt (100%) rename services/{ops => contrib}/MessageDebuggerAgent/setup.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/tests/sqlalchemy_dry_run.py (100%) rename services/{ops => contrib}/MessageDebuggerAgent/tests/test_message_debugging.py (99%) diff --git a/services/ops/MessageDebuggerAgent/IDENTITY b/services/contrib/MessageDebuggerAgent/IDENTITY similarity index 100% rename from services/ops/MessageDebuggerAgent/IDENTITY rename to services/contrib/MessageDebuggerAgent/IDENTITY diff --git a/services/ops/MessageDebuggerAgent/README.md b/services/contrib/MessageDebuggerAgent/README.md similarity index 100% rename from services/ops/MessageDebuggerAgent/README.md rename to services/contrib/MessageDebuggerAgent/README.md diff --git a/services/ops/MessageDebuggerAgent/conftest.py b/services/contrib/MessageDebuggerAgent/conftest.py similarity index 100% rename from services/ops/MessageDebuggerAgent/conftest.py rename to services/contrib/MessageDebuggerAgent/conftest.py diff --git a/services/ops/MessageDebuggerAgent/messagedebugger.config b/services/contrib/MessageDebuggerAgent/messagedebugger.config similarity index 100% rename from services/ops/MessageDebuggerAgent/messagedebugger.config rename to services/contrib/MessageDebuggerAgent/messagedebugger.config diff --git a/services/ops/MessageDebuggerAgent/messagedebugger/__init__.py b/services/contrib/MessageDebuggerAgent/messagedebugger/__init__.py similarity index 100% rename from services/ops/MessageDebuggerAgent/messagedebugger/__init__.py rename to services/contrib/MessageDebuggerAgent/messagedebugger/__init__.py diff --git a/services/ops/MessageDebuggerAgent/messagedebugger/agent.py b/services/contrib/MessageDebuggerAgent/messagedebugger/agent.py similarity index 100% rename from services/ops/MessageDebuggerAgent/messagedebugger/agent.py rename to services/contrib/MessageDebuggerAgent/messagedebugger/agent.py diff --git a/services/ops/MessageDebuggerAgent/messageviewer/__init__.py b/services/contrib/MessageDebuggerAgent/messageviewer/__init__.py similarity index 100% rename from services/ops/MessageDebuggerAgent/messageviewer/__init__.py rename to services/contrib/MessageDebuggerAgent/messageviewer/__init__.py diff --git a/services/ops/MessageDebuggerAgent/messageviewer/viewer.py b/services/contrib/MessageDebuggerAgent/messageviewer/viewer.py similarity index 100% rename from services/ops/MessageDebuggerAgent/messageviewer/viewer.py rename to services/contrib/MessageDebuggerAgent/messageviewer/viewer.py diff --git a/services/ops/MessageDebuggerAgent/requirements.txt b/services/contrib/MessageDebuggerAgent/requirements.txt similarity index 100% rename from services/ops/MessageDebuggerAgent/requirements.txt rename to services/contrib/MessageDebuggerAgent/requirements.txt diff --git a/services/ops/MessageDebuggerAgent/setup.py b/services/contrib/MessageDebuggerAgent/setup.py similarity index 100% rename from services/ops/MessageDebuggerAgent/setup.py rename to services/contrib/MessageDebuggerAgent/setup.py diff --git a/services/ops/MessageDebuggerAgent/tests/sqlalchemy_dry_run.py b/services/contrib/MessageDebuggerAgent/tests/sqlalchemy_dry_run.py similarity index 100% rename from services/ops/MessageDebuggerAgent/tests/sqlalchemy_dry_run.py rename to services/contrib/MessageDebuggerAgent/tests/sqlalchemy_dry_run.py diff --git a/services/ops/MessageDebuggerAgent/tests/test_message_debugging.py b/services/contrib/MessageDebuggerAgent/tests/test_message_debugging.py similarity index 99% rename from services/ops/MessageDebuggerAgent/tests/test_message_debugging.py rename to services/contrib/MessageDebuggerAgent/tests/test_message_debugging.py index 6785acb561..9d2dd3879f 100644 --- a/services/ops/MessageDebuggerAgent/tests/test_message_debugging.py +++ b/services/contrib/MessageDebuggerAgent/tests/test_message_debugging.py @@ -82,7 +82,7 @@ class TestMessageDebugger: Regression tests for the MessageDebuggerAgent. """ - # @pytest.mark.skip(reason="Dependency on SQLAlchemy library") + @pytest.mark.skip(reason="Community contributed agent") def test_rpc_calls(self, agent): """Test the full range of RPC calls to the MessageDebuggerAgent, except those related to streaming.""" From be060722ed49f53b33b3a24ce1c2b13daba9dfdb Mon Sep 17 00:00:00 2001 From: Shwetha Niddodi Date: Fri, 16 Jul 2021 16:05:53 -0700 Subject: [PATCH 41/45] Update platformwrapper.py --- volttrontesting/utils/platformwrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/volttrontesting/utils/platformwrapper.py b/volttrontesting/utils/platformwrapper.py index ff0027b0f6..bce25595a9 100644 --- a/volttrontesting/utils/platformwrapper.py +++ b/volttrontesting/utils/platformwrapper.py @@ -613,7 +613,7 @@ def startup_platform(self, vip_address, auth_dict=None, msgdebug=False, setupmode=False, agent_monitor_frequency=600, - timeout=120, + timeout=60, # Allow the AuthFile to be preauthenticated with keys for service agents. perform_preauth_service_agents=True): From 4f0b1a599126b9215500884d0b45d0f5aabea623 Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 09:27:18 -0700 Subject: [PATCH 42/45] Returns user to login page if admin access token times out --- volttron/platform/web/admin_endpoints.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 7dc7884a9e..2f1c5e0cc3 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -41,7 +41,10 @@ import re from urllib.parse import parse_qs +import jwt + from volttron.platform.agent.known_identities import PLATFORM_WEB, AUTH +from volttron.platform.jsonrpc import RemoteError try: from jinja2 import Environment, FileSystemLoader, select_autoescape, TemplateNotFound @@ -157,9 +160,14 @@ def verify_and_dispatch(self, env, data): from volttron.platform.web import get_bearer, NotAuthorized try: claims = self._rpc_caller(PLATFORM_WEB, 'get_user_claims', get_bearer(env)).get() - except NotAuthorized: - _log.error("Unauthorized user attempted to connect to {}".format(env.get('PATH_INFO'))) - return Response('

Unauthorized User

', status="401 Unauthorized") + except RemoteError as e: + if "ExpiredSignatureError" in e.exc_info["exc_type"]: + _log.warn("Access token has expired! Please re-login to renew.") + template = template_env(env).get_template('login.html') + _log.debug("Login.html: {}".format(env.get('PATH_INFO'))) + return Response(template.render(), content_type='text/html') + else: + _log.error(e) # Make sure we have only admins for viewing this. if 'admin' not in claims.get('groups'): From 51d511a55c9252654cc5ace26008f9fabb792544 Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 09:42:37 -0700 Subject: [PATCH 43/45] update warn to warning. --- volttron/platform/web/admin_endpoints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 2f1c5e0cc3..1a22a4c5f2 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -162,7 +162,7 @@ def verify_and_dispatch(self, env, data): claims = self._rpc_caller(PLATFORM_WEB, 'get_user_claims', get_bearer(env)).get() except RemoteError as e: if "ExpiredSignatureError" in e.exc_info["exc_type"]: - _log.warn("Access token has expired! Please re-login to renew.") + _log.warning("Access token has expired! Please re-login to renew.") template = template_env(env).get_template('login.html') _log.debug("Login.html: {}".format(env.get('PATH_INFO'))) return Response(template.render(), content_type='text/html') From fcaae3217316cc0a868094c5d6738bd9755c228a Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 10:52:23 -0700 Subject: [PATCH 44/45] Added catch for NotAuthorized back to verify_and_dispatch. --- volttron/platform/web/admin_endpoints.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 1a22a4c5f2..1e51a5f431 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -160,6 +160,9 @@ def verify_and_dispatch(self, env, data): from volttron.platform.web import get_bearer, NotAuthorized try: claims = self._rpc_caller(PLATFORM_WEB, 'get_user_claims', get_bearer(env)).get() + except NotAuthorized: + _log.error("Unauthorized user attempted to connect to {}".format(env.get('PATH_INFO'))) + return Response('

Unauthorized User

', status="401 Unauthorized") except RemoteError as e: if "ExpiredSignatureError" in e.exc_info["exc_type"]: _log.warning("Access token has expired! Please re-login to renew.") From 7b42ea502e93a95a795351b163854c7320b51fcb Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 12:01:11 -0700 Subject: [PATCH 45/45] Removed unnecessary jwt import. --- volttron/platform/web/admin_endpoints.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 1e51a5f431..c386695863 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -41,8 +41,6 @@ import re from urllib.parse import parse_qs -import jwt - from volttron.platform.agent.known_identities import PLATFORM_WEB, AUTH from volttron.platform.jsonrpc import RemoteError