def build_agentpackage(self, agent_dir, config_file): assert os.path.exists(agent_dir) assert os.path.exists(config_file) wheel_path = packaging.create_package(agent_dir, self.packaged_dir) packaging.add_files_to_package( wheel_path, {'config_file': os.path.join('./', config_file)}) return wheel_path
def build_agentpackage(self, agent_dir, config_file): assert os.path.exists(agent_dir) assert os.path.exists(config_file) wheel_path = packaging.create_package(agent_dir, self.packaged_dir) packaging.add_files_to_package(wheel_path, { 'config_file': os.path.join('./', config_file) }) return wheel_path
def build_agentpackage(self, agent_dir, config_file={}): if isinstance(config_file, dict): cfg_path = os.path.join(agent_dir, "config_temp") with open(cfg_path, "w") as tmp_cfg: tmp_cfg.write(jsonapi.dumps(config_file)) config_file = cfg_path # Handle relative paths from the volttron git directory. if not os.path.isabs(agent_dir): agent_dir = os.path.join(self.volttron_root, agent_dir) assert os.path.exists(config_file) assert os.path.exists(agent_dir) wheel_path = packaging.create_package(agent_dir, self.packaged_dir) packaging.add_files_to_package( wheel_path, {'config_file': os.path.join('./', config_file)}) return wheel_path
def build_agentpackage(self, agent_dir, config_file={}): if isinstance(config_file, dict): cfg_path = os.path.join(agent_dir, "config_temp") with open(cfg_path, "w") as tmp_cfg: tmp_cfg.write(jsonapi.dumps(config_file)) config_file = cfg_path # Handle relative paths from the volttron git directory. if not os.path.isabs(agent_dir): agent_dir = os.path.join(self.volttron_root, agent_dir) assert os.path.exists(config_file) assert os.path.exists(agent_dir) wheel_path = packaging.create_package(agent_dir, self.packaged_dir) packaging.add_files_to_package(wheel_path, { 'config_file': os.path.join('./', config_file) }) return wheel_path
def install_agent(opts, package, config): """ The main installation method for installing the agent on the correct local platform instance. :param opts: :param package: :param config: :return: """ if config is None: config = {} # if not a dict then config should be a filename if not isinstance(config, dict): config_file = config else: cfg = tempfile.NamedTemporaryFile() with open(cfg.name, 'w') as fout: fout.write(yaml.safe_dump(config)) # jsonapi.dumps(config)) config_file = cfg.name try: with open(config_file) as fp: data = yaml.safe_load(fp) # data = json.load(fp) except: log.error("Invalid yaml/json config file.") sys.exit(-10) # Configure the whl file before installing. add_files_to_package(opts.package, {'config_file': config_file}) env = _build_copy_env(opts) if opts.vip_identity: cmds = [opts.volttron_control, "upgrade", opts.vip_identity, package] else: cmds = [opts.volttron_control, "install", package] if opts.tag: cmds.extend(["--tag", opts.tag]) out = execute_command(cmds, env=env, logger=log, err_prefix="Error installing agent") parsed = out.split("\n") # If there is not an agent with that identity: # 'Could not find agent with VIP IDENTITY "BOO". Installing as new agent # Installed /home/volttron/.volttron/packaged/listeneragent-3.2-py2-none-any.whl as 6ccbf8dc-4929-4794-9c8e-3d8c6a121776 listeneragent-3.2' # The following is standard output of an agent that was previously installed # If the agent was not previously installed then only the second line # would have been output to standard out. # # Removing previous version of agent "foo" # Installed /home/volttron/.volttron/packaged/listeneragent-3.2-py2-none-any.whl as 81b811ff-02b5-482e-af01-63d2fd95195a listeneragent-3.2 if 'Could not' in parsed[0]: agent_uuid = parsed[1].split()[-2] elif 'Removing' in parsed[0]: agent_uuid = parsed[1].split()[-2] else: agent_uuid = parsed[0].split()[-2] output_dict = dict(agent_uuid=agent_uuid) if opts.start: cmds = [opts.volttron_control, "start", agent_uuid] outputdata = execute_command(cmds, env=env, logger=log, err_prefix="Error starting agent") # Expected output on standard out # Starting 83856b74-76dc-4bd9-8480-f62bd508aa9c listeneragent-3.2 if 'Starting' in outputdata: output_dict['starting'] = True if opts.enable: cmds = [opts.volttron_control, "enable", agent_uuid] if opts.priority != -1: cmds.extend(["--priority", str(opts.priority)]) outputdata = execute_command(cmds, env=env, logger=log, err_prefix="Error enabling agent") # Expected output from standard out # Enabling 6bcee29b-7af3-4361-a67f-7d3c9e986419 listeneragent-3.2 with priority 50 if "Enabling" in outputdata: output_dict['enabling'] = True output_dict['priority'] = outputdata.split("\n")[0].split()[-1] if opts.start: # Pause for agent_start_time seconds before verifying that the agent sleep(opts.agent_start_time) cmds = [opts.volttron_control, "status", agent_uuid] outputdata = execute_command(cmds, env=env, logger=log, err_prefix="Error finding agent status") # 5 listeneragent-3.2 foo running [10737] output_dict["started"] = "running" in outputdata if output_dict["started"]: pidpos = outputdata.index('[') + 1 pidend = outputdata.index(']') output_dict['agent_pid'] = int(outputdata[pidpos: pidend]) if opts.json: sys.stdout.write("%s\n" % json.dumps(output_dict, indent=4)) if opts.csv: keylen = len(output_dict.keys()) keyline = '' valueline = '' keys = output_dict.keys() for k in range(keylen): if k < keylen - 1: keyline += "%s," % keys[k] valueline += "%s," % output_dict[keys[k]] else: keyline += "%s" % keys[k] valueline += "%s" % output_dict[keys[k]] sys.stdout.write("%s\n%s\n" % (keyline, valueline))
def direct_configure_agentpackage(self, agent_wheel, config_file): packaging.add_files_to_package(agent_wheel, { 'config_file':os.path.join('./', config_file) })
def install_agent(opts, package, config): """ The main installation method for installing the agent on the correct local platform instance. :param opts: :param package: :param config: :return: """ if config is None: config = {} # if not a dict then config should be a filename if not isinstance(config, dict): config_file = config else: cfg = tempfile.NamedTemporaryFile() with open(cfg.name, 'w') as fout: fout.write(yaml.safe_dump(config)) # jsonapi.dumps(config)) config_file = cfg.name try: with open(config_file) as fp: data = yaml.safe_load(fp) # data = json.load(fp) except: log.error("Invalid yaml/json config file.") sys.exit(-10) # Configure the whl file before installing. add_files_to_package(opts.package, {'config_file': config_file}) env = _build_copy_env(opts) if opts.vip_identity: cmds = [opts.volttron_control, "upgrade", opts.vip_identity, package] else: cmds = [opts.volttron_control, "install", package] if opts.tag: cmds.extend(["--tag", opts.tag]) out = execute_command(cmds, env=env, logger=log, err_prefix="Error installing agent") parsed = out.split("\n") # If there is not an agent with that identity: # 'Could not find agent with VIP IDENTITY "BOO". Installing as new agent # Installed /home/volttron/.volttron/packaged/listeneragent-3.2-py2-none-any.whl as 6ccbf8dc-4929-4794-9c8e-3d8c6a121776 listeneragent-3.2' # The following is standard output of an agent that was previously installed # If the agent was not previously installed then only the second line # would have been output to standard out. # # Removing previous version of agent "foo" # Installed /home/volttron/.volttron/packaged/listeneragent-3.2-py2-none-any.whl as 81b811ff-02b5-482e-af01-63d2fd95195a listeneragent-3.2 if 'Could not' in parsed[0]: agent_uuid = parsed[1].split()[-2] elif 'Removing' in parsed[0]: agent_uuid = parsed[1].split()[-2] else: agent_uuid = parsed[0].split()[-2] output_dict = dict(agent_uuid=agent_uuid) if opts.start: cmds = [opts.volttron_control, "start", agent_uuid] outputdata = execute_command(cmds, env=env, logger=log, err_prefix="Error starting agent") # Expected output on standard out # Starting 83856b74-76dc-4bd9-8480-f62bd508aa9c listeneragent-3.2 if 'Starting' in outputdata: output_dict['starting'] = True if opts.enable: cmds = [opts.volttron_control, "enable", agent_uuid] if opts.priority != -1: cmds.extend(["--priority", str(opts.priority)]) outputdata = execute_command(cmds, env=env, logger=log, err_prefix="Error enabling agent") # Expected output from standard out # Enabling 6bcee29b-7af3-4361-a67f-7d3c9e986419 listeneragent-3.2 with priority 50 if "Enabling" in outputdata: output_dict['enabling'] = True output_dict['priority'] = outputdata.split("\n")[0].split()[-1] if opts.start: # Pause for agent_start_time seconds before verifying that the agent sleep(opts.agent_start_time) cmds = [opts.volttron_control, "status", agent_uuid] outputdata = execute_command(cmds, env=env, logger=log, err_prefix="Error finding agent status") # 5 listeneragent-3.2 foo running [10737] output_dict["started"] = "running" in outputdata if output_dict["started"]: pidpos = outputdata.index('[') + 1 pidend = outputdata.index(']') output_dict['agent_pid'] = int(outputdata[pidpos:pidend]) if opts.json: sys.stdout.write("%s\n" % json.dumps(output_dict, indent=4)) if opts.csv: keylen = len(output_dict.keys()) keyline = '' valueline = '' keys = output_dict.keys() for k in range(keylen): if k < keylen - 1: keyline += "%s," % keys[k] valueline += "%s," % output_dict[keys[k]] else: keyline += "%s" % keys[k] valueline += "%s" % output_dict[keys[k]] sys.stdout.write("%s\n%s\n" % (keyline, valueline))
def install_agent_directory(opts, publickey=None, secretkey=None): """ The main installation method for installing the agent on the correct local platform instance. :param opts: :param package: :param agent_config: :return: """ if not os.path.isfile(os.path.join(opts.install_path, "setup.py")): _log.error("Agent source must contain a setup.py file.") sys.exit(-10) assert opts.connection, "Connection must have been created to access this feature." if not opts.skip_requirements: install_requirements(opts.install_path) wheelhouse = os.path.join(get_home(), "packaged") opts.package = create_package(opts.install_path, wheelhouse, opts.vip_identity) if not os.path.isfile(opts.package): raise InstallRuntimeError( "The wheel file for the agent was unable to be created.") agent_uuid = None if not opts.vip_identity: agent_default_id_file = Path(opts.install_path).joinpath("IDENTITY") if agent_default_id_file.is_file(): with open(str(agent_default_id_file)) as fin: opts.vip_identity = fin.read().strip() # Verify and load agent_config up from the opts. agent_config will # be a yaml config file. agent_config = opts.agent_config if agent_config is None: agent_config = {} # if not a dict then config should be a filename if not isinstance(agent_config, dict): config_file = agent_config if not Path(config_file).exists(): raise InstallRuntimeError( f"Config file {config_file} does not exist!") else: cfg = tempfile.NamedTemporaryFile() with open(cfg.name, 'w') as fout: fout.write(yaml.safe_dump(agent_config)) config_file = cfg.name try: with open(config_file) as fp: data = yaml.safe_load(fp) except Exception as exc: raise InstallRuntimeError(exc) try: # Configure the whl file before installing. add_files_to_package(opts.package, {'config_file': config_file}) except FileNotFoundError: raise InstallRuntimeError(f"File not found: {config_file}") agent_uuid = _send_and_intialize_agent(opts, publickey, secretkey) return agent_uuid
def direct_configure_agentpackage(self, agent_wheel, config_file): packaging.add_files_to_package(agent_wheel, {"config_file": os.path.join("./", config_file)})