diff options
author | lj1412 <lji@research.att.com> | 2017-02-14 15:11:37 +0000 |
---|---|---|
committer | lj1412 <lji@research.att.com> | 2017-02-14 15:11:39 +0000 |
commit | 21f2f785e12c961a7c19dbf6aecc0f7dd136506d (patch) | |
tree | bc7da0bb678cfe2c6d75eb8f78b5eb1b9e98aabe /ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers | |
parent | 48b5b4b734db2b757ad9091129cdeca2b2a26c5c (diff) |
Init ncomp.openstack
Change-Id: Ica7bc6ac64c8359e7e3d9846450f9fe15dd38146
Signed-off-by: lj1412 <lji@research.att.com>
Diffstat (limited to 'ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers')
2 files changed, 452 insertions, 0 deletions
diff --git a/ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers/openstack/OsOpenStackControllerProvider.java b/ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers/openstack/OsOpenStackControllerProvider.java new file mode 100644 index 0000000..07941a9 --- /dev/null +++ b/ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers/openstack/OsOpenStackControllerProvider.java @@ -0,0 +1,161 @@ + +/*- + * ============LICENSE_START========================================== + * OPENECOMP - DCAE + * =================================================================== + * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + */ + +package org.openecomp.ncomp.servers.openstack; + +import java.util.Date; +import java.util.HashMap; + +import org.apache.log4j.Logger; +import org.json.JSONObject; + +import org.openecomp.logger.EcompLogger; +import org.openecomp.ncomp.openstack.OpenStackController; +import org.openecomp.ncomp.openstack.controller.tools.OpenStackUtil; +import org.openecomp.ncomp.openstack.location.OpenStackLocation; +import org.openecomp.ncomp.servers.openstack.logging.OpenStackAdaptorMessageEnum; +import org.openecomp.ncomp.servers.openstack.logging.OpenStackAdaptorOperationEnum; +import org.openecomp.ncomp.sirius.manager.BasicAdaptorProvider; +import org.openecomp.ncomp.sirius.manager.ISiriusServer; +import org.openecomp.ncomp.sirius.manager.ManagementServer; +import org.openecomp.ncomp.sirius.manager.ManagementServerError; +import org.openecomp.ncomp.sirius.manager.ManagementServerUtils; +import org.openecomp.ncomp.sirius.manager.server.ServerPackage; + +public class OsOpenStackControllerProvider extends BasicAdaptorProvider { + public static final Logger logger = Logger.getLogger(OsOpenStackControllerProvider.class); + static final EcompLogger ecomplogger = EcompLogger.getEcompLogger(); + private HashMap<String, OpenStackUtil> utils = new HashMap<String, OpenStackUtil>(); + private HashMap<String, Thread> pollers = new HashMap<String, Thread>(); + private HashMap<String, Date> lastPoll = new HashMap<String, Date>(); + private OpenStackController o; + private OsOpenStackControllerClient parent = null; + protected long pollingFrequency; + + public OsOpenStackControllerProvider(ISiriusServer controller, OpenStackController o) { + super(controller, o); + this.o = o; + for (OpenStackLocation l : o.getLocations()) { + if (!l.isRemoteLocation()) { + startOpenstackPolling(l); + } + } + if (controller.getServer().getProps().containsKey("openstackParent.endpoint")) { + parent = new OsOpenStackControllerClient("location.properties", "openstackParent"); + } + } + + private synchronized void startOpenstackPolling(final OpenStackLocation l) { + Thread t = pollers.get(l.getName()); + if (t != null && t.isAlive()) { + return; + } + t = new Thread("openstackPoller " + l.getName()) { + @Override + public void run() { + ecomplogger.setOperation(OpenStackAdaptorOperationEnum.POLLING); + while (true) { + Date lastPoll2 = lastPoll.get(l.getName()); + if (lastPoll2 == null || lastPoll2.getTime() + pollingFrequency < new Date().getTime()) { + try { + ecomplogger.newRequestId(); + ecomplogger.recordAuditEventStart(); + openstackPolling(l); + } catch (Exception e) { + ecomplogger.warn(OpenStackAdaptorMessageEnum.POLLING_FAILED, ManagementServer.object2ref(l)); + ManagementServerUtils.printStackTrace(e); + } + finally { + ecomplogger.recordAuditEventEnd(); + } + } + try { + Thread.sleep(30000); + } catch (InterruptedException e1) { + } + } + }; + }; + t.setDaemon(true); + t.start(); + pollers.put(l.getName(), t); + } + + protected void openstackPolling(OpenStackLocation l) { + if (! l.getKeystoneUrl().startsWith("http")) { + logger.warn("openstackPolling ignored no valid keystone url: " + l.getName() + " " + l.getKeystoneUrl()); + return; + } + logger.info("openstackPolling: " + l.getName()); + OpenStackUtil util = getUtil(l.getName()); + lastPoll.put(l.getName(), new Date()); + OpenStackLocation poll = util.poll(); + poll.setName(l.getName()); + poll.setRemoteLocationName(l.getName()); + logger.info("polling done: " + poll); + if (poll != null) { + try { + uploadOpenstackConfiguration(null, poll); + } catch (ManagementServerError e) { + logger.warn("uploadOpenstackConfiguration: " + e.getJson().toString(2)); + } + } + + } + + public static void ecoreSetup() { + ServerPackage.eINSTANCE.getClass(); + } + + public void uploadOpenstackConfiguration(JSONObject cx, OpenStackLocation loc) { + if (parent != null) { + parent.uploadOpenstackConfiguration(cx, loc); + } + } + + public void start() { + for (OpenStackLocation l : o.getLocations()) { + if (!l.isRemoteLocation()) { + startOpenstackPolling(l); + } + } + } + + public synchronized OpenStackUtil getUtil(String name) { + OpenStackUtil util = utils.get(name); + if (util == null) { + for (OpenStackLocation l : o.getLocations()) { + if (l.isRemoteLocation()) { + break; + } + if (!l.getName().equals(name)) + continue; + util = new OpenStackUtil(l, controller.getServer(), controller.getServer().getProps() + .getProperty("openstack.propertyfile", "openstack.properties")); + utils.put(name, util); + pollingFrequency = util.pollingFrequency; + return (util); + } + } + return (util); + } + +} diff --git a/ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers/openstack/loc/OsOpenStackLocationProvider.java b/ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers/openstack/loc/OsOpenStackLocationProvider.java new file mode 100644 index 0000000..3652555 --- /dev/null +++ b/ncomp-openstack-controller/src/main/java/org/openecomp/ncomp/servers/openstack/loc/OsOpenStackLocationProvider.java @@ -0,0 +1,291 @@ + +/*- + * ============LICENSE_START========================================== + * OPENECOMP - DCAE + * =================================================================== + * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + */ + +package org.openecomp.ncomp.servers.openstack.loc; + +import org.apache.log4j.Logger; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; + +import org.openecomp.ncomp.core.User; +import org.openecomp.ncomp.openstack.OpenStackController; +import org.openecomp.ncomp.openstack.ceilometer.CeilometerAlarm; +import org.openecomp.ncomp.openstack.ceilometer.CeilometerSample; +import org.openecomp.ncomp.openstack.ceilometer.CreateAlarmRequest; +import org.openecomp.ncomp.openstack.ceilometer.SampleRequest; +import org.openecomp.ncomp.openstack.compute.ComputeFactory; +import org.openecomp.ncomp.openstack.compute.OpenstackRequestFlavor; +import org.openecomp.ncomp.openstack.compute.OpenstackRequestKeyPair; +import org.openecomp.ncomp.openstack.compute.OpenstackRequestNewServer; +import org.openecomp.ncomp.openstack.compute.OpenstackRequestSecurityGroup; +import org.openecomp.ncomp.openstack.compute.OpenstackRequestServerAction; +import org.openecomp.ncomp.openstack.controller.tools.OpenStackUtil; +import org.openecomp.ncomp.openstack.controller.tools.OpenStackUtil.OpenStackControllerProject; +import org.openecomp.ncomp.openstack.core.CoreFactory; +import org.openecomp.ncomp.openstack.core.OpenstackRequestDelete; +import org.openecomp.ncomp.openstack.core.VirtualMachineType; +import org.openecomp.ncomp.openstack.location.OpenStackLocation; +import org.openecomp.ncomp.openstack.neutron.CreateRouterRequest; +import org.openecomp.ncomp.openstack.neutron.CreateSubnetRequest; +import org.openecomp.ncomp.openstack.neutron.CreatePortRequest; +import org.openecomp.ncomp.openstack.neutron.Network; +import org.openecomp.ncomp.openstack.neutron.NeutronObject; +import org.openecomp.ncomp.openstack.neutron.NeutronRequest; +import org.openecomp.ncomp.openstack.neutron.Router; +import org.openecomp.ncomp.openstack.neutron.Subnet; +import org.openecomp.ncomp.openstack.neutron.Port; +import org.openecomp.ncomp.servers.openstack.OsOpenStackController; +import org.openecomp.ncomp.servers.openstack.OsOpenStackControllerProvider; +import org.openecomp.ncomp.sirius.manager.BasicAdaptorProvider; +import org.openecomp.ncomp.sirius.manager.ISiriusPlugin; +import org.openecomp.ncomp.sirius.manager.ISiriusServer; +import org.openecomp.ncomp.sirius.manager.ManagementServer; +import org.openecomp.ncomp.sirius.manager.Subject; +import org.openecomp.ncomp.sirius.manager.server.Response; +import org.openecomp.ncomp.sirius.manager.server.ServerPackage; + +public class OsOpenStackLocationProvider extends BasicAdaptorProvider implements ISiriusPlugin { + public static final Logger logger = Logger.getLogger(OsOpenStackLocationProvider.class); + OpenStackUtil util; + private OpenStackLocation o; + + public OsOpenStackLocationProvider(ISiriusServer controller, OpenStackLocation o) { + super(controller, o); + this.o = o; + } + + public Network createNetwork(org.openecomp.ncomp.openstack.neutron.CreateNetworkRequest request) { + return (Network) handleNeutronRequest(request); + } + + public void createServer(OpenstackRequestNewServer request) { + initUtil(); + util.createServer(request); + } + + public Subnet createSubnet(CreateSubnetRequest request) { + initUtil(); + return (Subnet) handleNeutronRequest(request); + } + + public Port createPort(CreatePortRequest request) { + initUtil(); + return (Port) handleNeutronRequest(request); + } + + public void poll() { + initUtil(); + // TODO implement poll + // o.poll(); + } + + @Override + public void start() { + // TODO Auto-generated method stub + + } + + private void initUtil() { + if (util == null) { + OsOpenStackController c = (OsOpenStackController) o.eContainer(); + util = c.controller.getUtil(o.getName()); + } + if (util == null) { + throw new RuntimeException("Unable to create Openstack Util"); + } + } + + private NeutronObject handleNeutronRequest(NeutronRequest request) { + initUtil(); + OpenStackControllerProject p = util.findProject(request.getProjectName()); + if (p == null) { + throw new RuntimeException("unable to find project: " + request.getProjectName()); + } + return p.create(request); + } + + public void deleteNetwork(String projectName, String name) { + initUtil(); + OpenStackControllerProject p = util.findProject(projectName); + if (p == null) { + logger.warn("unable to find project: " + projectName + " " + name); + return; + } + p.deleteNeutron("network", name); + } + + public void deleteSubnet(String projectName, String name) { + initUtil(); + OpenStackControllerProject p = util.findProject(projectName); + if (p == null) { + logger.warn("unable to find project: " + projectName); + return; + } + p.deleteNeutron("subnet", name); + } + + public void deleteServer(String projectName, String name) { + initUtil(); + util.delete(projectName, "server", name); + } + + public void associateFloatingIp(String projectName, String ipId, String portId) { + initUtil(); + OpenStackControllerProject p = util.findProject(projectName); + if (p == null) { + logger.warn("unable to find project: " + projectName); + return; + } + p.associateFloatingIp(ipId, portId); + } + + public CeilometerAlarm createAlarm(CreateAlarmRequest request) { + throw new UnsupportedOperationException(); + } + + public void deleteAlarm(String projectName, String name) { + throw new UnsupportedOperationException(); + } + + public EList<CeilometerSample> createAlarm(SampleRequest request) { + throw new UnsupportedOperationException(); + } + + public static void ecoreSetup() { + ServerPackage.eINSTANCE.getClass(); + } + + public void createKeyPair(OpenstackRequestKeyPair request) { + initUtil(); + util.createKeypair(request.getProjectName(), request.getUser()); + } + + public void delete(OpenstackRequestDelete request) { + initUtil(); + util.delete(request.getProjectName(), request.getObjectType(), request.getObjectName()); + } + + public void createFlavor(OpenstackRequestFlavor request) { + initUtil(); + util.createFlavor(request.getProjectName(), request.getVmType()); + } + + public void createSecurityGroup(OpenstackRequestSecurityGroup request) { + initUtil(); + util.createSecurityGroup(request.getProjectName(), request.getVmType()); + } + + public void serverAction(OpenstackRequestServerAction request) { + initUtil(); + util.serverAction(request); + } + + public void deployVmType(String vmTypeName, String projectName) { + OpenstackRequestSecurityGroup req2 = ComputeFactory.eINSTANCE.createOpenstackRequestSecurityGroup(); + req2.setProjectName(projectName); + req2.setVmType(EcoreUtil.copy(findVmType(vmTypeName))); + o.createSecurityGroup(req2); + if (o.isAllowCreateFlavor()) { + OpenstackRequestFlavor req = ComputeFactory.eINSTANCE.createOpenstackRequestFlavor(); + req.setProjectName(projectName); + req.setVmType(EcoreUtil.copy(findVmType(vmTypeName))); + o.createFlavor(req); + } + } + + private VirtualMachineType findVmType(String name) { + OpenStackController c = (OpenStackController) o.eContainer(); + for (VirtualMachineType v : c.getVmTypes()) { + if (v.getName().equals(name)) return v; + } + throw new RuntimeException("Not VmType with name: " + name); + } + + public void undeployVmType(String vmTypeName, String projectName) { + OpenstackRequestDelete req1 = CoreFactory.eINSTANCE.createOpenstackRequestDelete(); + req1.setProjectName(projectName); + req1.setObjectType("flavor"); + req1.setObjectName(vmTypeName); + o.delete(req1); + req1.setObjectType("security_group"); + o.delete(req1); + } + + public void deployUser(User user, String projectName) { + OpenstackRequestKeyPair req = ComputeFactory.eINSTANCE.createOpenstackRequestKeyPair(); + if (user == null) + throw new RuntimeException("Null user"); + req.setProjectName(projectName); + req.setUser(EcoreUtil.copy(user)); + o.createKeyPair(req); + } + + public void undeployUser(User user, String projectName) { + OpenstackRequestDelete req1 = CoreFactory.eINSTANCE.createOpenstackRequestDelete(); + if (user == null) + throw new RuntimeException("Null user"); + req1.setProjectName(projectName); + req1.setObjectType("keypair"); + req1.setObjectName(user.getName()); + o.delete(req1); + } + + @SuppressWarnings("unused") + private User findUser(String userPath) { + Subject s = controller.getServer().find(userPath); + if (s == null || s.o == null || ! (s instanceof User)) + throw new RuntimeException("Unable to find user: " + userPath); + return (User) s.o; + } + + public void mergeLocation(OpenStackLocation loc) { + ManagementServer.merge(o, loc, null, true, null); + } + + public void deletePort(String projectName, String name) { + initUtil(); + OpenStackControllerProject p = util.findProject(projectName); + if (p == null) { + logger.warn("unable to find project: " + projectName + " " + name); + return; + } + p.deleteNeutron("port", name); + + } + + public Router createRouter(CreateRouterRequest request) { + initUtil(); + return (Router) handleNeutronRequest(request); + } + + public void deleteRouter(String projectName, String name) { + initUtil(); + OpenStackControllerProject p = util.findProject(projectName); + if (p == null) { + logger.warn("unable to find project: " + projectName + " " + name); + return; + } + p.deleteNeutron("router", name); + + + } +} |