mirror of
https://github.com/Matir/skel.git
synced 2026-05-25 21:19:09 -07:00
Add add_hosts_entry script
This commit is contained in:
70
bin/add_hosts_entry
Normal file
70
bin/add_hosts_entry
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# vim: set ft=python:
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import ipaddress
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import sys.path
|
||||||
|
|
||||||
|
|
||||||
|
def generate_hosts_entry(ip_address_str, hostnames):
|
||||||
|
"""
|
||||||
|
Generates a string formatted for /etc/hosts after validating the IP address.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ip_address_str (str): The IP address string.
|
||||||
|
hostnames (list): A list of hostname strings.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: A formatted string for /etc/hosts, or None if validation fails.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# Validate the IP address
|
||||||
|
ip = ipaddress.ip_address(ip_address_str)
|
||||||
|
except ValueError:
|
||||||
|
print(f"Error: '{ip_address_str}' is not a valid IP address.", file=sys.stderr)
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Join hostnames with spaces
|
||||||
|
hostnames_str = " ".join(hostnames)
|
||||||
|
|
||||||
|
# Return the formatted line
|
||||||
|
return f"{ip} {hostnames_str}"
|
||||||
|
|
||||||
|
|
||||||
|
def append_hosts_entry(entry, hosts_file="/etc/hosts"):
|
||||||
|
when = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||||
|
try:
|
||||||
|
with open(hosts_file, "a") as fp:
|
||||||
|
fp.write(f"# Added by add_hosts_entry {when}\n{entry}\n")
|
||||||
|
return True
|
||||||
|
except PermissionError:
|
||||||
|
if os.geteuid() == 0:
|
||||||
|
print(f"Error: failed opening {hosts_file} for writing.",
|
||||||
|
file=sys.stderr)
|
||||||
|
return False
|
||||||
|
return relaunch_with_sudo()
|
||||||
|
|
||||||
|
|
||||||
|
def relaunch_with_sudo():
|
||||||
|
script_abspath = os.path.abspath(sys.argv[0])
|
||||||
|
os.execvp("sudo", [script_abspath] + sys.argv[1:])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Check for correct number of arguments
|
||||||
|
if len(sys.argv) < 3:
|
||||||
|
print("Usage: python3 generate_hosts_entry.py <ip_address> <hostname1> [hostname2 ...]", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
ip_to_add = sys.argv[1]
|
||||||
|
hostnames_to_add = sys.argv[2:]
|
||||||
|
|
||||||
|
# Generate the entry
|
||||||
|
entry = generate_hosts_entry(ip_to_add, hostnames_to_add)
|
||||||
|
if not entry:
|
||||||
|
sys.exit(1)
|
||||||
|
if not append_hosts_entry(entry):
|
||||||
|
sys.exit(1)
|
||||||
Reference in New Issue
Block a user