Refactor and modularize edgeconfig scripts

- Entirely new netbox helper functions, using pynetbox and objects,
  instead of previous spaghetti code
- Allow for VM interfaces
- Allow device names to specify more than one segment of the DNS subdomain
- Split out forward and reverse DNS
- Fix issues with DHCP zone creation
- Support advertising NTP server via DHCP option

Playbooks
- Add QA, router, DNS, and user creation/config playbook
- Fix YAML formatting issues with playbooks

Change-Id: Id6c010ef1e122f4fd1bd97e9bb2128c4271947d0
diff --git a/playbooks/aethercompute-playbook.yml b/playbooks/aethercompute-playbook.yml
index d88483a..ba97a0f 100644
--- a/playbooks/aethercompute-playbook.yml
+++ b/playbooks/aethercompute-playbook.yml
@@ -1,3 +1,4 @@
+---
 # Ansible playbook to configure aether compute nodes
 
 - name: Configure aether compute nodes
diff --git a/playbooks/aetherfabric-playbook.yml b/playbooks/aetherfabric-playbook.yml
index e5c0a36..5c47a5c 100644
--- a/playbooks/aetherfabric-playbook.yml
+++ b/playbooks/aetherfabric-playbook.yml
@@ -1,3 +1,4 @@
+---
 # Ansible playbook to configure aether fabric switches
 
 - name: Configure aether fabric switches
diff --git a/playbooks/aethermgmt-playbook.yml b/playbooks/aethermgmt-playbook.yml
index 39be1c4..6e9d2d9 100644
--- a/playbooks/aethermgmt-playbook.yml
+++ b/playbooks/aethermgmt-playbook.yml
@@ -1,3 +1,4 @@
+---
 # Ansible playbook to configure an aether management nodes
 
 - name: Configure an aether management node
@@ -7,6 +8,7 @@
     - netprep
     - nsd
     - unbound
+    - chrony
     - dhcpd
     - nginx
     - onieboot
diff --git a/playbooks/dns-playbook.yml b/playbooks/dns-playbook.yml
index 33c4c9b..5c69990 100644
--- a/playbooks/dns-playbook.yml
+++ b/playbooks/dns-playbook.yml
@@ -6,3 +6,4 @@
   become: true
   roles:
     - nsd
+    - unbound
diff --git a/playbooks/ntp-playbook.yml b/playbooks/ntp-playbook.yml
new file mode 100644
index 0000000..9aeb92d
--- /dev/null
+++ b/playbooks/ntp-playbook.yml
@@ -0,0 +1,9 @@
+---
+# Ansible playbook to configure an aether management nodes
+
+- name: Configure an aether management node with chrony ntp
+  hosts: aethermgmt
+  become: true
+  roles:
+    - chrony
+    - dhcpd
diff --git a/playbooks/pxeboot-playbook.yml b/playbooks/pxeboot-playbook.yml
new file mode 100644
index 0000000..910ca3c
--- /dev/null
+++ b/playbooks/pxeboot-playbook.yml
@@ -0,0 +1,9 @@
+---
+# Ansible playbook to configure a iPXE pxeboot webserver
+
+- name: Configure a pxeboot chainload webserver for iPXE
+  hosts: static,pxeboot
+  become: true
+  roles:
+    - nginx
+    - pxeboot
diff --git a/playbooks/pxeboot-playboot.yml b/playbooks/pxeboot-playboot.yml
deleted file mode 100644
index 3cbdae0..0000000
--- a/playbooks/pxeboot-playboot.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-# Ansible playbook to configure a iPXE pxeboot webserver
-
-- name: Configure pxeboot
-  hosts: static
-  become: true
-  roles:
-    - pxeboot
diff --git a/playbooks/qa-playbook.yml b/playbooks/qa-playbook.yml
new file mode 100644
index 0000000..d81b35f
--- /dev/null
+++ b/playbooks/qa-playbook.yml
@@ -0,0 +1,26 @@
+---
+# Ansible playbook to configure uses on a set of nodes
+
+- name: Configure users and extra software for QA tasks on the compute nodes
+  hosts: aethercompute:aethermgmt
+  become: true
+
+  roles:
+    - users
+
+  tasks:
+
+    - name: Install QA packages
+      apt:
+        name:
+          - "arping"
+          - "ethtool"
+          - "iperf"
+          - "ipvsadm"
+          - "tcpdump"
+          - "tcpreplay"
+          - "traceroute"
+          - "tshark"
+        state: "present"
+        update_cache: true
+        cache_valid_time: 3600
diff --git a/playbooks/router-playbook.yml b/playbooks/router-playbook.yml
new file mode 100644
index 0000000..ca614a1
--- /dev/null
+++ b/playbooks/router-playbook.yml
@@ -0,0 +1,15 @@
+---
+# Ansible playbook to configure a router
+
+- name: Configure a router
+  hosts: router
+  become: true
+  roles:
+#   - netprep
+    - nsd
+    - unbound
+    - dhcpd
+#   - nginx
+#   - onieboot
+#   - users
+
diff --git a/playbooks/users-playbook.yml b/playbooks/users-playbook.yml
new file mode 100644
index 0000000..1bcc8ef
--- /dev/null
+++ b/playbooks/users-playbook.yml
@@ -0,0 +1,9 @@
+---
+# Ansible playbook to configure uses on a set of nodes
+
+- name: Configure users
+  hosts: all
+  become: true
+
+  roles:
+    - users