1eb92d5fade78e1ccb94f1934dfc9b08f660d00e
13 def get_argument_parser():
14 parser
= argparse
.ArgumentParser(
15 prog
="update_dns_entry.py",
16 description
="Generate fixed-address DHCP configuration based for hosts based on DNS entries",
19 "-s", "--server", default
=None, required
=True, help="Server for DNS updates"
22 "-u", "--user", default
=None, help="The user to use with samba-tool"
25 "-z", "--zone", required
=True, help="The zone in which to update the entry"
27 parser
.add_argument("-n", "--name", required
=True, help="DNS entry name")
28 parser
.add_argument("-v", "--value", required
=True, help="DNS entry value")
29 parser
.add_argument("-t", "--type", default
="A", help="Entry type")
34 server
, zone
, name
, entry_type
, value
, user
=None, with_reverse
=True
37 assert ipaddress
.ip_address(value
)
39 server_ip
= str(ipaddress
.ip_address(server
))
41 server_ip
= dns
.resolver
.resolve(server
)[0].to_text()
44 # Verify existing entry
45 query
= dns
.message
.make_query(".".join([name
, zone
]), entry_type
)
46 record
= dns
.query
.udp(query
, server_ip
)
47 if len(record
.answer
) == 0:
49 argv
= ["samba-tool", "dns", "add", server
, zone
, name
, entry_type
, value
]
54 assert len(record
.answer
) == 1
56 existing
= (record
.answer
)[0][0].to_text()
75 if with_reverse
and entry_type
== "A":
76 rname
, rzone
= ipaddress
.ip_address(value
).reverse_pointer
.split(".", 1)
77 rvalue
= ".".join([name
, zone
]) + "."
79 query
= dns
.message
.make_query(
80 ipaddress
.ip_address(value
).reverse_pointer
, rtype
82 record
= dns
.query
.udp(query
, server_ip
)
83 if len(record
.answer
) == 0:
84 argv
= ["samba-tool", "dns", "add", server
, rzone
, rname
, rtype
, rvalue
]
89 assert len(record
.answer
) == 1
90 existing
= (record
.answer
)[0][0].to_text()
105 commands
.append(argv
)
108 for command
in commands
:
109 subprocess
.run(command
, check
=True)
112 if __name__
== "__main__":
113 parser
= get_argument_parser()
114 args
= parser
.parse_args()
116 args
.server
, args
.zone
, args
.name
, args
.type, args
.value
, user
=args
.user
This page took 0.033878 seconds and 5 git commands to generate.