Compare commits
No commits in common. "2d9ad69c513d6db73958d2474ff23d18c8d00714" and "a12edcd36083400ef092909ff6c5f19171b3ab77" have entirely different histories.
2d9ad69c51
...
a12edcd360
5 changed files with 0 additions and 136 deletions
|
|
@ -1,132 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
from bundlewrap.repo import Repository
|
|
||||||
from os.path import realpath, dirname
|
|
||||||
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from typing import Optional, List
|
|
||||||
|
|
||||||
bw = Repository(dirname(dirname(realpath(__file__))))
|
|
||||||
|
|
||||||
VAULT='pricduaojmhoedyycpfmnzhtie'
|
|
||||||
BW_TAG = "bw"
|
|
||||||
BUNDLEWRAP_FIELD_LABEL = "bundlewrap node id"
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class OpResult:
|
|
||||||
stdout: str
|
|
||||||
stderr: str
|
|
||||||
returncode: int
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
for node in bw.nodes_in_group('routeros'):
|
|
||||||
upsert_node_item(
|
|
||||||
node_name=node.name,
|
|
||||||
node_uuid=node.metadata.get('id'),
|
|
||||||
username=node.username,
|
|
||||||
password=node.password,
|
|
||||||
url=f'http://{node.hostname}',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def run_op(args):
|
|
||||||
proc = subprocess.run(
|
|
||||||
["op", "--vault", VAULT] + args,
|
|
||||||
env=os.environ.copy(),
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
if proc.returncode != 0:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"op {' '.join(args)} failed with code {proc.returncode}:\n"
|
|
||||||
f"STDOUT:\n{proc.stdout}\n\nSTDERR:\n{proc.stderr}"
|
|
||||||
)
|
|
||||||
|
|
||||||
return OpResult(stdout=proc.stdout, stderr=proc.stderr, returncode=proc.returncode)
|
|
||||||
|
|
||||||
|
|
||||||
def op_item_list_bw():
|
|
||||||
out = run_op([
|
|
||||||
"item", "list",
|
|
||||||
"--tags", BW_TAG,
|
|
||||||
"--format", "json",
|
|
||||||
])
|
|
||||||
stdout = out.stdout.strip()
|
|
||||||
return json.loads(stdout) if stdout else []
|
|
||||||
|
|
||||||
|
|
||||||
def op_item_get(item_id):
|
|
||||||
args = ["item", "get", item_id, "--format", "json"]
|
|
||||||
return json.loads(run_op(args).stdout)
|
|
||||||
|
|
||||||
|
|
||||||
def op_item_create(title, node_uuid, username, password, url):
|
|
||||||
print(f"creating {title}")
|
|
||||||
return json.loads(run_op([
|
|
||||||
"item", "create",
|
|
||||||
"--category", "LOGIN",
|
|
||||||
"--title", title,
|
|
||||||
"--tags", BW_TAG,
|
|
||||||
"--url", url,
|
|
||||||
"--format", "json",
|
|
||||||
f"username={username}",
|
|
||||||
f"password={password}",
|
|
||||||
f"{BUNDLEWRAP_FIELD_LABEL}[text]={node_uuid}",
|
|
||||||
]).stdout)
|
|
||||||
|
|
||||||
|
|
||||||
def op_item_edit(item_id, title, username, password, url):
|
|
||||||
print(f"updating {title}")
|
|
||||||
return json.loads(run_op([
|
|
||||||
"item", "edit",
|
|
||||||
item_id,
|
|
||||||
"--title", title,
|
|
||||||
"--url", url,
|
|
||||||
"--format", "json",
|
|
||||||
f"username={username}",
|
|
||||||
f"password={password}",
|
|
||||||
]).stdout)
|
|
||||||
|
|
||||||
|
|
||||||
def find_node_item_id(node_uuid):
|
|
||||||
for summary in op_item_list_bw():
|
|
||||||
item_id = summary.get("id")
|
|
||||||
if not item_id:
|
|
||||||
continue
|
|
||||||
|
|
||||||
item = op_item_get(item_id)
|
|
||||||
for field in item.get("fields") or []:
|
|
||||||
label = field.get("label")
|
|
||||||
value = field.get("value")
|
|
||||||
if label == BUNDLEWRAP_FIELD_LABEL and value == node_uuid:
|
|
||||||
return item_id
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def upsert_node_item(node_name, node_uuid, username, password, url):
|
|
||||||
if item_id := find_node_item_id(node_uuid):
|
|
||||||
return op_item_edit(
|
|
||||||
item_id=item_id,
|
|
||||||
title=node_name,
|
|
||||||
username=username,
|
|
||||||
password=password,
|
|
||||||
url=url,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
return op_item_create(
|
|
||||||
title=node_name,
|
|
||||||
node_uuid=node_uuid,
|
|
||||||
username=username,
|
|
||||||
password=password,
|
|
||||||
url=url,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
'hostname': '10.0.0.63',
|
'hostname': '10.0.0.63',
|
||||||
'username': 'admin',
|
|
||||||
'password': '!decrypt:encrypt$gAAAAABoYFUx2faf18aV3rzNNuBA-4xZ22LQJ2HinpgsjkoTQS_l2TbmDtiAZI1jt-kWfTZ48d5_UPX-VDmY9qb4Sgn2Iz7Yee3CrB4hl85TyutilukTIP8=',
|
'password': '!decrypt:encrypt$gAAAAABoYFUx2faf18aV3rzNNuBA-4xZ22LQJ2HinpgsjkoTQS_l2TbmDtiAZI1jt-kWfTZ48d5_UPX-VDmY9qb4Sgn2Iz7Yee3CrB4hl85TyutilukTIP8=',
|
||||||
'groups': [
|
'groups': [
|
||||||
'routeros',
|
'routeros',
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
'hostname': '10.0.0.64',
|
'hostname': '10.0.0.64',
|
||||||
'username': 'admin',
|
|
||||||
'password': '!decrypt:encrypt$gAAAAABob2elR_Sm13u-oG1ff_zOeEsay8PZ0Wgbl810hAZNhvuTYWJuNAJ1oyelC6sy7WsD2CC33oVLeb6m0EtNARtMs-2gKu9KlT7Xat1MvV-iatDKvro=',
|
'password': '!decrypt:encrypt$gAAAAABob2elR_Sm13u-oG1ff_zOeEsay8PZ0Wgbl810hAZNhvuTYWJuNAJ1oyelC6sy7WsD2CC33oVLeb6m0EtNARtMs-2gKu9KlT7Xat1MvV-iatDKvro=',
|
||||||
'groups': [
|
'groups': [
|
||||||
'routeros',
|
'routeros',
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
'hostname': '10.0.0.60',
|
'hostname': '10.0.0.60',
|
||||||
'username': 'admin',
|
|
||||||
'password': '!decrypt:encrypt$gAAAAABoYVzxzO0R_bnW3S3Ggiq2LCCAGaKtXToviGZjgIlH2NpL9ojO8aNlSPPcGTKbn5z5RxSxjOlL161U0Ctdf6Rns2e5I5p5TIcsQ7c9qnAiaV-Hhuw=',
|
'password': '!decrypt:encrypt$gAAAAABoYVzxzO0R_bnW3S3Ggiq2LCCAGaKtXToviGZjgIlH2NpL9ojO8aNlSPPcGTKbn5z5RxSxjOlL161U0Ctdf6Rns2e5I5p5TIcsQ7c9qnAiaV-Hhuw=',
|
||||||
'groups': [
|
'groups': [
|
||||||
'routeros',
|
'routeros',
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
'hostname': '10.0.0.62',
|
'hostname': '10.0.0.62',
|
||||||
'username': 'admin',
|
|
||||||
'password': '!decrypt:encrypt$gAAAAABoYFSyt2JAsdePXiHim1RdQwbarJedhAOE3XpS2rGMBx-F5eCWRCIyLU2g2ocUDUIDfgH3nBipUCkdcd0Bv4vbK-yqKmGSeSH7YXLYwq3ZWuCDsLM=',
|
'password': '!decrypt:encrypt$gAAAAABoYFSyt2JAsdePXiHim1RdQwbarJedhAOE3XpS2rGMBx-F5eCWRCIyLU2g2ocUDUIDfgH3nBipUCkdcd0Bv4vbK-yqKmGSeSH7YXLYwq3ZWuCDsLM=',
|
||||||
'groups': [
|
'groups': [
|
||||||
'routeros',
|
'routeros',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue