mirror of
https://codeberg.org/angestoepselt/imagestack.git
synced 2026-03-21 22:32:17 +00:00
Added Batch Print Script
This commit is contained in:
parent
8e9628c0a4
commit
74ec8e9c3f
4 changed files with 220 additions and 0 deletions
15
tools/batch_print/computer.json
Normal file
15
tools/batch_print/computer.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"status_id": "2",
|
||||
"name": "HP-Tablet",
|
||||
"model_id": "2",
|
||||
"serial": "Null",
|
||||
"_snipeit_mac_address_1": "Null",
|
||||
"_snipeit_betriebssystem_2": "Windows 11",
|
||||
"_snipeit_festplatte_4": "128",
|
||||
"_snipeit_prozessor_5": "Intel Pentium 4410 1.5ghz",
|
||||
"_snipeit_arbeitsspeicher_6": "4",
|
||||
"_snipeit_optisches_laufwerk_7": "nein",
|
||||
"_snipeit_display_8": "",
|
||||
"_snipeit_akku_9": "",
|
||||
"_snipeit_anydeskid_10": ""
|
||||
}
|
||||
124
tools/batch_print/print.py
Normal file
124
tools/batch_print/print.py
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
import string
|
||||
import argparse
|
||||
import sys
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
import requests
|
||||
|
||||
def check_mac_exists(mac,api_key):
|
||||
|
||||
|
||||
|
||||
url = f'https://computer.z31.it/api/v1/hardware?limit=5&search={mac}'
|
||||
headers = {
|
||||
'accept': 'application/json',
|
||||
'authorization': f'Bearer {api_key}',
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print(f"Error fetching data: HTTP {response.status_code}")
|
||||
exit(1)
|
||||
|
||||
data = response.json()
|
||||
# Extract asset_tag from all rows
|
||||
asset_tags = [row.get('asset_tag', '') for row in data.get('rows', []) if row.get('asset_tag')]
|
||||
if asset_tags:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
exit(0)
|
||||
|
||||
def generate_random_mac():
|
||||
mac = [
|
||||
0x02, # fixed first byte
|
||||
random.randint(0x00, 0xFF),
|
||||
random.randint(0x00, 0xFF),
|
||||
random.randint(0x00, 0xFF),
|
||||
random.randint(0x00, 0xFF),
|
||||
random.randint(0x00, 0xFF),
|
||||
]
|
||||
return ":".join(f"{octet:02x}" for octet in mac)
|
||||
|
||||
def generate_random_serial(length=8):
|
||||
"""Generate a random uppercase alphanumeric serial number."""
|
||||
chars = string.ascii_uppercase + string.digits
|
||||
return "DUMMY-" +"".join(random.choices(chars, k=length))
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Validate a JSON file, print its contents, an amount, and generate a random private MAC address."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-j","--path",
|
||||
type=str,
|
||||
help="Path to JSON File containing Computer Info"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-i", "--amount",
|
||||
type=int,
|
||||
help="Number of Labels that should be printed (Can't be more than 50)"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
json_file = args.path
|
||||
amount = args.amount
|
||||
|
||||
response = requests.get("http://10.200.4.12:8888/snipe_api")
|
||||
response.raise_for_status() # raise error if request failed
|
||||
api_key = response.text.strip() # or response.json() if JSON returned
|
||||
if amount > 50:
|
||||
print("Maximum amount can be 50.")
|
||||
sys.exit(1)
|
||||
# Check if file exists
|
||||
if not os.path.isfile(json_file):
|
||||
print(f"Error: File '{json_file}' does not exist.")
|
||||
sys.exit(1)
|
||||
|
||||
# Validate JSON
|
||||
try:
|
||||
with open(json_file, "r") as f:
|
||||
data = json.load(f)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"Error: Invalid JSON in file '{json_file}': {e}")
|
||||
sys.exit(1)
|
||||
|
||||
# Display JSON and amount
|
||||
|
||||
# Generate and display MAC
|
||||
generate_random_mac()
|
||||
data['_snipeit_mac_address_1'] = generate_random_mac()
|
||||
data["serial"] = generate_random_serial()
|
||||
|
||||
for i in range(1, args.amount + 1):
|
||||
exists = True
|
||||
while exists:
|
||||
generate_random_mac()
|
||||
mac = generate_random_mac()
|
||||
exists = check_mac_exists(mac,api_key)
|
||||
|
||||
data['_snipeit_mac_address_1'] = generate_random_mac()
|
||||
data["serial"] = generate_random_serial()
|
||||
#Snipe IT
|
||||
headers = {
|
||||
"accept": "application/json",
|
||||
"authorization": f"Bearer {api_key}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
asset =requests.post("https://computer.z31.it/api/v1/hardware",headers=headers,data=json.dumps(data))
|
||||
tag =json.loads(asset.content)['payload']['asset_tag']
|
||||
print_data = {
|
||||
"id": tag,
|
||||
"distribution": "Windows",
|
||||
"version": "11",
|
||||
"cpu": "Intel Pentium 4410 1.5ghz",
|
||||
"memory": "4",
|
||||
"disk": "128"
|
||||
}
|
||||
res = requests.post("http://10.200.4.12:8888/batch", data=json.dumps(print_data))
|
||||
print(res.content)
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
48
tools/batch_print/print.sh
Normal file
48
tools/batch_print/print.sh
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Function to generate a random locally administered (private) MAC address
|
||||
generate_random_mac() {
|
||||
# First byte: set locally administered bit (0x02) and unicast (0x00)
|
||||
# Remaining bytes: random
|
||||
printf '02:%02x:%02x:%02x:%02x:%02x\n' \
|
||||
$((RANDOM % 256)) \
|
||||
$((RANDOM % 256)) \
|
||||
$((RANDOM % 256)) \
|
||||
$((RANDOM % 256)) \
|
||||
$((RANDOM % 256))
|
||||
}
|
||||
|
||||
# Check if the right number of arguments are given
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 <json_file_path> <amount>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign arguments to variables
|
||||
json_file="$1"
|
||||
amount="$2"
|
||||
|
||||
# Check if jq is installed
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
echo "Error: jq is required but not installed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if JSON file exists
|
||||
if [ ! -f "$json_file" ]; then
|
||||
echo "Error: File '$json_file' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate JSON file content
|
||||
jq empty "$json_file" 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Invalid JSON in file '$json_file'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If valid, display JSON and amount
|
||||
echo "Valid JSON detected!"
|
||||
echo "Amount: $amount"
|
||||
|
||||
mac=$(generate_random_mac)
|
||||
33
tools/batch_print/test.py
Normal file
33
tools/batch_print/test.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import requests
|
||||
def check_mac_in_hardware(mac):
|
||||
|
||||
response = requests.get("http://10.200.4.12:8888/snipe_api")
|
||||
response.raise_for_status() # raise error if request failed
|
||||
|
||||
api_key = response.text.strip() # or response.json() if JSON returned
|
||||
|
||||
url = f'https://computer.z31.it/api/v1/hardware?limit=5&search={mac}'
|
||||
headers = {
|
||||
'accept': 'application/json',
|
||||
'authorization': f'Bearer {api_key}',
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print(f"Error fetching data: HTTP {response.status_code}")
|
||||
exit(1)
|
||||
|
||||
data = response.json()
|
||||
|
||||
# Extract asset_tag from all rows
|
||||
asset_tags = [row.get('asset_tag', '') for row in data.get('rows', []) if row.get('asset_tag')]
|
||||
print(asset_tags)
|
||||
if asset_tags:
|
||||
print("Mac already exists in Snipe IT")
|
||||
else:
|
||||
print("Does not exist")
|
||||
exit(0)
|
||||
|
||||
|
||||
check_mac_in_hardware("c8:f7:50:7f:ee:ce")
|
||||
Loading…
Add table
Reference in a new issue