def run_plugin(self, values): log = LogFactory().get_log(__name__) log.info("Starting tomcat server starter plugin...") # wait till SAML_ENDPOINT becomes available mds_response = None while mds_response is None: log.debug( "Waiting for SAML_ENDPOINT to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None and mds_response.properties.get( "SAML_ENDPOINT") is None: mds_response = None saml_endpoint = mds_response.properties["SAML_ENDPOINT"] log.debug("SAML_ENDPOINT value read from Metadata service: %s" % saml_endpoint) # start tomcat tomcat_start_command = "exec /opt/tomcat/bin/startup.sh" log.info( "Starting Tomcat server: [command] %s, [STRATOS_SAML_ENDPOINT] %s" % (tomcat_start_command, saml_endpoint)) env_var = os.environ.copy() env_var["STRATOS_SAML_ENDPOINT"] = saml_endpoint env_var["STRATOS_HOST_NAME"] = values["HOST_NAME"] log.info("Reading port mappings...") port_mappings_str = values["PORT_MAPPINGS"] tomcat_http_port = None # port mappings format: """NAME:mgt-console|PROTOCOL:https|PORT:4500|PROXY_PORT:8443; # NAME:tomcat-http|PROTOCOL:http|PORT:4501|PROXY_PORT:7280;""" log.info("Port mappings: %s" % port_mappings_str) if port_mappings_str is not None: port_mappings_array = port_mappings_str.split(";") if port_mappings_array: for port_mapping in port_mappings_array: log.debug("port_mapping: %s" % port_mapping) name_value_array = port_mapping.split("|") name = name_value_array[0].split(":")[1] protocol = name_value_array[1].split(":")[1] port = name_value_array[2].split(":")[1] if name == "tomcat-http" and protocol == "http": tomcat_http_port = port log.info("Kubernetes service port of tomcat http transport: %s" % tomcat_http_port) env_var["STRATOS_HOST_PORT"] = tomcat_http_port p = subprocess.Popen(tomcat_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("Tomcat server started") log.info("Tomcat server starter plugin completed")
def run_plugin(self, values): log = LogFactory().get_log(__name__) # wait till SAML_ENDPOINT becomes available mds_response = None while mds_response is None: log.debug("Waiting for SAML_ENDPOINT to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None and mds_response.properties.get("SAML_ENDPOINT") is None: mds_response = None saml_endpoint = mds_response.properties["SAML_ENDPOINT"] log.debug("SAML_ENDPOINT value read from Metadata service: %s" % saml_endpoint) # start tomcat tomcat_start_command = "exec /opt/tomcat/bin/startup.sh" log.info("Starting Tomcat server: [command] %s, [STRATOS_SAML_ENDPOINT] %s" % (tomcat_start_command, saml_endpoint)) env_var = os.environ.copy() env_var["STRATOS_SAML_ENDPOINT"] = saml_endpoint env_var["STRATOS_HOST_NAME"] = values["HOST_NAME"] payload_ports = values["PORT_MAPPINGS"].split("|") if values.get("LB_CLUSTER_ID") is not None: port_no = payload_ports[2].split(":")[1] else: port_no = payload_ports[1].split(":")[1] env_var["STRATOS_HOST_PORT"] = port_no p = subprocess.Popen(tomcat_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("Tomcat server started")
def fetch_wka_members(self): mds_response = mdsclient.get(app=True) wka_members= None if mds_response is not None: wka_members = mds_response.properties.get("wka") self.log.info("WKA members %s " % wka_members);
def run_plugin(self, values): log = LogFactory().get_log(__name__) log.info("Starting tomcat server starter plugin...") # wait till SAML_ENDPOINT becomes available mds_response = None while mds_response is None: log.debug("Waiting for SAML_ENDPOINT to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None and mds_response.properties.get("SAML_ENDPOINT") is None: mds_response = None saml_endpoint = mds_response.properties["SAML_ENDPOINT"] log.debug("SAML_ENDPOINT value read from Metadata service: %s" % saml_endpoint) # start tomcat tomcat_start_command = "exec /opt/tomcat/bin/startup.sh" log.info("Starting Tomcat server: [command] %s, [STRATOS_SAML_ENDPOINT] %s" % (tomcat_start_command, saml_endpoint)) env_var = os.environ.copy() env_var["STRATOS_SAML_ENDPOINT"] = saml_endpoint env_var["STRATOS_HOST_NAME"] = values["HOST_NAME"] log.info("Reading port mappings...") port_mappings_str = values["PORT_MAPPINGS"] tomcat_http_port = None # port mappings format: """NAME:mgt-console|PROTOCOL:https|PORT:4500|PROXY_PORT:8443; # NAME:tomcat-http|PROTOCOL:http|PORT:4501|PROXY_PORT:7280;""" log.info("Port mappings: %s" % port_mappings_str) if port_mappings_str is not None: port_mappings_array = port_mappings_str.split(";") if port_mappings_array: for port_mapping in port_mappings_array: log.debug("port_mapping: %s" % port_mapping) name_value_array = port_mapping.split("|") name = name_value_array[0].split(":")[1] protocol = name_value_array[1].split(":")[1] port = name_value_array[2].split(":")[1] if name == "tomcat-http" and protocol == "http": tomcat_http_port = port log.info("Kubernetes service port of tomcat http transport: %s" % tomcat_http_port) env_var["STRATOS_HOST_PORT"] = tomcat_http_port p = subprocess.Popen(tomcat_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("Tomcat server started") log.info("Tomcat server starter plugin completed")
def get_data_from_meta_data_service(self, app_id, receive_data): """ Get data from meta data service :return: received data """ mds_response = None while mds_response is None: WSO2StartupHandler.log.info( "Waiting for " + receive_data + " to be available from metadata service for app ID: %s" % app_id) time.sleep(1) mds_response = mdsclient.get(app=True) if mds_response is not None and mds_response.properties.get(receive_data) is None: mds_response = None return mds_response.properties[receive_data]
def fetch_wka_members(self): local_member_port=4000 mds_response = mdsclient.get(app=True) wka_members_ips=[] if mds_response is not None: wka_members_ips = mds_response.properties.get("wka") for wka_member_ip in wka_members_ips: self.log.info("WKA members %s=" % wka_member_ip) wka_members_ips.append(wka_member_ip +':'+str(local_member_port)) self.log.info("WKA members %s " % wka_members_ips) wka_members_ips = ','.join(map(str, wka_members_ips)) wka_members_ips= "'{}'".format(wka_members_ips) self.log.info("local_members=%s " % (wka_members_ips)) os.environ['STRATOS_MEMBERS'] = str(wka_members_ips) self.log.info("env local members=%s" % (os.environ.get('STRATOS_MEMBERS')))
def remove_data_from_metadata(self, key): """ remove data from meta data service :return: void """ mds_response = mdsclient.get(app=True) if mds_response is not None and mds_response.properties.get(key) is not None: read_data = mds_response.properties[key] check_str = isinstance(read_data, (str, unicode)) if check_str == True: mdsclient.delete_property_value(key, read_data) else: check_int = isinstance(read_data, int) if check_int == True: mdsclient.delete_property_value(key, read_data) else: for entry in read_data: mdsclient.delete_property_value(key, entry)
def run_plugin(self, values): log = LogFactory().get_log(__name__) # wait till SAML_ENDPOINT becomes available mds_response = None while mds_response is None: log.debug( "Waiting for SAML_ENDPOINT to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None and mds_response.properties.get( "SAML_ENDPOINT") is None: mds_response = None saml_endpoint = mds_response.properties["SAML_ENDPOINT"] log.debug("SAML_ENDPOINT value read from Metadata service: %s" % saml_endpoint) # start tomcat tomcat_start_command = "exec /opt/tomcat/bin/startup.sh" log.info( "Starting Tomcat server: [command] %s, [STRATOS_SAML_ENDPOINT] %s" % (tomcat_start_command, saml_endpoint)) env_var = os.environ.copy() env_var["STRATOS_SAML_ENDPOINT"] = saml_endpoint env_var["STRATOS_HOST_NAME"] = values["HOST_NAME"] payload_ports = values["PORT_MAPPINGS"].split("|") if values.get("LB_CLUSTER_ID") is not None: port_no = payload_ports[2].split(":")[1] else: port_no = payload_ports[1].split(":")[1] env_var["STRATOS_HOST_PORT"] = port_no p = subprocess.Popen(tomcat_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("Tomcat server started")
def run_plugin(self, values): log = LogFactory().get_log(__name__) log.info("Starting wso2is metadata handler...") # read tomcat app related values from metadata mds_response = None while mds_response is None: log.debug( "Waiting for SSO_ISSUER and CALLBACK_URL to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None: if mds_response.properties.get("SSO_ISSUER") is None or \ mds_response.properties.get("CALLBACK_URL") is None: mds_response = None # mds_response = mdsclient.get() issuer = mds_response.properties["SSO_ISSUER"] acs = mds_response.properties["CALLBACK_URL"] # add a service provider in the security/sso-idp-config.xml file # is_root = values["APPLICATION_PATH"] is_root = os.environ.get("CARBON_HOME") sso_idp_file = "%s/repository/conf/security/sso-idp-config.xml" % is_root # <SSOIdentityProviderConfig> # <ServiceProviders> # <ServiceProvider> # <Issuer>wso2.my.dashboard</Issuer> # <AssertionConsumerService>https://is.wso2.com/dashboard/acs</AssertionConsumerService> # <SignAssertion>true</SignAssertion> # <SignResponse>true</SignResponse> # <EnableAttributeProfile>false</EnableAttributeProfile> # <IncludeAttributeByDefault>false</IncludeAttributeByDefault> # <Claims> # <Claim>http://wso2.org/claims/role</Claim> # </Claims> # <EnableSingleLogout>false</EnableSingleLogout> # <SingleLogoutUrl></SingleLogoutUrl> # <EnableAudienceRestriction>true</EnableAudienceRestriction> # <AudiencesList> # <Audience>carbonServer</Audience> # </AudiencesList> # <ConsumingServiceIndex></ConsumingServiceIndex> # </ServiceProvider> with open(sso_idp_file, "r") as f: sp_dom = parse(f) root_element = sp_dom.documentElement sps_element = sp_dom.getElementsByTagName("ServiceProviders")[0] sp_entry = sp_dom.createElement("ServiceProvider") sp_entry_issuer = sp_dom.createElement("Issuer") sp_entry_issuer.appendChild(sp_dom.createTextNode(issuer)) sp_entry_acs = sp_dom.createElement("AssertionConsumerService") sp_entry_acs.appendChild(sp_dom.createTextNode(acs)) sp_entry_sign_resp = sp_dom.createElement("SignResponse") sp_entry_sign_resp.appendChild(sp_dom.createTextNode("true")) sp_entry_sign_assert = sp_dom.createElement("SignAssertion") sp_entry_sign_assert.appendChild(sp_dom.createTextNode("true")) sp_entry_single_logout = sp_dom.createElement("EnableSingleLogout") sp_entry_single_logout.appendChild(sp_dom.createTextNode("true")) sp_entry_attribute_profile = sp_dom.createElement( "EnableAttributeProfile") sp_entry_attribute_profile.appendChild(sp_dom.createTextNode("true")) sp_entry.appendChild(sp_entry_issuer) sp_entry.appendChild(sp_entry_acs) sp_entry.appendChild(sp_entry_sign_resp) sp_entry.appendChild(sp_entry_sign_assert) sp_entry.appendChild(sp_entry_single_logout) sp_entry.appendChild(sp_entry_attribute_profile) sps_element.appendChild(sp_entry) with open(sso_idp_file, 'w+') as f: root_element.writexml(f, newl="\n") # root_element.writexml(f) # data = json.loads(urllib.urlopen("http://ip.jsontest.com/").read()) # ip_entry = data["ip"] # publish SAML_ENDPOINT to metadata service # member_hostname = socket.gethostname() member_hostname = values["HOST_NAME"] # read kubernetes service https port log.info("Reading port mappings...") port_mappings_str = values["PORT_MAPPINGS"] https_port = None # port mappings format: """NAME:mgt-console|PROTOCOL:https|PORT:4500|PROXY_PORT:8443; # NAME:tomcat-http|PROTOCOL:http|PORT:4501|PROXY_PORT:7280;""" log.info("Port mappings: %s" % port_mappings_str) if port_mappings_str is not None: port_mappings_array = port_mappings_str.split(";") if port_mappings_array: for port_mapping in port_mappings_array: log.debug("port_mapping: %s" % port_mapping) name_value_array = port_mapping.split("|") protocol = name_value_array[1].split(":")[1] port = name_value_array[2].split(":")[1] if protocol == "https": https_port = port log.info( "Kubernetes service port of wso2is management console https transport: %s" % https_port) saml_endpoint = "https://%s:%s/samlsso" % (member_hostname, https_port) saml_endpoint_property = { "key": "SAML_ENDPOINT", "values": [saml_endpoint] } mdsclient.put(saml_endpoint_property, app=True) log.info("Published property to metadata API: SAML_ENDPOINT: %s" % saml_endpoint) # start servers log.info("Starting WSO2 IS server") # set configurations carbon_replace_command = "sed -i \"s/CLUSTER_HOST_NAME/%s/g\" %s" % ( member_hostname, "${CARBON_HOME}/repository/conf/carbon.xml") p = subprocess.Popen(carbon_replace_command, shell=True) output, errors = p.communicate() log.debug("Set carbon.xml hostname") catalina_replace_command = "sed -i \"s/STRATOS_IS_PROXY_PORT/%s/g\" %s" % ( https_port, "${CARBON_HOME}/repository/conf/tomcat/catalina-server.xml") p = subprocess.Popen(catalina_replace_command, shell=True) output, errors = p.communicate() log.debug("Set catalina-server.xml proxy port") wso2is_start_command = "exec ${CARBON_HOME}/bin/wso2server.sh start" env_var = os.environ.copy() p = subprocess.Popen(wso2is_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("WSO2 IS server started") log.info("wso2is metadata handler completed")
def run_plugin(self, values): log = LogFactory().get_log(__name__) log.info("Starting wso2is metadata handler...") # read tomcat app related values from metadata mds_response = None while mds_response is None: log.debug("Waiting for SSO_ISSUER and CALLBACK_URL to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None: if mds_response.properties.get("SSO_ISSUER") is None or \ mds_response.properties.get("CALLBACK_URL") is None: mds_response = None # mds_response = mdsclient.get() issuer = mds_response.properties["SSO_ISSUER"] acs = mds_response.properties["CALLBACK_URL"] # add a service provider in the security/sso-idp-config.xml file # is_root = values["APPLICATION_PATH"] is_root = os.environ.get("CARBON_HOME") sso_idp_file = "%s/repository/conf/security/sso-idp-config.xml" % is_root # <SSOIdentityProviderConfig> # <ServiceProviders> # <ServiceProvider> # <Issuer>wso2.my.dashboard</Issuer> # <AssertionConsumerService>https://is.wso2.com/dashboard/acs</AssertionConsumerService> # <SignAssertion>true</SignAssertion> # <SignResponse>true</SignResponse> # <EnableAttributeProfile>false</EnableAttributeProfile> # <IncludeAttributeByDefault>false</IncludeAttributeByDefault> # <Claims> # <Claim>http://wso2.org/claims/role</Claim> # </Claims> # <EnableSingleLogout>false</EnableSingleLogout> # <SingleLogoutUrl></SingleLogoutUrl> # <EnableAudienceRestriction>true</EnableAudienceRestriction> # <AudiencesList> # <Audience>carbonServer</Audience> # </AudiencesList> # <ConsumingServiceIndex></ConsumingServiceIndex> # </ServiceProvider> with open(sso_idp_file, "r") as f: sp_dom = parse(f) root_element = sp_dom.documentElement sps_element = sp_dom.getElementsByTagName("ServiceProviders")[0] sp_entry = sp_dom.createElement("ServiceProvider") sp_entry_issuer = sp_dom.createElement("Issuer") sp_entry_issuer.appendChild(sp_dom.createTextNode(issuer)) sp_entry_acs = sp_dom.createElement("AssertionConsumerService") sp_entry_acs.appendChild(sp_dom.createTextNode(acs)) sp_entry_sign_resp = sp_dom.createElement("SignResponse") sp_entry_sign_resp.appendChild(sp_dom.createTextNode("true")) sp_entry_sign_assert = sp_dom.createElement("SignAssertion") sp_entry_sign_assert.appendChild(sp_dom.createTextNode("true")) sp_entry_single_logout = sp_dom.createElement("EnableSingleLogout") sp_entry_single_logout.appendChild(sp_dom.createTextNode("true")) sp_entry_attribute_profile = sp_dom.createElement("EnableAttributeProfile") sp_entry_attribute_profile.appendChild(sp_dom.createTextNode("true")) sp_entry.appendChild(sp_entry_issuer) sp_entry.appendChild(sp_entry_acs) sp_entry.appendChild(sp_entry_sign_resp) sp_entry.appendChild(sp_entry_sign_assert) sp_entry.appendChild(sp_entry_single_logout) sp_entry.appendChild(sp_entry_attribute_profile) sps_element.appendChild(sp_entry) with open(sso_idp_file, 'w+') as f: root_element.writexml(f, newl="\n") # root_element.writexml(f) # data = json.loads(urllib.urlopen("http://ip.jsontest.com/").read()) # ip_entry = data["ip"] # publish SAML_ENDPOINT to metadata service # member_hostname = socket.gethostname() member_hostname = values["HOST_NAME"] # read kubernetes service https port log.info("Reading port mappings...") port_mappings_str = values["PORT_MAPPINGS"] https_port = None # port mappings format: """NAME:mgt-console|PROTOCOL:https|PORT:4500|PROXY_PORT:8443; # NAME:tomcat-http|PROTOCOL:http|PORT:4501|PROXY_PORT:7280;""" log.info("Port mappings: %s" % port_mappings_str) if port_mappings_str is not None: port_mappings_array = port_mappings_str.split(";") if port_mappings_array: for port_mapping in port_mappings_array: log.debug("port_mapping: %s" % port_mapping) name_value_array = port_mapping.split("|") protocol = name_value_array[1].split(":")[1] port = name_value_array[2].split(":")[1] if protocol == "https": https_port = port log.info("Kubernetes service port of wso2is management console https transport: %s" % https_port) saml_endpoint = "https://%s:%s/samlsso" % (member_hostname, https_port) saml_endpoint_property = {"key": "SAML_ENDPOINT", "values": [ saml_endpoint ]} mdsclient.put(saml_endpoint_property, app=True) log.info("Published property to metadata API: SAML_ENDPOINT: %s" % saml_endpoint) # start servers log.info("Starting WSO2 IS server") # set configurations carbon_replace_command = "sed -i \"s/CLUSTER_HOST_NAME/%s/g\" %s" % (member_hostname, "${CARBON_HOME}/repository/conf/carbon.xml") p = subprocess.Popen(carbon_replace_command, shell=True) output, errors = p.communicate() log.debug("Set carbon.xml hostname") catalina_replace_command = "sed -i \"s/STRATOS_IS_PROXY_PORT/%s/g\" %s" % (https_port, "${CARBON_HOME}/repository/conf/tomcat/catalina-server.xml") p = subprocess.Popen(catalina_replace_command, shell=True) output, errors = p.communicate() log.debug("Set catalina-server.xml proxy port") wso2is_start_command = "exec ${CARBON_HOME}/bin/wso2server.sh start" env_var = os.environ.copy() p = subprocess.Popen(wso2is_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("WSO2 IS server started") log.info("wso2is metadata handler completed")
def run_plugin(self, values): log = LogFactory().get_log(__name__) # read tomcat app related values from metadata mds_response = None while mds_response is None: log.debug( "Waiting for SSO_ISSUER and CALLBACK_URL to be available from metadata service for app ID: %s" % values["APPLICATION_ID"]) time.sleep(5) mds_response = mdsclient.get(app=True) if mds_response is not None: if mds_response.properties.get("SSO_ISSUER") is None or \ mds_response.properties.get("CALLBACK_URL") is None: mds_response = None # mds_response = mdsclient.get() issuer = mds_response.properties["SSO_ISSUER"] acs = mds_response.properties["CALLBACK_URL"] # add a service provider in the security/sso-idp-config.xml file # is_root = values["APPLICATION_PATH"] is_root = os.environ.get("CARBON_HOME") sso_idp_file = "%s/repository/conf/security/sso-idp-config.xml" % is_root # <SSOIdentityProviderConfig> # <ServiceProviders> # <ServiceProvider> # <Issuer>wso2.my.dashboard</Issuer> # <AssertionConsumerService>https://is.wso2.com/dashboard/acs</AssertionConsumerService> # <SignAssertion>true</SignAssertion> # <SignResponse>true</SignResponse> # <EnableAttributeProfile>false</EnableAttributeProfile> # <IncludeAttributeByDefault>false</IncludeAttributeByDefault> # <Claims> # <Claim>http://wso2.org/claims/role</Claim> # </Claims> # <EnableSingleLogout>false</EnableSingleLogout> # <SingleLogoutUrl></SingleLogoutUrl> # <EnableAudienceRestriction>true</EnableAudienceRestriction> # <AudiencesList> # <Audience>carbonServer</Audience> # </AudiencesList> # <ConsumingServiceIndex></ConsumingServiceIndex> # </ServiceProvider> with open(sso_idp_file, "r") as f: sp_dom = parse(f) root_element = sp_dom.documentElement sps_element = sp_dom.getElementsByTagName("ServiceProviders")[0] sp_entry = sp_dom.createElement("ServiceProvider") sp_entry_issuer = sp_dom.createElement("Issuer") sp_entry_issuer.appendChild(sp_dom.createTextNode(issuer)) sp_entry_acs = sp_dom.createElement("AssertionConsumerService") sp_entry_acs.appendChild(sp_dom.createTextNode(acs)) sp_entry_sign_resp = sp_dom.createElement("SignResponse") sp_entry_sign_resp.appendChild(sp_dom.createTextNode("true")) sp_entry_sign_assert = sp_dom.createElement("SignAssertion") sp_entry_sign_assert.appendChild(sp_dom.createTextNode("true")) sp_entry_single_logout = sp_dom.createElement("EnableSingleLogout") sp_entry_single_logout.appendChild(sp_dom.createTextNode("true")) sp_entry_attribute_profile = sp_dom.createElement( "EnableAttributeProfile") sp_entry_attribute_profile.appendChild(sp_dom.createTextNode("true")) sp_entry.appendChild(sp_entry_issuer) sp_entry.appendChild(sp_entry_acs) sp_entry.appendChild(sp_entry_sign_resp) sp_entry.appendChild(sp_entry_sign_assert) sp_entry.appendChild(sp_entry_single_logout) sp_entry.appendChild(sp_entry_attribute_profile) sps_element.appendChild(sp_entry) with open(sso_idp_file, 'w+') as f: root_element.writexml(f, newl="\n") # root_element.writexml(f) # data = json.loads(urllib.urlopen("http://ip.jsontest.com/").read()) # ip_entry = data["ip"] # publish SAML_ENDPOINT to metadata service # member_hostname = socket.gethostname() member_hostname = values["HOST_NAME"] payload_ports = values["PORT_MAPPINGS"].split("|") if values.get("LB_CLUSTER_ID") is not None: port_no = payload_ports[2].split(":")[1] else: port_no = payload_ports[1].split(":")[1] saml_endpoint = "https://%s:%s/samlsso" % (member_hostname, port_no) publish_data = mdsclient.MDSPutRequest() hostname_entry = {"key": "SAML_ENDPOINT", "values": saml_endpoint} properties_data = [hostname_entry] publish_data.properties = properties_data mdsclient.put(publish_data, app=True) # start servers log.info("Starting WSO2 IS server") # set configurations carbon_replace_command = "sed -i \"s/CLUSTER_HOST_NAME/%s/g\" %s" % ( member_hostname, "${CARBON_HOME}/repository/conf/carbon.xml") p = subprocess.Popen(carbon_replace_command, shell=True) output, errors = p.communicate() log.debug("Set carbon.xml hostname") catalina_replace_command = "sed -i \"s/STRATOS_IS_PROXY_PORT/%s/g\" %s" % ( port_no, "${CARBON_HOME}/repository/conf/tomcat/catalina-server.xml") p = subprocess.Popen(catalina_replace_command, shell=True) output, errors = p.communicate() log.debug("Set catalina-server.xml proxy port") wso2is_start_command = "exec ${CARBON_HOME}/bin/wso2server.sh start" env_var = os.environ.copy() p = subprocess.Popen(wso2is_start_command, env=env_var, shell=True) output, errors = p.communicate() log.debug("WSO2 IS server started")