Mike Kolesnik has uploaded a new change for review.

Change subject: engine: Command for adding external subnets
......................................................................

engine: Command for adding external subnets

Using this command it's possible to add an external subnet on a
OpenStack Network provider.

Change-Id: I92ac30f46c1aa20677da34719fd33eec6b964899
Signed-off-by: Mike Kolesnik <mkole...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
M 
backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
8 files changed, 165 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/22688/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java
new file mode 100644
index 0000000..5733fc4
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java
@@ -0,0 +1,96 @@
+package org.ovirt.engine.core.bll.provider.network;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.ovirt.engine.core.bll.CommandBase;
+import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
+import org.ovirt.engine.core.bll.provider.ProviderProxyFactory;
+import org.ovirt.engine.core.bll.provider.ProviderValidator;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.AddExternalSubnetParameters;
+import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import org.ovirt.engine.core.common.businessentities.Provider;
+import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.core.common.businessentities.network.ProviderNetwork;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.compat.Guid;
+
+@NonTransactiveCommandAttribute
+public class AddSubnetToProviderCommand<T extends AddExternalSubnetParameters> 
extends CommandBase<T> {
+
+    private Provider<?> provider;
+
+    private ProviderNetwork externalNetwork;
+
+    public AddSubnetToProviderCommand(T parameters) {
+        super(parameters);
+    }
+
+
+    private Provider<?> getProvider() {
+        if (provider == null) {
+            provider = 
getDbFacade().getProviderDao().get(getExternalNetwork().getProviderId());
+        }
+
+        return provider;
+    }
+
+
+    private ProviderNetwork getExternalNetwork() {
+        if (externalNetwork == null) {
+            Network network = 
getNetworkDAO().get(getParameters().getNetworkId());
+            externalNetwork = network.getProvidedBy();
+        }
+
+        return externalNetwork;
+    }
+
+    public String getProviderName() {
+        return getProvider().getName();
+    }
+
+    private ExternalSubnet getSubnet() {
+        return getParameters().getSubnet();
+    }
+
+    public String getSubnetName() {
+        return getSubnet().getName();
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        ProviderValidator validator = new ProviderValidator(getProvider());
+
+        return validate(validator.providerIsSet()) && super.canDoAction();
+    }
+
+    @Override
+    protected void executeCommand() {
+        NetworkProviderProxy proxy = 
ProviderProxyFactory.getInstance().create(getProvider());
+        getSubnet().setExternalNetwork(getExternalNetwork());
+        proxy.addSubnet(getSubnet());
+        setSucceeded(true);
+    }
+
+    @Override
+    protected void setActionMessageParameters() {
+        addCanDoActionMessage(VdcBllMessages.VAR__TYPE__SUBNET);
+        addCanDoActionMessage(VdcBllMessages.VAR__ACTION__ADD);
+    }
+
+    @Override
+    public AuditLogType getAuditLogTypeValue() {
+        return getSucceeded() ? AuditLogType.SUBNET_ADDED : 
AuditLogType.SUBNET_ADDITION_FAILED;
+    }
+
+    @Override
+    public List<PermissionSubject> getPermissionCheckSubjects() {
+        return Collections.singletonList(new PermissionSubject(Guid.SYSTEM,
+                VdcObjectType.System,
+                ActionGroup.CREATE_STORAGE_POOL));
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java
index 9234a7a..6c30011 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java
@@ -38,6 +38,14 @@
     List<ExternalSubnet> getAllSubnets(ProviderNetwork network);
 
     /**
+     * Add the subnet to be managed by the provider.
+     *
+     * @param subnet
+     *            The subnet to add.
+     */
+    void addSubnet(ExternalSubnet subnet);
+
+    /**
      * Remove the subnet from the provider.
      *
      * @param id
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java
index 8a2274f..bc03c7c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java
@@ -33,6 +33,7 @@
 import com.woorea.openstack.quantum.model.Networks;
 import com.woorea.openstack.quantum.model.Port;
 import com.woorea.openstack.quantum.model.Subnet;
+import com.woorea.openstack.quantum.model.SubnetForCreate;
 import com.woorea.openstack.quantum.model.Subnets;
 
 public class OpenstackNetworkProviderProxy implements NetworkProviderProxy {
@@ -136,6 +137,23 @@
     }
 
     @Override
+    public void addSubnet(ExternalSubnet subnet) {
+        com.woorea.openstack.quantum.model.Network externalNetwork = 
getExternalNetwork(subnet.getExternalNetwork());
+        SubnetForCreate subnetForCreate = new SubnetForCreate();
+        subnetForCreate.setCidr(subnet.getCidr());
+        subnetForCreate.setIpVersion(subnet.getIpVersion() == IpVersion.IPV6 ? 
6 : 4);
+        subnetForCreate.setName(subnet.getName());
+        subnetForCreate.setNetworkId(externalNetwork.getId());
+        subnetForCreate.setTenantId(externalNetwork.getTenantId());
+
+        try {
+            getClient().subnets().create(subnetForCreate).execute();
+        } catch (RuntimeException e) {
+            throw new VdcBLLException(VdcBllErrors.PROVIDER_FAILURE, e);
+        }
+    }
+
+    @Override
     public void removeSubnet(String id) {
         try {
             getClient().subnets().delete(id).execute();
@@ -199,7 +217,7 @@
             List<String> securityGroups = getSecurityGroups(vnicProfile);
             if (port == null) {
                 com.woorea.openstack.quantum.model.Network externalNetwork =
-                        
getClient().networks().show(network.getProvidedBy().getExternalId()).execute();
+                        getExternalNetwork(network.getProvidedBy());
                 Port portForCreate = new Port();
                 portForCreate.setAdminStateUp(true);
                 portForCreate.setName(nic.getName());
@@ -228,6 +246,10 @@
         }
     }
 
+    private com.woorea.openstack.quantum.model.Network 
getExternalNetwork(ProviderNetwork providerNetwork) {
+        return 
getClient().networks().show(providerNetwork.getExternalId()).execute();
+    }
+
     private boolean securityGroupsChanged(List<String> existingSecurityGroups, 
List<String> desiredSecurityGroups) {
         return !CollectionUtils.isEqualCollection(
                 existingSecurityGroups == null ? Collections.emptyList() : 
existingSecurityGroups,
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
index e7fdd6e..fbbddd4 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
@@ -601,6 +601,8 @@
     REMOVE_VNIC_PROFILE_FAILED(1127),
     NETWORK_WITHOUT_INTERFACES(1128),
     VNIC_PROFILE_UNSUPPORTED_FEATURES(1129, 
AuditLogTimeInterval.DAY.getValue()),
+    SUBNET_ADDED(1130),
+    SUBNET_ADDITION_FAILED(1131),
     SUBNET_REMOVED(1132),
     SUBNET_REMOVAL_FAILED(1133),
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java
new file mode 100644
index 0000000..dbee162
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java
@@ -0,0 +1,31 @@
+package org.ovirt.engine.core.common.action;
+
+import javax.validation.constraints.NotNull;
+
+import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet;
+import org.ovirt.engine.core.compat.Guid;
+
+public class AddExternalSubnetParameters extends ExternalSubnetParameters {
+
+    private static final long serialVersionUID = 1065284644633155727L;
+
+    @NotNull
+    private Guid networkId;
+
+    public AddExternalSubnetParameters() {
+    }
+
+    public AddExternalSubnetParameters(ExternalSubnet subnet, Guid networkId) {
+        super(subnet);
+        this.networkId = networkId;
+    }
+
+    public Guid getNetworkId() {
+        return networkId;
+    }
+
+    public void setNetworkId(Guid networkId) {
+        this.networkId = networkId;
+    }
+
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index 560c853..c1a0daf 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -285,6 +285,7 @@
     TestProviderConnectivity(1603, false, QuotaDependency.NONE),
     ImportProviderCertificateChain(1604, false, QuotaDependency.NONE),
     AddNetworkOnProvider(1605, ActionGroup.CREATE_STORAGE_POOL_NETWORK, false, 
QuotaDependency.NONE),
+    AddSubnetToProvider(1606, false, QuotaDependency.NONE),
     RemoveSubnetFromProvider(1607, false, QuotaDependency.NONE),
 
     AddWatchdog(1700, ActionGroup.EDIT_VM_PROPERTIES, QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
index 184b899..693e911 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
@@ -820,6 +820,8 @@
         severities.put(AuditLogType.REMOVE_VNIC_PROFILE_FAILED, 
AuditLogSeverity.ERROR);
         severities.put(AuditLogType.NETWORK_WITHOUT_INTERFACES, 
AuditLogSeverity.WARNING);
         severities.put(AuditLogType.VNIC_PROFILE_UNSUPPORTED_FEATURES, 
AuditLogSeverity.WARNING);
+        severities.put(AuditLogType.SUBNET_ADDED, AuditLogSeverity.NORMAL);
+        severities.put(AuditLogType.SUBNET_ADDITION_FAILED, 
AuditLogSeverity.ERROR);
         severities.put(AuditLogType.SUBNET_REMOVED, AuditLogSeverity.NORMAL);
         severities.put(AuditLogType.SUBNET_REMOVAL_FAILED, 
AuditLogSeverity.ERROR);
     }
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
index 3d91852..29c683c 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
@@ -448,6 +448,8 @@
 PROVIDER_REMOVAL_FAILED=Failed to remove provider ${ProviderName}. (User: 
${UserName})
 PROVIDER_CERTIFICATE_CHAIN_IMPORTED=Certificate chain for provider 
${ProviderName} was imported. (User: ${UserName})
 PROVIDER_CERTIFICATE_CHAIN_IMPORT_FAILED=Failed importing Certificate chain 
for provider ${ProviderName}. (User: ${UserName})
+SUBNET_ADDED=Subnet ${SubnetName} was added on provider ${ProviderName}. 
(User: ${UserName})
+SUBNET_ADDITION_FAILED=Failed to add subnet ${SubnetName} on provider 
${ProviderName}. (User: ${UserName})
 SUBNET_REMOVED=Subnet ${SubnetName} was removed from provider ${ProviderName}. 
(User: ${UserName})
 SUBNET_REMOVAL_FAILED=Failed to remove subnet ${SubnetName} from provider 
${ProviderName}. (User: ${UserName})
 NETWORK_ADD_NETWORK=Network ${NetworkName} was added to Data Center: 
${StoragePoolName}


-- 
To view, visit http://gerrit.ovirt.org/22688
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I92ac30f46c1aa20677da34719fd33eec6b964899
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to