def forwarder(request, volttron_instances): global volttron_instance1, volttron_instance2 global datamover_uuid, datamover_config # 1. Update destination address in forwarder configuration volttron_instance1.allow_all_connections() volttron_instance2.allow_all_connections() datamover_config["destination-vip"] = volttron_instance2.vip_address known_hosts_file = os.path.join(volttron_instance1.volttron_home, 'known_hosts') known_hosts = KnownHostsStore(known_hosts_file) known_hosts.add(volttron_instance2.vip_address, volttron_instance2.serverkey) # setup destination address to include keys datamover_config["destination-serverkey"] = volttron_instance2.serverkey # 1: Install historian agent # Install and start sqlhistorian agent in instance2 datamover_uuid = volttron_instance1.install_agent( agent_dir=get_services_core("DataMover"), config_file=datamover_config, start=True) print("forwarder agent id: ", datamover_uuid)
def forwarder(request, volttron_instances): #print "Fixture forwarder" global volttron_instance1, volttron_instance2 global forwarder_uuid, forwarder_config # 1. Update destination address in forwarder configuration volttron_instance1.allow_all_connections() volttron_instance2.allow_all_connections() # setup destination address to include keys known_hosts_file = os.path.join(volttron_instance1.volttron_home, 'known_hosts') known_hosts = KnownHostsStore(known_hosts_file) known_hosts.add(volttron_instance2.vip_address, volttron_instance2.serverkey) forwarder_config["destination-vip"] = volttron_instance2.vip_address forwarder_config["destination-serverkey"] = volttron_instance2.serverkey # 1: Install historian agent # Install and start sqlhistorian agent in instance2 forwarder_uuid = volttron_instance1.install_agent( agent_dir=get_services_core("ForwardHistorian"), config_file=forwarder_config, start=True) print("forwarder agent id: ", forwarder_uuid)
def forwarder(request, volttron_instances): #print "Fixture forwarder" global volttron_instance1, volttron_instance2 global forwarder_uuid, forwarder_config # 1. Update destination address in forwarder configuration volttron_instance1.allow_all_connections() volttron_instance2.allow_all_connections() # setup destination address to include keys known_hosts_file = os.path.join(volttron_instance1.volttron_home, 'known_hosts') known_hosts = KnownHostsStore(known_hosts_file) known_hosts.add(volttron_instance2.vip_address, volttron_instance2.serverkey) forwarder_config["destination-vip"] = volttron_instance2.vip_address forwarder_config["destination-serverkey"] = volttron_instance2.serverkey # 1: Install historian agent # Install and start sqlhistorian agent in instance2 forwarder_uuid = volttron_instance1.install_agent( agent_dir="services/core/ForwardHistorian", config_file=forwarder_config, start=True) print("forwarder agent id: ", forwarder_uuid)
def startup_platform(self, vip_address, auth_dict=None, use_twistd=False, mode=UNRESTRICTED, bind_web_address=None, volttron_central_address=None, volttron_central_serverkey=None): # if not isinstance(vip_address, list): # self.vip_address = [vip_address] # else: # self.vip_address = vip_address self.vip_address = vip_address self.mode = mode self.bind_web_address = bind_web_address if self.bind_web_address: self.discovery_address = "{}/discovery/".format( self.bind_web_address) # Only available if vc is installed! self.jsonrpc_endpoint = "{}/jsonrpc".format( self.bind_web_address) enable_logging = self.env.get('ENABLE_LOGGING', False) debug_mode = self.env.get('DEBUG_MODE', False) if not debug_mode: debug_mode = self.env.get('DEBUG', False) self.skip_cleanup = self.env.get('SKIP_CLEANUP', False) if debug_mode: self.skip_cleanup = True enable_logging = True self.logit( "In start up platform enable_logging is {} ".format(enable_logging)) assert self.mode in MODES, 'Invalid platform mode set: ' + str(mode) opts = None # see main.py for how we handle pub sub addresses. ipc = 'ipc://{}{}/run/'.format( '@' if sys.platform.startswith('linux') else '', self.volttron_home) self.local_vip_address = ipc + 'vip.socket' self.set_auth_dict(auth_dict) self.opts = {'verify_agents': False, 'volttron_home': self.volttron_home, 'vip_address': vip_address, 'vip_local_address': ipc + 'vip.socket', 'publish_address': ipc + 'publish', 'subscribe_address': ipc + 'subscribe', 'bind_web_address': bind_web_address, 'volttron_central_address': volttron_central_address, 'volttron_central_serverkey': volttron_central_serverkey, 'platform_name': None, 'log': os.path.join(self.volttron_home, 'volttron.log'), 'log_config': None, 'monitor': True, 'autostart': True, 'log_level': logging.DEBUG, 'verboseness': logging.DEBUG} pconfig = os.path.join(self.volttron_home, 'config') config = {} # Add platform's public key to known hosts file publickey = self.keystore.public known_hosts_file = os.path.join(self.volttron_home, 'known_hosts') known_hosts = KnownHostsStore(known_hosts_file) known_hosts.add(self.opts['vip_local_address'], publickey) known_hosts.add(self.opts['vip_address'], publickey) # Set up the configuration file based upon the passed parameters. parser = configparser.ConfigParser() parser.add_section('volttron') parser.set('volttron', 'vip-address', vip_address) if bind_web_address: parser.set('volttron', 'bind-web-address', bind_web_address) if volttron_central_address: parser.set('volttron', 'volttron-central-address', volttron_central_address) if volttron_central_serverkey: parser.set('volttron', 'volttron-central-serverkey', volttron_central_serverkey) if self.mode == UNRESTRICTED: # TODO Restricted code should set with volttron as contianer # if RESTRICTED_AVAILABLE: # config['mobility'] = False # config['resource-monitor'] = False # config['verify'] = False with closing(open(pconfig, 'wb')) as cfg: cfg.write(PLATFORM_CONFIG_UNRESTRICTED.format(**config)) parser.write(cfg) elif self.mode == RESTRICTED: if not RESTRICTED_AVAILABLE: raise ValueError("restricted is not available.") certsdir = os.path.join(self.volttron_home, 'certificates') print ("certsdir", certsdir) self.certsobj = certs.Certs(certsdir) with closing(open(pconfig, 'wb')) as cfg: cfg.write(PLATFORM_CONFIG_RESTRICTED.format(**config)) else: raise PlatformWrapperError( "Invalid platform mode specified: {}".format(mode)) log = os.path.join(self.volttron_home, 'volttron.log') if enable_logging: cmd = ['volttron', '-vv', '-l{}'.format(log)] else: cmd = ['volttron', '-l{}'.format(log)] print('process environment: {}'.format(self.env)) print('popen params: {}'.format(cmd)) self.p_process = Popen(cmd, env=self.env, stdout=subprocess.PIPE, stderr=subprocess.PIPE) assert self.p_process is not None # A None value means that the process is still running. # A negative means that the process exited with an error. assert self.p_process.poll() is None self.serverkey = self.keystore.public assert self.serverkey agent = self.build_agent() has_control = False times = 0 while not has_control and times < 10: times += 1 try: has_control = agent.vip.peerlist().get(timeout=.2) except gevent.Timeout: pass if not has_control: self.shutdown_platform() raise "Couldn't connect to core platform!" if bind_web_address: times = 0 has_discovery = False while times < 10: times += 1 try: resp = requests.get(self.discovery_address) if resp.ok: has_discovery = True break except Exception as e: gevent.sleep(0.1) self.logit("Connection error found {}".format(e)) if not has_discovery: raise "Couldn't connect to discovery platform." self.use_twistd = use_twistd # TODO: Revise this to start twistd with platform. if self.use_twistd: tconfig = os.path.join(self.volttron_home, TMP_SMAP_CONFIG_FILENAME) with closing(open(tconfig, 'w')) as cfg: cfg.write(TWISTED_CONFIG.format(**config)) tparams = [TWISTED_START, "-n", "smap", tconfig] self.t_process = subprocess.Popen(tparams, env=self.env) time.sleep(5)
def startup_platform(self, vip_address, auth_dict=None, use_twistd=False, mode=UNRESTRICTED, bind_web_address=None, volttron_central_address=None, volttron_central_serverkey=None): # if not isinstance(vip_address, list): # self.vip_address = [vip_address] # else: # self.vip_address = vip_address self.vip_address = vip_address self.mode = mode self.bind_web_address = bind_web_address if self.bind_web_address: self.discovery_address = "{}/discovery/".format( self.bind_web_address) # Only available if vc is installed! self.jsonrpc_endpoint = "{}/jsonrpc".format(self.bind_web_address) enable_logging = self.env.get('ENABLE_LOGGING', False) debug_mode = self.env.get('DEBUG_MODE', False) if not debug_mode: debug_mode = self.env.get('DEBUG', False) self.skip_cleanup = self.env.get('SKIP_CLEANUP', False) if debug_mode: self.skip_cleanup = True enable_logging = True self.logit("In start up platform enable_logging is {} ".format( enable_logging)) assert self.mode in MODES, 'Invalid platform mode set: ' + str(mode) opts = None # see main.py for how we handle pub sub addresses. ipc = 'ipc://{}{}/run/'.format( '@' if sys.platform.startswith('linux') else '', self.volttron_home) self.local_vip_address = ipc + 'vip.socket' self.set_auth_dict(auth_dict) self.opts = { 'verify_agents': False, 'volttron_home': self.volttron_home, 'vip_address': vip_address, 'vip_local_address': ipc + 'vip.socket', 'publish_address': ipc + 'publish', 'subscribe_address': ipc + 'subscribe', 'bind_web_address': bind_web_address, 'volttron_central_address': volttron_central_address, 'volttron_central_serverkey': volttron_central_serverkey, 'platform_name': None, 'log': os.path.join(self.volttron_home, 'volttron.log'), 'log_config': None, 'monitor': True, 'autostart': True, 'log_level': logging.DEBUG, 'verboseness': logging.DEBUG } pconfig = os.path.join(self.volttron_home, 'config') config = {} # Add platform's public key to known hosts file publickey = self.keystore.public known_hosts_file = os.path.join(self.volttron_home, 'known_hosts') known_hosts = KnownHostsStore(known_hosts_file) known_hosts.add(self.opts['vip_local_address'], publickey) known_hosts.add(self.opts['vip_address'], publickey) # Set up the configuration file based upon the passed parameters. parser = configparser.ConfigParser() parser.add_section('volttron') parser.set('volttron', 'vip-address', vip_address) if bind_web_address: parser.set('volttron', 'bind-web-address', bind_web_address) if volttron_central_address: parser.set('volttron', 'volttron-central-address', volttron_central_address) if volttron_central_serverkey: parser.set('volttron', 'volttron-central-serverkey', volttron_central_serverkey) if self.mode == UNRESTRICTED: # TODO Restricted code should set with volttron as contianer # if RESTRICTED_AVAILABLE: # config['mobility'] = False # config['resource-monitor'] = False # config['verify'] = False with closing(open(pconfig, 'wb')) as cfg: cfg.write(PLATFORM_CONFIG_UNRESTRICTED.format(**config)) parser.write(cfg) elif self.mode == RESTRICTED: if not RESTRICTED_AVAILABLE: raise ValueError("restricted is not available.") certsdir = os.path.join(self.volttron_home, 'certificates') print("certsdir", certsdir) self.certsobj = certs.Certs(certsdir) with closing(open(pconfig, 'wb')) as cfg: cfg.write(PLATFORM_CONFIG_RESTRICTED.format(**config)) else: raise PlatformWrapperError( "Invalid platform mode specified: {}".format(mode)) log = os.path.join(self.volttron_home, 'volttron.log') if enable_logging: cmd = ['volttron', '-vv', '-l{}'.format(log)] else: cmd = ['volttron', '-l{}'.format(log)] print('process environment: {}'.format(self.env)) print('popen params: {}'.format(cmd)) self.p_process = Popen(cmd, env=self.env, stdout=subprocess.PIPE, stderr=subprocess.PIPE) assert self.p_process is not None # A None value means that the process is still running. # A negative means that the process exited with an error. assert self.p_process.poll() is None self.serverkey = self.keystore.public assert self.serverkey agent = self.build_agent() has_control = False times = 0 while not has_control and times < 10: times += 1 try: has_control = agent.vip.peerlist().get(timeout=.2) except gevent.Timeout: pass if not has_control: self.shutdown_platform() raise "Couldn't connect to core platform!" if bind_web_address: times = 0 has_discovery = False while times < 10: times += 1 try: resp = requests.get(self.discovery_address) if resp.ok: has_discovery = True break except Exception as e: gevent.sleep(0.1) self.logit("Connection error found {}".format(e)) if not has_discovery: raise "Couldn't connect to discovery platform." self.use_twistd = use_twistd # TODO: Revise this to start twistd with platform. if self.use_twistd: tconfig = os.path.join(self.volttron_home, TMP_SMAP_CONFIG_FILENAME) with closing(open(tconfig, 'w')) as cfg: cfg.write(TWISTED_CONFIG.format(**config)) tparams = [TWISTED_START, "-n", "smap", tconfig] self.t_process = subprocess.Popen(tparams, env=self.env) time.sleep(5)