Compare commits

...
Sign in to create a new pull request.

11 commits
master ... main

Author SHA1 Message Date
gblow
eda64ed9e6 Merge branch 'genericisation-1' into 'main'
Genericisation 1

See merge request gblow/ilo-license-setter!2
2025-01-21 09:35:06 +00:00
gblow
8b152ac71d Update README.md 2024-10-10 17:12:38 +01:00
gblow
1dd541ba73 Merge branch 'genericisation-1' into 'main'
Genericisation 1

See merge request gblow/ilo-license-setter!1
2024-08-15 12:35:02 +01:00
hpcsys
2dd74bdfe1 set-DNS read mode coded 2024-06-13 16:49:14 +01:00
hpcsys
85a80ca5e8 first draf DNS setter 2024-06-13 16:22:27 +01:00
gblow
0947796491 readme amendment re: venvs 2024-06-12 16:22:03 +01:00
gblow
a2c7d67b60 template tidy-up 2024-06-12 16:19:14 +01:00
gblow
2ed7551e25 changed hosts in templating schema 2024-06-12 16:03:46 +01:00
gblow
333c4b1768 write basic 2024-06-12 15:43:42 +01:00
gblow
d43ef9b093 import argparse, arrange input csv, other tidying 2024-06-12 15:33:53 +01:00
gblow
bab32b9ee9 removed references to ceph and made some variable names generic 2024-06-12 15:23:45 +01:00
9 changed files with 134 additions and 41 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
hosts-in.csv

View file

@ -0,0 +1,9 @@
This repository contains a number of scripts that are designed to interact with HPE iLO BMCs (Hewlett Packard Enterprises, integrated Lights Out, Baseboard Management Controllers ) to access information and provide limited actuation. If usage information is not provided through the help text for each script, care should be taken when determining what the script will do before running.
Recommend to set up a virtual env for python to load appropriate modules (with e.g. `python3 -m venv venv`)
load the venv by sourcing the activate file (e.g. `source venv/bin/activate`)
install requirements manually
`python3 -m pip install paramiko`

View file

@ -1,29 +1,34 @@
import csv
import argparse
import paramiko
import getpass
import logging
#Configure and commence logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename='python.log', level=logging.DEBUG)
logger.debug('logging start')
with open('ceph-license-keys.csv',encoding='utf8') as csvfile:
with open('hosts-in.csv',encoding='utf8') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
next(csvreader)
USER_NAME = input("Please enter BMC username:")
PASSWORD=getpass.getpass()
i = 1
for row in csvreader:
print(i)
i += 1
HOST_NAME = ("ceph01-block02-"+row[0]+"-bmc")
SYSTEM_NAME = ("ceph01-block02-"+row[0])
print(HOST_NAME)
print(SYSTEM_NAME)
USER_NAME = "admin"
BMC_NAME = (row[1])
HOST_NAME = (row[0])
print(BMC_NAME)
if i > 0:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=HOST_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
command = ("set system1 oemHPE_server_name="+SYSTEM_NAME)
#command = ("show /system1/")
client.connect(hostname=BMC_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
command = ("set system1 oemHPE_server_name="+HOST_NAME)
stdin, stdout, stderr = client.exec_command(command)
print(stdout.read())

View file

@ -1,28 +1,32 @@
import csv
import argparse
import paramiko
import getpass
import logging
#Configure and commence logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename='python.log', level=logging.DEBUG)
logger.debug('logging start')
with open('ceph-license-keys.csv',encoding='utf8') as csvfile:
with open('hosts-in.csv',encoding='utf8') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
next(csvreader)
USER_NAME = input("Please enter BMC username:")
PASSWORD=getpass.getpass()
i = 1
for row in csvreader:
print(i)
i += 1
HOST_NAME = ("ceph01-block01-"+row[0]+"-bmc")
LICENSE_KEY = (row[7])
print(HOST_NAME)
#print(LICENSE_KEY)
USER_NAME = "admin"
BMC_NAME = (row[1])
#This is legacy and needs a new column setting, depending on how implemented in future case. Should be quick to determine so leaving to do until relevant.
#LICENSE_KEY = (row[7])
print(BMC_NAME)
if i > 0:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=HOST_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
#command = ("OemHPE_licenseinstall /map1/oemHPE_license1 "+LICENSE_KEY)
client.connect(hostname=BMC_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
command = ("show /map1/oemHPE_license1")
stdin, stdout, stderr = client.exec_command(command)
print(stdout.read())

View file

@ -1,15 +1,21 @@
import csv
import argparse
import paramiko
import getpass
import logging
import re
#Configure and commence logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename='python.log', level=logging.DEBUG)
logger.debug('logging start')
with open('ceph-license-keys.csv',encoding='utf8') as csvfile,open('MACs.csv','w') as csvfile_out:
with open('hosts-in.csv',encoding='utf8') as csvfile,open('MACs.csv','w') as csvfile_out:
csvreader = csv.reader(csvfile, delimiter=',')
csvwriter = csv.writer(csvfile_out)
next(csvreader)
USER_NAME = input("Please enter BMC username:")
PASSWORD=getpass.getpass()
i = 1
P1_PATTERN=re.compile('Port1NIC_MACAddress=\w{2}:\w{2}:\w{2}:\w{2}:\w{2}:\w{2}')
@ -17,14 +23,13 @@ with open('ceph-license-keys.csv',encoding='utf8') as csvfile,open('MACs.csv','w
P3_PATTERN=re.compile('Port3NIC_MACAddress=\w{2}:\w{2}:\w{2}:\w{2}:\w{2}:\w{2}')
for row in csvreader:
print(i)
HOST_NAME = ("ceph01-block02-"+row[0]+"-bmc")
SYSTEM_HOST_NAME = ("ceph01-block02-"+row[0])
print(HOST_NAME)
USER_NAME = "admin"
BMC_NAME = (row[1])
SYSTEM_NAME = (row[0])
print(BMC_NAME)
if i > 0:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=HOST_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
client.connect(hostname=BMC_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
#command = ("OemHPE_licenseinstall /map1/oemHPE_license1 "+LICENSE_KEY)
command = ("show /system1/network1/Integrated_NICs")
stdin, stdout, stderr = client.exec_command(command)
@ -32,6 +37,6 @@ with open('ceph-license-keys.csv',encoding='utf8') as csvfile,open('MACs.csv','w
P1_MAC=(str(P1_PATTERN.findall(str(NET_INFO)))[-19:-2])
P2_MAC=(str(P2_PATTERN.findall(str(NET_INFO)))[-19:-2])
P3_MAC=(str(P3_PATTERN.findall(str(NET_INFO)))[-19:-2])
csvwriter.writerow([SYSTEM_HOST_NAME,P1_MAC,P2_MAC,P3_MAC])
csvwriter.writerow([SYSTEM_NAME,P1_MAC,P2_MAC,P3_MAC])
i += 1

View file

@ -1,35 +1,43 @@
import csv
import argparse
import paramiko
import getpass
import logging
import re
#Configure and commence logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename='python.log', level=logging.DEBUG)
logger.debug('logging start')
with open('ceph-license-keys.csv',encoding='utf8') as csvfile,open('serials.csv','w') as csvfile_out:
#Set up argument parsing
parser = argparse.ArgumentParser("get-serials.py")
parser.add_argument(help="This script will access every host BMC in the hosts-in.csv list and retrieve the serial number for them, writing them out to a csv file, along with the system host name for identification.")
with open('hosts-in.csv',encoding='utf8') as csvfile,open('serials.csv','w') as csvfile_out:
csvreader = csv.reader(csvfile, delimiter=',')
csvwriter = csv.writer(csvfile_out)
next(csvreader)
USER_NAME = input("Please enter BMC username:")
PASSWORD=getpass.getpass()
i = 1
SN_PATTERN=re.compile('number=\w{10}')
for row in csvreader:
print(i)
HOST_NAME = ("ceph01-block02-"+row[0]+"-bmc")
LICENSE_KEY = (row[7])
SYSTEM_HOST_NAME = ("ceph01-block02-"+row[0])
print(HOST_NAME)
#print(LICENSE_KEY)
USER_NAME = "admin"
BMC_NAME = (row[1])
SYSTEM_NAME = (row[0])
print(BMC_NAME)
if i > 0:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=HOST_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
client.connect(hostname=BMC_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
#command = ("OemHPE_licenseinstall /map1/oemHPE_license1 "+LICENSE_KEY)
command = ("show /system1 number")
stdin, stdout, stderr = client.exec_command(command)
SERIAL_NUMBER_OUT=stdout.read()
SERIAL_NUMBER=(str(SN_PATTERN.findall(str(SERIAL_NUMBER_OUT)))[-12:-2])
csvwriter.writerow([SYSTEM_HOST_NAME,SERIAL_NUMBER])
csvwriter.writerow([SYSTEM_NAME,SERIAL_NUMBER])
i += 1

1
hosts-in-example.csv Normal file
View file

@ -0,0 +1 @@
hostname,bmc_name
1 hostname bmc_name

52
set-DNS.py Normal file
View file

@ -0,0 +1,52 @@
import csv
import sys
import argparse
import paramiko
import getpass
import logging
#Configure and commence logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename='python.log', level=logging.DEBUG)
logger.debug('logging start')
#Set up argument parsing
parser = argparse.ArgumentParser(prog="set-DNS.py", description="set DNS on iLO")
parser.add_argument('-o', '--read', help="Read only mode. Does not make changes. Currently the only mode that does anything", action='store_true')
parser.add_argument('-v', '--verbose')
args = parser.parse_args()
print(args)
print(args.read)
with open('hosts-in.csv',encoding='utf8') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
next(csvreader)
USER_NAME = input("Please enter BMC username:")
PASSWORD=getpass.getpass()
i = 1
for row in csvreader:
print(i)
i += 1
BMC_NAME = (row[1])
print(BMC_NAME)
if i > 0:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=BMC_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
DNSout = ("show map1/settings1/DNSSettings1")
#SetDNS = ("set map1/settings1/DNSSettings1 DNSServerAddress=0.0.0.0")
#SetDNSDomain = ("set map1/settings1/DNSSettings1 DomainName=")
if args.read:
stdin, stdout, stderr = client.exec_command(DNSout)
print(stdout.read())
#else:
#stdin, stdout, stderr = client.exec_command(SetDNS)
#print(stdout.read())

View file

@ -1,29 +1,36 @@
import csv
import argparse
import paramiko
import getpass
import logging
#Configure and commence logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename='python.log', level=logging.DEBUG)
logger.debug('logging start')
with open('ceph-license-keys.csv',encoding='utf8') as csvfile:
#Set up argument parsing
parser = argparse.ArgumentParser("set-ipmi-enabled.py")
parser.add_argument(help="This script will take every host BMC in the hosts-in.csv list and set map1/config1 oemHPE_ipmi_dcmi_overlan_enable=yes on it.")
with open('hosts-in.csv',encoding='utf8') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
next(csvreader)
USER_NAME = input("Please enter BMC username:")
PASSWORD=getpass.getpass()
i = 1
for row in csvreader:
print(i)
i += 1
HOST_NAME = ("ceph01-block02-"+row[0]+"-bmc")
SYSTEM_NAME = ("ceph01-block02-"+row[0])
print(HOST_NAME)
print(SYSTEM_NAME)
USER_NAME = "admin"
BMC_NAME = (row[1])
print(BMC_NAME)
if i > 0:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=HOST_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
client.connect(hostname=BMC_NAME, look_for_keys=False, port=22, username=USER_NAME, password=PASSWORD, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})
command = ("set map1/config1 oemHPE_ipmi_dcmi_overlan_enable=yes")
#command = ("show map1/config1 oemHPE_ipmi_dcmi_overlan_enable")
stdin, stdout, stderr = client.exec_command(command)
print(stdout.read())