Repository: stratos
Updated Branches:
  refs/heads/stratos-4.1.x fde5c2d1d -> 6806cf1e2


Fixing cep ha mode health stat publishing


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/eb5b2591
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/eb5b2591
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/eb5b2591

Branch: refs/heads/stratos-4.1.x
Commit: eb5b2591f922fb0a78a930b1a1be6a0cf98c28b3
Parents: adc8576
Author: Pubudu Gunatilaka <[email protected]>
Authored: Mon Nov 9 13:01:53 2015 +0530
Committer: Pubudu Gunatilaka <[email protected]>
Committed: Mon Nov 9 13:01:53 2015 +0530

----------------------------------------------------------------------
 .../cartridge.agent/healthstats.py              |  94 ++++--
 .../integration/tests/CEPHAModeTestCase.java    | 292 +++++++++++++++++++
 .../test/resources/CEPHAModeTestCase/agent.conf |  46 +++
 .../resources/CEPHAModeTestCase/logging.ini     |  52 ++++
 .../CEPHAModeTestCase/payload/launch-params     |   1 +
 5 files changed, 454 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/eb5b2591/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
index 877bde0..92d2495 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
@@ -94,42 +94,24 @@ class HealthStatisticsPublisher:
     def __init__(self):
 
         self.publishers = []
-        cep_admin_username = 
HealthStatisticsPublisher.read_config(constants.CEP_SERVER_ADMIN_USERNAME)
-        cep_admin_password = 
HealthStatisticsPublisher.read_config(constants.CEP_SERVER_ADMIN_PASSWORD)
+        self.deactive_publishers = []
+        self.cep_admin_username = 
HealthStatisticsPublisher.read_config(constants.CEP_SERVER_ADMIN_USERNAME)
+        self.cep_admin_password = 
HealthStatisticsPublisher.read_config(constants.CEP_SERVER_ADMIN_PASSWORD)
+        self.stream_definition = 
HealthStatisticsPublisher.create_stream_definition()
+        HealthStatisticsPublisher.log.debug("Stream definition created: %r" % 
str(self.stream_definition))
+
         # 1.1.1.1:1883,2.2.2.2:1883
         cep_urls = 
HealthStatisticsPublisher.read_config(constants.CEP_RECEIVER_URLS)
         cep_urls = cep_urls.split(',')
         for cep_url in cep_urls:
-            self.ports = []
-            cep_ip = cep_url.split(':')[0]
-            cep_port = cep_url.split(':')[1]
-            self.ports.append(cep_port)
-            cartridgeagentutils.wait_until_ports_active(
-                cep_ip,
-                self.ports,
-                int(Config.read_property("port.check.timeout", 
critical=False)))
-
-            cep_active = cartridgeagentutils.check_ports_active(
-                cep_ip,
-                self.ports)
-
-            if not cep_active:
-                raise CEPPublisherException("CEP server not active. Health 
statistics publishing aborted.")
 
-            self.stream_definition = 
HealthStatisticsPublisher.create_stream_definition()
-            HealthStatisticsPublisher.log.debug("Stream definition created: 
%r" % str(self.stream_definition))
+            cep_active = self.is_cep_active(cep_url)
 
-            publisher = ThriftPublisher(
-                cep_ip,
-                cep_port,
-                cep_admin_username,
-                cep_admin_password,
-                self.stream_definition)
-
-            self.publishers.append(publisher)
-
-            HealthStatisticsPublisher.log.debug("HealthStatisticsPublisher 
initialized. %r %r",
-                                                cep_ip, cep_port)
+            if cep_active:
+                self.add_publishers(cep_url)
+            else:
+                HealthStatisticsPublisher.log.warn("CEP server is not 
active... %r" % cep_url)
+                self.deactive_publishers.append(cep_url)
 
     @staticmethod
     def create_stream_definition():
@@ -201,11 +183,61 @@ class HealthStatisticsPublisher:
 
         self.publish_event(event)
 
+    def add_publishers(self, cep_url):
+        """
+        Add publishers to the publisher list for publishing
+        """
+        cep_ip = cep_url.split(':')[0]
+        cep_port = cep_url.split(':')[1]
+
+        publisher = ThriftPublisher(
+            cep_ip,
+            cep_port,
+            self.cep_admin_username,
+            self.cep_admin_password,
+            self.stream_definition)
+
+        self.publishers.append(publisher)
+
+
+    def is_cep_active(self, cep_url):
+        """
+        Check if the cep node is active
+        return true if active
+        """
+        self.ports = []
+        cep_ip = cep_url.split(':')[0]
+        cep_port = cep_url.split(':')[1]
+        self.ports.append(cep_port)
+
+        cep_active = cartridgeagentutils.check_ports_active(
+            cep_ip,
+            self.ports)
+
+        return cep_active
+
+
     def publish_event(self, event):
+        """
+        Publish events to cep nodes
+        """
         for publisher in self.publishers:
-            publisher.publish(event)
+            try:
+                publisher.publish(event)
+            except Exception as ex:
+                raise ThriftReceiverOfflineException(ex)
+
+        deactive_ceps = self.deactive_publishers
+        for cep_url in deactive_ceps:
+            cep_active = self.is_cep_active(cep_url)
+            if cep_active:
+                self.add_publishers(cep_url)
+                self.deactive_publishers.remove(cep_url)
 
     def disconnect_publisher(self):
+        """
+        Disconnect publishers
+        """
         for publisher in self.publishers:
             publisher.disconnect()
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/eb5b2591/products/python-cartridge-agent/modules/integration/test-integration/src/test/java/org/apache/stratos/python/cartridge/agent/integration/tests/CEPHAModeTestCase.java
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/modules/integration/test-integration/src/test/java/org/apache/stratos/python/cartridge/agent/integration/tests/CEPHAModeTestCase.java
 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/java/org/apache/stratos/python/cartridge/agent/integration/tests/CEPHAModeTestCase.java
new file mode 100644
index 0000000..dfaad23
--- /dev/null
+++ 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/java/org/apache/stratos/python/cartridge/agent/integration/tests/CEPHAModeTestCase.java
@@ -0,0 +1,292 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.stratos.python.cartridge.agent.integration.tests;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.domain.LoadBalancingIPType;
+import org.apache.stratos.messaging.domain.topology.*;
+import org.apache.stratos.messaging.event.Event;
+import org.apache.stratos.messaging.event.topology.CompleteTopologyEvent;
+import org.apache.stratos.messaging.event.topology.MemberInitializedEvent;
+import 
org.apache.stratos.messaging.listener.instance.status.InstanceActivatedEventListener;
+import 
org.apache.stratos.python.cartridge.agent.integration.common.ThriftTestServer;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import org.wso2.carbon.databridge.commons.Credentials;
+import org.wso2.carbon.databridge.commons.StreamDefinition;
+import org.wso2.carbon.databridge.core.AgentCallback;
+import org.wso2.carbon.databridge.core.exception.DataBridgeException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+public class CEPHAModeTestCase extends PythonAgentIntegrationTest {
+
+    public CEPHAModeTestCase() throws IOException {
+    }
+
+    private static final Log log = LogFactory.getLog(CEPHAModeTestCase.class);
+    private static final int STARTUP_TIMEOUT = 5 * 60000;
+    private static final String CLUSTER_ID = "php.php.domain";
+    private static final String DEPLOYMENT_POLICY_NAME = "deployment-policy-1";
+    private static final String AUTOSCALING_POLICY_NAME = 
"autoscaling-policy-1";
+    private static final String APP_ID = "application-1";
+    private static final String MEMBER_ID = "php.member-1";
+    private static final String INSTANCE_ID = "instance-1";
+    private static final String CLUSTER_INSTANCE_ID = "cluster-1-instance-1";
+    private static final String NETWORK_PARTITION_ID = "network-partition-1";
+    private static final String PARTITION_ID = "partition-1";
+    private static final String TENANT_ID = "-1234";
+    private static final String SERVICE_NAME = "php";
+    private boolean startupTestCompleted = false;
+    private Topology topology = createTestTopology();
+    private static final int ADC_TIMEOUT = 300000;
+    private ThriftTestServer secondThriftTestServer;
+    private boolean thriftTestCompletedinServerTwo = false;
+    private boolean thriftTestCompletedinServerOne = false;
+    private boolean failDetected = false;
+
+
+    @BeforeMethod(alwaysRun = true)
+    public void setupADCExtensionTest() throws Exception {
+        log.info("Setting up ADCExtensionTestCase");
+        // Set jndi.properties.dir system property for initializing event 
publishers and receivers
+        System.setProperty("jndi.properties.dir", getCommonResourcesPath());
+
+        // start Python agent with configurations provided in resource path
+        super.setup(ADC_TIMEOUT);
+
+        secondThriftTestServer = new ThriftTestServer();
+
+        File file =
+                new File(getResourcesPath() + PATH_SEP + "common" + PATH_SEP + 
"stratos-health-stream-def.json");
+        FileInputStream fis = new FileInputStream(file);
+        byte[] data = new byte[(int) file.length()];
+        fis.read(data);
+        fis.close();
+
+        String str = new String(data, "UTF-8");
+        if (str.equals("")) {
+            log.warn("Stream definition of health stat stream is empty. Thrift 
server will not function properly");
+        }
+        secondThriftTestServer.addStreamDefinition(str, 
Integer.parseInt(TENANT_ID));
+        // start with non-ssl port; test server will automatically bind to ssl 
port
+        secondThriftTestServer.start(cepPort + 1);
+        log.info("Started Thrift server with stream definition: " + str);
+
+        // Simulate server socket
+        startServerSocket(8080);
+    }
+
+
+    /**
+     * TearDown method for test method testPythonCartridgeAgent
+     */
+    @AfterMethod(alwaysRun = true)
+    public void tearDownAgentStartupTest() {
+        tearDown();
+
+        try {
+            if (secondThriftTestServer != null) {
+                secondThriftTestServer.stop();
+            }
+        } catch (Exception ignore) {
+        }
+
+    }
+
+    @Test(timeOut = STARTUP_TIMEOUT, description = "Test PCA initialization, 
activation, health stat publishing in " +
+            "CEP HA mode", groups = {"smoke"})
+    public void testPythonCartridgeAgent() {
+        startCommunicatorThread();
+        subscribeToThriftDatabridge();
+        subscribeToSecondThriftDatabridge();
+        Thread startupTestThread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                while (!eventReceiverInitiated) {
+                    sleep(2000);
+                }
+                List<String> outputLines = new ArrayList<String>();
+                while (!outputStream.isClosed()) {
+                    List<String> newLines = getNewLines(outputLines, 
outputStream.toString());
+                    if (newLines.size() > 0) {
+                        for (String line : newLines) {
+                            if (line.contains("Subscribed to 'topology/#'")) {
+                                sleep(2000);
+                                // Send complete topology event
+                                log.info("Publishing complete topology 
event...");
+                                CompleteTopologyEvent completeTopologyEvent = 
new CompleteTopologyEvent(topology);
+                                publishEvent(completeTopologyEvent);
+                                log.info("Complete topology event published");
+
+                                // Publish member initialized event
+                                log.info("Publishing member initialized 
event...");
+                                MemberInitializedEvent memberInitializedEvent 
= new MemberInitializedEvent(
+                                        SERVICE_NAME, CLUSTER_ID, 
CLUSTER_INSTANCE_ID, MEMBER_ID, NETWORK_PARTITION_ID,
+                                        PARTITION_ID, INSTANCE_ID
+                                );
+                                publishEvent(memberInitializedEvent);
+                                log.info("Member initialized event published");
+                            }
+
+                            if (line.contains("Published event to thrift 
stream")) {
+                                startupTestCompleted = true;
+                            }
+
+                            if (line.contains("Couldn't publish health 
statistics to CEP. Thrift Receiver offline.")) {
+                                failDetected = true;
+                            }
+
+                        }
+                    }
+                    sleep(1000);
+                }
+            }
+        });
+
+        startupTestThread.start();
+
+        instanceStatusEventReceiver.addEventListener(new 
InstanceActivatedEventListener() {
+            @Override
+            protected void onEvent(Event event) {
+                log.info("Publishing complete topology with a new member...");
+                Member newMember = new Member(SERVICE_NAME, CLUSTER_ID, 
"new-member", CLUSTER_INSTANCE_ID,
+                        NETWORK_PARTITION_ID, PARTITION_ID, 
LoadBalancingIPType.Private, System.currentTimeMillis());
+                
topology.getService(SERVICE_NAME).getCluster(CLUSTER_ID).addMember(newMember);
+                CompleteTopologyEvent completeTopologyEvent = new 
CompleteTopologyEvent(topology);
+                publishEvent(completeTopologyEvent);
+                log.info("Complete topology event published with new member");
+            }
+        });
+
+        while (!instanceStarted || !instanceActivated || !startupTestCompleted 
||
+                !thriftTestCompletedinServerOne || 
!thriftTestCompletedinServerTwo) {
+            // wait until the instance activated event is received.
+            // this will assert whether instance got activated within timeout 
period; no need for explicit assertions
+            sleep(2000);
+        }
+
+        thriftTestServer.stop();
+        startupTestCompleted = false;
+        thriftTestCompletedinServerTwo = false;
+
+        while (!startupTestCompleted || !failDetected || 
!thriftTestCompletedinServerTwo) {
+            // wait until PCA publishes health stats to second thrift server
+            sleep(2000);
+        }
+
+        thriftTestCompletedinServerOne = false;
+
+        try {
+            thriftTestServer.start(cepPort);
+            subscribeToThriftDatabridge();
+        } catch (DataBridgeException e) {
+            e.printStackTrace();
+        }
+
+        while (!thriftTestCompletedinServerOne) {
+            // wait until PCA publishes health stats to started node
+            sleep(2000);
+        }
+
+    }
+
+    private void subscribeToThriftDatabridge() {
+        thriftTestServer.getDatabridge().subscribe(new AgentCallback() {
+            @Override
+            public void definedStream(StreamDefinition streamDefinition, int 
tenantId) {
+                // ignore
+            }
+
+            @Override
+            public void removeStream(StreamDefinition streamDefinition, int 
tenantId) {
+                // ignore
+            }
+
+            @Override
+            public void receive(List<org.wso2.carbon.databridge.commons.Event> 
eventList, Credentials credentials) {
+                log.info("Event list size of thrift server one: " + 
eventList.size());
+                log.info("Recent events received for thrift server one: " + 
eventList);
+                // if the list contains an event that means PCA was able to 
successfully publish health stats
+                if (eventList.size() > 0) {
+                    thriftTestCompletedinServerOne = true;
+                }
+            }
+        });
+    }
+
+    private void subscribeToSecondThriftDatabridge() {
+        secondThriftTestServer.getDatabridge().subscribe(new AgentCallback() {
+            @Override
+            public void definedStream(StreamDefinition streamDefinition, int 
tenantId) {
+                // ignore
+            }
+
+            @Override
+            public void removeStream(StreamDefinition streamDefinition, int 
tenantId) {
+                // ignore
+            }
+
+            @Override
+            public void receive(List<org.wso2.carbon.databridge.commons.Event> 
eventList, Credentials credentials) {
+                log.info("Event list size of thrift server two: " + 
eventList.size());
+                log.info("Recent events received for thrift server two: " + 
eventList);
+                // if the list contains an event that means PCA was able to 
successfully publish health stats
+                if (eventList.size() > 0) {
+                    thriftTestCompletedinServerTwo = true;
+                }
+            }
+        });
+    }
+
+    /**
+     * Create test topology
+     *
+     * @return Topology object with mock information
+     */
+    private Topology createTestTopology() {
+        Topology topology = new Topology();
+        Service service = new Service(SERVICE_NAME, ServiceType.SingleTenant);
+        topology.addService(service);
+
+        Cluster cluster = new Cluster(service.getServiceName(), CLUSTER_ID, 
DEPLOYMENT_POLICY_NAME,
+                AUTOSCALING_POLICY_NAME, APP_ID);
+        service.addCluster(cluster);
+
+        Member member = new Member(service.getServiceName(), 
cluster.getClusterId(), MEMBER_ID,
+                CLUSTER_INSTANCE_ID, NETWORK_PARTITION_ID, PARTITION_ID, 
LoadBalancingIPType.Private,
+                System.currentTimeMillis());
+
+        member.setDefaultPrivateIP("10.0.0.1");
+        member.setDefaultPublicIP("20.0.0.1");
+        Properties properties = new Properties();
+        properties.setProperty("prop1", "value1");
+        member.setProperties(properties);
+        member.setStatus(MemberStatus.Created);
+        cluster.addMember(member);
+        return topology;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/eb5b2591/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/agent.conf
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/agent.conf
 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/agent.conf
new file mode 100755
index 0000000..e982bc3
--- /dev/null
+++ 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/agent.conf
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+
+[agent]
+mb.ip                                 =localhost
+mb.port                               =1885
+mb.username                           =system
+mb.password                           =manager
+listen.address                        =localhost
+thrift.receiver.urls                  =localhost:7712,localhost:7713
+thrift.server.admin.username          =admin
+thrift.server.admin.password          =admin
+cep.stats.publisher.enabled           =true
+lb.private.ip                         =
+lb.public.ip                          =
+enable.artifact.update                =true
+auto.commit                           =true
+auto.checkout                         =true
+artifact.update.interval              =15
+artifact.clone.retries                =5
+artifact.clone.interval               =10
+port.check.timeout                    =600000
+enable.data.publisher                 =false
+monitoring.server.ip                  =localhost
+monitoring.server.port                =7612
+monitoring.server.secure.port         =7712
+monitoring.server.admin.username      =admin
+monitoring.server.admin.password      =admin
+log.file.paths                        =/tmp/agent.screen-adc-test.log
+metadata.service.url                  =https://localhost:9443
+super.tenant.repository.path          =/repository/deployment/server/
+tenant.repository.path                =/repository/tenants/

http://git-wip-us.apache.org/repos/asf/stratos/blob/eb5b2591/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/logging.ini
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/logging.ini
 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/logging.ini
new file mode 100755
index 0000000..15cad9b
--- /dev/null
+++ 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/logging.ini
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+
+
+[formatters]
+keys=default
+
+[formatter_default]
+format=[%(asctime)s] %(levelname)s {%(filename)s:%(funcName)s} - %(message)s
+class=logging.Formatter
+
+[handlers]
+keys=console, error_file, log_file
+
+[handler_console]
+class=logging.StreamHandler
+formatter=default
+args=tuple()
+
+[handler_log_file]
+class=logging.FileHandler
+level=DEBUG
+formatter=default
+args=("agent.log", "w")
+
+[handler_error_file]
+class=logging.FileHandler
+level=ERROR
+formatter=default
+args=("error.log", "w")
+
+[loggers]
+keys=root
+
+[logger_root]
+level=DEBUG
+formatter=default
+handlers=console,error_file,log_file
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/eb5b2591/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/payload/launch-params
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/payload/launch-params
 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/payload/launch-params
new file mode 100755
index 0000000..1b44343
--- /dev/null
+++ 
b/products/python-cartridge-agent/modules/integration/test-integration/src/test/resources/CEPHAModeTestCase/payload/launch-params
@@ -0,0 +1 @@
+APPLICATION_ID=application-1,APPLICATION_PATH=/tmp/AgentStartupTestCase,BASH=/bin/bash,BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath,BASH_ALIASES=(),BASH_ARGC=(),BASH_ARGV=(),BASH_CMDS=(),BASH_LINENO=([0]="0"),BASH_SOURCE=([0]="/usr/local/bin/populate-user-data.sh"),BASH_VERSINFO=([0]="4"
 [1]="3" [2]="30" [3]="1" [4]="release" 
[5]="x86_64-pc-linux-gnu"),BASH_VERSION='4.3.30(1)-release',CARTRIDGE_ALIAS=mytomcat,CARTRIDGE_KEY=PUjpXCLujDhYr5A6,CATALINA_HOME=/opt/tomcat,CEP_IP=54.179.197.243,CEP_PORT=7711,CLUSTER_ID=php.php.domain,CLUSTER_INSTANCE_ID=cluster-1-instance-1,DEPENDENCY_CLUSTER_IDS=myphp.php.domain,DEPLOYMENT=default,DIRSTACK=(),EUID=0,GROUPS=(),GROUP_NAME=null,HOME=/root,HOSTNAME=mytomcat-tomcat-domain3bd3cd47-b95d-475a-aa11-3e3ddc089d49,HOSTTYPE=x86_64,HOST_NAME=mytomcat.tomcat.stratos.org,IFS='
         
,',INSTANCE_ID=null,INTERNAL=false,JAVA_HOME=/opt/jdk1.7.0_67,KUBERNETES_CLUSTER_ID=kubernetes-cluste
 
r-1,KUBERNETES_PORT=tcp://10.100.0.2:443,KUBERNETES_PORT_443_TCP=tcp://10.100.0.2:443,KUBERNETES_PORT_443_TCP_ADDR=10.100.0.2,KUBERNETES_PORT_443_TCP_PORT=443,KUBERNETES_PORT_443_TCP_PROTO=tcp,KUBERNETES_RO_PORT=tcp://10.100.0.1:80,KUBERNETES_RO_PORT_80_TCP=tcp://10.100.0.1:80,KUBERNETES_RO_PORT_80_TCP_ADDR=10.100.0.1,KUBERNETES_RO_PORT_80_TCP_PORT=80,KUBERNETES_RO_PORT_80_TCP_PROTO=tcp,KUBERNETES_RO_SERVICE_HOST=10.100.0.1,KUBERNETES_RO_SERVICE_PORT=80,KUBERNETES_SERVICE_HOST=10.100.0.2,KUBERNETES_SERVICE_PORT=443,LB_CLUSTER_ID=null,LOG_LEVEL=DEBUG,MACHTYPE=x86_64-pc-linux-gnu,MB_IP=54.179.197.243,MB_PORT=1883,MEMBER_ID=php.member-1,MIN_COUNT=1,MULTITENANT=false,MYPHP_PHP_DOMAIN_1_PORT=tcp://10.100.171.218:4500,MYPHP_PHP_DOMAIN_1_PORT_4500_TCP=tcp://10.100.171.218:4500,MYPHP_PHP_DOMAIN_1_PORT_4500_TCP_ADDR=10.100.171.218,MYPHP_PHP_DOMAIN_1_PORT_4500_TCP_PORT=4500,MYPHP_PHP_DOMAIN_1_PORT_4500_TCP_PROTO=tcp,MYPHP_PHP_DOMAIN_1_SERVICE_HOST=10.100.171.218,MYPHP_PHP_DOMAIN_1_SERVICE_POR
 
T=4500,MYTOMCAT_TOMCAT_DOMAIN_1_PORT=tcp://10.100.16.250:4500,MYTOMCAT_TOMCAT_DOMAIN_1_PORT_4500_TCP=tcp://10.100.16.250:4500,MYTOMCAT_TOMCAT_DOMAIN_1_PORT_4500_TCP_ADDR=10.100.16.250,MYTOMCAT_TOMCAT_DOMAIN_1_PORT_4500_TCP_PORT=4500,MYTOMCAT_TOMCAT_DOMAIN_1_PORT_4500_TCP_PROTO=tcp,MYTOMCAT_TOMCAT_DOMAIN_1_SERVICE_HOST=10.100.16.250,MYTOMCAT_TOMCAT_DOMAIN_1_SERVICE_PORT=4500,NETWORK_PARTITION_ID=network-partition-1,OPTERR=1,OPTIND=1,OSTYPE=linux-gnu,PARTITION_ID=partition-1,PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,PIPESTATUS=([0]="0"),PORTS=8080,POSIXLY_CORRECT=y,PPID=14,PRIMARY=false,PROVIDER=apache,PS4='+
 
',PUPPET_DNS_AVAILABLE=null,PUPPET_ENV=false,PUPPET_HOSTNAME=puppet.apache.stratos.org,PUPPET_IP=127.0.0.1,PWD=/opt,SERVICE_NAME=php,SHELL=/bin/bash,SHELLOPTS=braceexpand:hashall:interactive-comments:posix,SHLVL=2,TENANT_ID=-1234,TENANT_RANGE='*',TERM=dumb,TOKEN=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOi04NzI0ODEyNDEsInN1YiI6ImFkbWluIiwiYXpwIjoid3I5SllVaDNtTXd6bVhHVl
 
lqWmVIWnhCV2xFYSIsImFwcElkIjoic2luZ2xlX2dyb3VwX3YxIiwiYXVkIjpbIndyOUpZVWgzbU13em1YR1ZZalplSFp4QldsRWEiXSwiaXNzIjoiaHR0cHM6XC9cL2xvY2FsaG9zdDo5NDQzXC9vYXV0aDJlbmRwb2ludHNcL3Rva2VuIiwiaWF0IjotODcyNDgwMjQwfQ.OSa1gIXUT9amhk1YEU02Yc3JtUYqanzrXh5K1YyvRXcpSiY2Ccn2BfJO0hILF5UooRcGBihzfX3979NRcvGwcUDUvOUJ0eaGPmxFZYbu0nr3xD8lhAO3fa1QYsKAvMnMdwyu2uSgSp6R6EUdVleiwlabUoDsuEcKGkIAn_VQvG0,UID=0,_=posix,LVS_VIRTUAL_IP=192.168.0.40|255.255.255.0
\ No newline at end of file

Reply via email to