Add and Update IPV4 address
This allows user to add IPV4 addresses
and updates logic for editing IPV4
addresses.
Resolves openbmc/phosphor-webui#12
Tested: Added, removed and modified IPV4
addresses, called API to verify that
addresses had been correctly modified.
Verified that if address had not been
modified, no change was made for that
address.
Change-Id: I3dd25565f4f610dce2023e23348f6eb8d00add3d
Signed-off-by: beccabroek <beccabroek@gmail.com>
diff --git a/app/configuration/controllers/network-controller.html b/app/configuration/controllers/network-controller.html
index 287698f..4b75b28 100644
--- a/app/configuration/controllers/network-controller.html
+++ b/app/configuration/controllers/network-controller.html
@@ -54,20 +54,25 @@
<div class="row column network-config__ipv4-wrap">
<fieldset class="net-config__static-ip-wrap" ng-repeat="ipv4 in interface.ipv4.values track by $index">
<div class="column small-12 large-3">
- <label for="net-config__ipv4-address">IPV4 address</label>
- <input id="net-config__ipv4-address" type="text" ng-disabled="interface.DHCPEnabled" ng-model="ipv4.Address"/>
+ <label>IPV4 address</label>
+ <input id="ipv4-address-{{$index+1}}" ng-change="ipv4.update_address = true" type="text" ng-disabled="interface.DHCPEnabled" ng-model="ipv4.Address"/>
</div>
<div class="column small-12 large-3">
- <label for="net-config__subnet">Gateway</label>
- <input id="net-config__subnet" type="text" ng-disabled="interface.DHCPEnabled" value="" ng-model="ipv4.Gateway"/>
+ <label>Gateway</label>
+ <input id="ipv4-gateway-{{$index+1}}" ng-change="ipv4.update_gateway = true" type="text" ng-disabled="interface.DHCPEnabled" value="" ng-model="ipv4.Gateway"/>
</div>
<!-- This netmask prefix length max only works with IPV4 -->
<div class="column small-12 large-6">
- <label for="net-config__default-gateway">Netmask Prefix Length</label>
- <input id="net-config__default-gateway" class="column small-6" type="number" min="1" max="32" step="1" ng-disabled="interface.DHCPEnabled" ng-model="ipv4.PrefixLength"/>
+ <label>Netmask Prefix Length</label>
+ <input id="ipv4-prefix-{{$index+1}}" class="column small-6" ng-change="ipv4.update_prefix = true" type="number" min="1" max="32" step="1" ng-disabled="interface.DHCPEnabled" ng-model="ipv4.PrefixLength"/>
<button class="network-config_remove-button inline" ng-click="removeIpv4Address($index)">Remove</button>
</div>
</fieldset>
+ <div class="row column">
+ <div class="column small-12">
+ <button type="button" class="btn-primary inline" ng-click="addIpv4Field()">Add IPV4 address</button>
+ </div>
+ </div>
</div>
</fieldset>
</section>
@@ -85,7 +90,9 @@
</div>
</fieldset>
<div class="row column">
- <button type="button" class="btn-primary inline dns_add" ng-click="addDNSField()">Add new DNS server</button>
+ <div class="column small-12">
+ <button type="button" class="btn-primary inline dns_add" ng-click="addDNSField()">Add DNS server</button>
+ </div>
</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 a9546d4..92da0b2 100644
--- a/app/configuration/controllers/network-controller.js
+++ b/app/configuration/controllers/network-controller.js
@@ -44,6 +44,11 @@
$scope.interface.Nameservers.splice(index, 1);
};
+ $scope.addIpv4Field = function() {
+ $scope.interface.ipv4.values.push(
+ {Address: '', PrefixLength: '', Gateway: ''});
+ };
+
$scope.removeIpv4Address = function(index) {
// Check if the IPV4 being removed has an id. This indicates that it is
// an existing address and needs to be removed in the back end.
@@ -91,7 +96,7 @@
if (!$scope.interface.DHCPEnabled) {
// Delete existing IPV4 addresses that were removed
promises.push(removeIPV4s());
- // Update any changed IPV4 addresses
+ // Update any changed IPV4 addresses and add new
for (var i in $scope.interface.ipv4.values) {
if (!APIUtils.validIPV4IP(
$scope.interface.ipv4.values[i].Address)) {
@@ -117,13 +122,18 @@
$scope.loading = false;
return;
}
- if ($scope.interface.ipv4.values[i].Address !=
- $scope.old_interface.ipv4.values[i].Address ||
- $scope.interface.ipv4.values[i].PrefixLength !=
- $scope.old_interface.ipv4.values[i].PrefixLength ||
- $scope.interface.ipv4.values[i].Gateway !=
- $scope.old_interface.ipv4.values[i].Gateway) {
- promises.push(setIPV4(i));
+ if ($scope.interface.ipv4.values[i].update_address ||
+ $scope.interface.ipv4.values[i].update_gateway ||
+ $scope.interface.ipv4.values[i].update_prefix) {
+ // If IPV4 has an id it means it already exists in the back end,
+ // and in order to update it is required to remove previous IPV4
+ // address and add new one. See openbmc/openbmc/issues/2163.
+ // TODO: update to use PUT once issue 2163 is resolved.
+ if ($scope.interface.ipv4.values[i].id) {
+ promises.push(updateIPV4(i));
+ } else {
+ promises.push(addIPV4(i));
+ }
}
}
}
@@ -227,12 +237,29 @@
});
}
- function setIPV4(index) {
+ function addIPV4(index) {
+ return APIUtils
+ .addIPV4(
+ $scope.selectedInterface,
+ $scope.interface.ipv4.values[index].Address,
+ $scope.interface.ipv4.values[index].PrefixLength,
+ $scope.interface.ipv4.values[index].Gateway)
+ .then(
+ function(data) {},
+ function(error) {
+ console.log(JSON.stringify(error));
+ $scope.set_network_error =
+ $scope.interface.ipv4.values[index].Address;
+ })
+ }
+
+ function updateIPV4(index) {
// The correct way to edit an IPV4 interface is to remove it and then
// add a new one
return APIUtils
.deleteIPV4(
- $scope.selectedInterface, $scope.interface.ipv4.ids[index])
+ $scope.selectedInterface,
+ $scope.interface.ipv4.values[index].id)
.then(
function(data) {
return APIUtils
@@ -278,9 +305,12 @@
// page
$scope.old_interface = JSON.parse(JSON.stringify($scope.interface));
}
- // Add id values to corresponding IPV4 objects
+ // Add id values and update flags to corresponding IPV4 objects
for (var i = 0; i < $scope.interface.ipv4.values.length; i++) {
$scope.interface.ipv4.values[i].id = $scope.interface.ipv4.ids[i];
+ $scope.interface.ipv4.values[i].update_address = false;
+ $scope.interface.ipv4.values[i].update_gateway = false;
+ $scope.interface.ipv4.values[i].update_prefix = false;
}
});
}