Skip to content

Commit 6bd0c0e

Browse files
authored
Add new netbox command (nbcli wrapper) (#1339)
Signed-off-by: Christian Berendt <[email protected]>
1 parent 5168edf commit 6bd0c0e

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

osism/commands/netbox.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# SPDX-License-Identifier: Apache-2.0
22

3+
import os
4+
import subprocess
5+
36
from cliff.command import Command
47
from loguru import logger
8+
import yaml
59

610
from osism.tasks import conductor, netbox, handle_task
711

@@ -133,3 +137,65 @@ def take_action(self, parsed_args):
133137
task.wait(timeout=None, interval=0.5)
134138
result = task.get()
135139
print(result)
140+
141+
142+
class Console(Command):
143+
def get_parser(self, prog_name):
144+
parser = super(Console, self).get_parser(prog_name)
145+
parser.add_argument(
146+
"type",
147+
nargs=1,
148+
choices=["info", "search", "filter", "shell"],
149+
help="Type of the console (default: %(default)s)",
150+
)
151+
parser.add_argument(
152+
"arguments", nargs="*", type=str, default="", help="Additional arguments"
153+
)
154+
155+
return parser
156+
157+
def take_action(self, parsed_args):
158+
type_console = parsed_args.type[0]
159+
arguments = " ".join(
160+
[f"'{item}'" if " " in item else item for item in parsed_args.arguments]
161+
)
162+
163+
home_dir = os.path.expanduser("~")
164+
nbcli_dir = os.path.join(home_dir, ".nbcli")
165+
if not os.path.exists(nbcli_dir):
166+
os.mkdir(nbcli_dir)
167+
168+
nbcli_file = os.path.join(nbcli_dir, "user_config.yml")
169+
if not os.path.exists(nbcli_file):
170+
try:
171+
with open("/run/secrets/NETBOX_TOKEN", "r") as fp:
172+
token = fp.read().strip()
173+
except FileNotFoundError:
174+
token = None
175+
176+
url = os.environ.get("NETBOX_API", None)
177+
178+
if not token or not url:
179+
logger.error("Netbox integration not configured.")
180+
return
181+
182+
subprocess.call(
183+
["/usr/local/bin/nbcli", "init"],
184+
stdout=subprocess.DEVNULL,
185+
stderr=subprocess.DEVNULL,
186+
)
187+
os.remove(nbcli_file)
188+
189+
nbcli_config = {
190+
"pynetbox": {
191+
"url": url,
192+
"token": token,
193+
},
194+
"requests": {"verify": False},
195+
"nbcli": {"filter_limit": 50},
196+
"user": {},
197+
}
198+
with open(nbcli_file, "w") as fp:
199+
yaml.dump(nbcli_config, fp, default_flow_style=False)
200+
201+
subprocess.call(f"/usr/local/bin/nbcli {type_console} {arguments}", shell=True)

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ osism.commands:
7676
manage server list = osism.commands.server:ServerList
7777
manage server migrate = osism.commands.server:ServerMigrate
7878
manage volume list = osism.commands.volume:VolumeList
79+
netbox = osism.commands.netbox:Console
7980
get versions netbox = osism.commands.netbox:Versions
8081
noset bootstrap = osism.commands.noset:NoBootstrap
8182
noset maintenance = osism.commands.noset:NoMaintenance

0 commit comments

Comments
 (0)