/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.hyperic.plugin.vrealize.automation; import static com.vmware.hyperic.model.relations.RelationType.PARENT; import static org.hyperic.plugin.vrealize.automation.VRAUtils.executeXMLQuery; import static org.hyperic.plugin.vrealize.automation.VRAUtils.getFqdn; import static org.hyperic.plugin.vrealize.automation.VRAUtils.marshallResource; import static org.hyperic.plugin.vrealize.automation.VRAUtils.setModelProperty; import static org.hyperic.plugin.vrealize.automation.VraConstants.CREATE_IF_NOT_EXIST; import static org.hyperic.plugin.vrealize.automation.VraConstants.KEY_APPLICATION_NAME; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_LOAD_BALANCER_TAG; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_PROXY_AGENT_SERVER_GROUP; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_APPLICATION; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_IAAS_WEB; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_IAAS_WEB_LOAD_BALANCER; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_IAAS_WEB_TAG; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_MANAGER_SERVER; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_MANAGER_SERVER_LOAD_BALANCER; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_MANAGER_SERVER_LOAD_BALANCER_TAG; import static org.hyperic.plugin.vrealize.automation.VraConstants.TYPE_VRA_MANAGER_SERVER_TAG; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hq.product.ServerResource; import com.vmware.hyperic.model.relations.CommonModelUtils; import com.vmware.hyperic.model.relations.ObjectFactory; import com.vmware.hyperic.model.relations.RelationType; import com.vmware.hyperic.model.relations.Resource; import com.vmware.hyperic.model.relations.ResourceTier; /** * @author glaullon */ public class DiscoveryVRAProxyAgent extends Discovery { private static final Log log = LogFactory.getLog(DiscoveryVRAProxyAgent.class); private static final String appName = CommonModelUtils.getParametrizedName(KEY_APPLICATION_NAME); @Override protected ServerResource newServerResource( long pid, String exe) { ServerResource server = super.newServerResource(pid, exe); log.debug("[newServerResource] pid=" + pid); String configFilePath = exe + ".config"; log.debug("[newServerResource] configFile=" + configFilePath); String vRAIaasWebOrLoadBalancer = executeXMLQuery("//appSettings/add[@key='repositoryAddress']/@value", configFilePath); if (!StringUtils.isEmpty(vRAIaasWebOrLoadBalancer)) { vRAIaasWebOrLoadBalancer = getFqdn(vRAIaasWebOrLoadBalancer); } log.debug("[newServerResource] vRAIaasWebLB (repositoryAddress) = '" + vRAIaasWebOrLoadBalancer + "'"); String managerServerOrLoadBalancer = executeXMLQuery( "//applicationSettings/*/setting[@name='DynamicOps_Vmps_Agent_Core_VMPSAgentService_ProxyAgentService']/value/text()", configFilePath); if (!StringUtils.isEmpty(managerServerOrLoadBalancer)) { managerServerOrLoadBalancer = getFqdn(managerServerOrLoadBalancer); } log.debug("[newServerResource] managerLB (DynamicOps_Vmps_Agent_Core_VMPSAgentService_ProxyAgentService) = '" + managerServerOrLoadBalancer + "'"); Resource modelResource = getCommonModel(server, vRAIaasWebOrLoadBalancer, managerServerOrLoadBalancer); String modelXml = marshallResource(modelResource); setModelProperty(server, modelXml); return server; } public static Resource getCommonModel( ServerResource server, String vRAIaasWebOrLoadBalancer, String managerServerOrLoadBalancer) { String proxyServerGroupName = appName; String parameterizedApplicationTagName = appName; ObjectFactory objectFactory = new ObjectFactory(); Resource proxyServer = objectFactory.createResource(!CREATE_IF_NOT_EXIST, server.getType(), server.getName(), ResourceTier.SERVER); Resource proxyGroup = objectFactory.createLogicalResource(TYPE_PROXY_AGENT_SERVER_GROUP, proxyServerGroupName); Resource application = objectFactory.createApplicationResource(TYPE_VRA_APPLICATION, parameterizedApplicationTagName); proxyServer.addRelations(objectFactory.createRelation(proxyGroup, RelationType.PARENT)); proxyGroup.addRelations(objectFactory.createRelation(application, RelationType.PARENT)); Resource loadBalancerSuperTag = objectFactory.createLogicalResource(TYPE_LOAD_BALANCER_TAG, appName); createRelationIaasWebOrLoadBalancer(vRAIaasWebOrLoadBalancer, parameterizedApplicationTagName, objectFactory, proxyServer, loadBalancerSuperTag); createRelationManagerServerOrLoadBalncer(managerServerOrLoadBalancer, parameterizedApplicationTagName, objectFactory, proxyServer, loadBalancerSuperTag); return proxyServer; } private static void createRelationManagerServerOrLoadBalncer( String managerServerOrLoadBalancer, String parameterizedApplicationTagName, ObjectFactory objectFactory, Resource proxyServer, Resource loadBalancerSuperTag) { if (StringUtils.isEmpty(managerServerOrLoadBalancer)) return; Resource managerLoadBalancer = objectFactory.createResource(!CREATE_IF_NOT_EXIST, TYPE_VRA_MANAGER_SERVER_LOAD_BALANCER, managerServerOrLoadBalancer, ResourceTier.SERVER); proxyServer.addRelations(objectFactory.createRelation(managerLoadBalancer, RelationType.SIBLING)); Resource managerLoadBalancerTag = objectFactory.createLogicalResource(TYPE_VRA_MANAGER_SERVER_LOAD_BALANCER_TAG, appName); managerLoadBalancer.addRelations(objectFactory.createRelation(managerLoadBalancerTag, PARENT)); managerLoadBalancerTag.addRelations(objectFactory.createRelation(loadBalancerSuperTag, PARENT)); Resource managerServer = objectFactory.createResource(!CREATE_IF_NOT_EXIST, TYPE_VRA_MANAGER_SERVER, managerServerOrLoadBalancer, ResourceTier.SERVER); Resource managerServerTag = objectFactory.createLogicalResource(TYPE_VRA_MANAGER_SERVER_TAG, parameterizedApplicationTagName); managerServer.addRelations(objectFactory.createRelation(managerServerTag, RelationType.PARENT)); proxyServer.addRelations(objectFactory.createRelation(managerServer, RelationType.SIBLING)); managerLoadBalancer.addRelations(objectFactory.createRelation(managerServerTag, PARENT)); } private static void createRelationIaasWebOrLoadBalancer( String vRAIaasWebOrLoadBalancer, String parameterizedApplicationTagName, ObjectFactory objectFactory, Resource proxyServer, Resource loadBalancerSuperTag) { if (StringUtils.isEmpty(vRAIaasWebOrLoadBalancer)) return; Resource vraIaasWebLoadBalancer = objectFactory.createResource(!CREATE_IF_NOT_EXIST, TYPE_VRA_IAAS_WEB_LOAD_BALANCER, vRAIaasWebOrLoadBalancer, ResourceTier.SERVER); Resource iaasWebLoadBalancerTag = objectFactory.createLogicalResource(TYPE_VRA_IAAS_WEB_TAG, appName); vraIaasWebLoadBalancer.addRelations(objectFactory.createRelation(iaasWebLoadBalancerTag, PARENT)); Resource vRAIaasWebServer = objectFactory.createResource(!CREATE_IF_NOT_EXIST, TYPE_VRA_IAAS_WEB, vRAIaasWebOrLoadBalancer, ResourceTier.SERVER); Resource vRAIaasWebServerTag = objectFactory.createLogicalResource(TYPE_VRA_IAAS_WEB_TAG, parameterizedApplicationTagName); vRAIaasWebServer.addRelations(objectFactory.createRelation(vRAIaasWebServerTag, RelationType.PARENT)); proxyServer.addRelations(objectFactory.createRelation(vRAIaasWebServer, RelationType.SIBLING), objectFactory.createRelation(vraIaasWebLoadBalancer, RelationType.SIBLING)); vraIaasWebLoadBalancer.addRelations(objectFactory.createRelation(vRAIaasWebServerTag, PARENT)); } /* inline unit test @Test public void test() { ServerResource server = new ServerResource(); server.setName("111"); server.setType("222"); Resource modelResource = getCommonModel(server, "AAA", "BBB"); String modelXml = marshallResource(modelResource); Assert.assertNotNull(modelXml); System.out.println(modelXml); } */ }