Add "Add new DNS server" button

Added a button which allows the user to add new DNS Servers.
After pressing the button a new empty field appears.

Resolves openbmc/openbmc#3089

Tested: Added several new DNS Servers on a Witherspoon.
Change-Id: Ic6a6d2b798ad177b0e9aeb64ba3e4993af442305
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
diff --git a/app/configuration/controllers/network-controller.html b/app/configuration/controllers/network-controller.html
index dc81ed3..f6d0a5d 100644
--- a/app/configuration/controllers/network-controller.html
+++ b/app/configuration/controllers/network-controller.html
@@ -80,6 +80,7 @@
 							<label for="net-config__prime-dns">DNS Server {{$index+1}}</label>
 							<input id="net-config__prime-dns" type="text" ng-model="dns" ng-blur="interface.Nameservers[$index] = dns"/>
 						</fieldset>
+						<button type="button" class="btn-primary inline" ng-click="interface.Nameservers.push('');">Add new DNS server</button>
 				</div>
 			</fieldset>
 			<div class="network-config__submit-wrapper">
diff --git a/app/configuration/controllers/network-controller.js b/app/configuration/controllers/network-controller.js
index 4e8a7e0..b0daefd 100644
--- a/app/configuration/controllers/network-controller.js
+++ b/app/configuration/controllers/network-controller.js
@@ -55,6 +55,11 @@
           promises.push(setDHCPEnabled());
         }
 
+        // Remove any empty strings from the array. Important because we add an
+        // empty string to the end so the user can add a new DNS server, if the
+        // user doesn't fill out the field, we don't want to add.
+        $scope.interface.Nameservers =
+            $scope.interface.Nameservers.filter(Boolean);
         // toString() is a cheap way to compare 2 string arrays
         if ($scope.interface.Nameservers.toString() !=
             $scope.old_interface.Nameservers.toString()) {
@@ -171,6 +176,11 @@
       }
 
       function setNameservers() {
+        // Nameservers does not allow an empty array, since we remove all empty
+        // strings above, could have an empty array.
+        if ($scope.interface.Nameservers.length == 0) {
+          $scope.interface.Nameservers.push('');
+        }
         return APIUtils
             .setNameservers(
                 $scope.selectedInterface, $scope.interface.Nameservers)