add_aaa.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env python3
  2. import argparse
  3. import sys
  4. import re
  5. import subprocess
  6. import os
  7. def main():
  8. parser = argparse.ArgumentParser(
  9. prog=sys.argv[0], description="Add a VLAN to the core"
  10. )
  11. parser.add_argument(
  12. "--key", metavar="<TACACS_KEY>", help="Clear text TACACS+ key", required=True
  13. )
  14. parser.add_argument(
  15. "--username",
  16. "-u",
  17. metavar="<USERNAME>",
  18. help="Username to use to connect to the N9Ks",
  19. required=True,
  20. )
  21. parser.add_argument(
  22. "--site",
  23. "-s",
  24. metavar="<SITE NAME>",
  25. help="Name of site to which to add N9Ks (default: all sites)",
  26. )
  27. args = parser.parse_args()
  28. os.environ["ANSIBLE_FORCE_COLOR"] = "True"
  29. os.environ["ANSIBLE_HOST_KEY_CHECKING"] = "False"
  30. os.environ["ANSIBLE_PERSISTENT_COMMAND_TIMEOUT"] = "300"
  31. command = [
  32. "ansible-playbook",
  33. "-i",
  34. "inventory/hosts",
  35. "-u",
  36. args.username,
  37. "-k",
  38. "-e",
  39. "tacacs_key={}".format(args.key),
  40. "-e",
  41. "ansible_python_interpreter={}".format(sys.executable),
  42. "add-aaa-playbook.yml",
  43. ]
  44. if args.site:
  45. command += ["--limit", args.site]
  46. p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  47. for c in iter(lambda: p.stdout.read(1), b""):
  48. sys.stdout.write(c.decode("utf-8"))
  49. sys.stdout.flush()
  50. if __name__ == "__main__":
  51. main()