Source code for inet_nm.cli_export
import argparse
import inet_nm.check as chk
import inet_nm.config as cfg
[docs]
def main():
"""CLI entrypoint for entering env vars."""
parser = argparse.ArgumentParser(
description="Export env vars, if specific nodes are selected one may "
"need to reapply"
)
cfg.config_arg(parser)
chk.check_args(parser)
parser.add_argument(
"--apply-pattern",
action="store_true",
help="Env var will be applied to the following pattern rather than a "
"specific node",
)
parser.add_argument(
"--apply-to-shared",
action="store_true",
help="Env var will be applied to every node regardless of matching",
)
parser.add_argument("key", type=str, help="The env var key")
parser.add_argument("val", type=str, help="The env var value")
args = parser.parse_args()
kwargs = vars(args)
apply_pattern = kwargs.pop("apply_pattern")
apply_to_shared = kwargs.pop("apply_to_shared")
env_key = str(kwargs.pop("key"))
env_val = str(kwargs.pop("val"))
env_cfg = cfg.EnvConfig(args.config)
env_cfg.check_file(writable=True)
env_info = env_cfg.load()
if apply_to_shared:
env_info.shared[env_key] = env_val
print(f"Added {env_key}={env_val} to shared env vars")
else:
if apply_pattern:
pattern = {}
pattern["key"] = env_key
pattern["val"] = env_val
pattern["boards"] = args.boards
pattern["feat_filter"] = args.feat_filter
pattern["feat_eval"] = args.feat_eval
# NOTE: All useful patterns must be added here
env_info.patterns.append(pattern)
print(f"Added patterns: {pattern}")
else:
nodes = chk.get_filtered_nodes(**kwargs)
uids = {node.uid for node in nodes}
for uid in uids:
if uid not in env_info.nodes:
env_info.nodes[uid] = {}
env_info.nodes[uid][env_key] = env_val
print(f"Added {env_key}={env_val} to env vars for nodes {uids}")
env_cfg.save(env_info)
print(f"Written to {env_cfg.file_path}")
if __name__ == "__main__":
main()