7 Troubleshoot

Identify common problems in Oracle WebLogic Server for OCI and learn how to diagnose and solve them.

Check Known Issues

Learn about known problems in Oracle WebLogic Server for OCI and how to work around them.

Clone Script Failed

Issue: When you run the clone script it might fail at a particular stage.

Workaround: By using the error message, you can identify the stage where the error occurred, fix the error, and then run the following command to continue the cloning script from the required stage.
python3 /opt/scripts/cloning/create_clone.py -p <stage_name>

AD Mismatch:

In an Availability Domain (AD), if the threshold of set limits are reached, then when you create the Cloning instance the Compute instances might be placed in another Availability Domain that does not match the Availability Domain of the Original instance. Due to this mismatch, the cloned volumes cannot be attached.

Workaround: Use the Oracle WebLogic Server for OCI console to create backup of data volumes, and optionally, the Middleware volumes. Make a note of the OCIDs of backed up volumes and then complete the steps in Method 2: Manually create cloned volumes and destroy the source stack.

Cleanup Resources of a Deleted Instance

If you create an Oracle WebLogic Server for OCI instance and delete some resources outside of terraform, the terraform destroy may fail.

Issue:

You might have deleted an instance without destroying the instance. In this scenario, some of the resources you had created for the instance are not deleted.

Workaround:

In such scenarios, you can run the following script to remove all the resources of the instance.

  1. Copy the following script in Cloud Shell.

    For example, copy the script and save the file as remove_resources.py.

    """
    #
    # Copyright (c) 2021, Oracle Corporation and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    """
    
    import os
    import sys
    import oci
    
    """
    Lists and deletes the resources like instances, policies, volumes, VCN related resources, logs and tags etc..
    """
    
    
    class CleanUpResources:
    
        def __init__(self):
            # delegate token should be present at /etc/oci/delegation_token in cloud shell
            if os.path.exists('/etc/oci/delegation_token'):
                with open('/etc/oci/delegation_token', 'r') as file:
                    delegation_token = file.read()
                self.signer = oci.auth.signers.InstancePrincipalsDelegationTokenSigner(delegation_token=delegation_token)
            else:
                print("ERROR: In the Cloud shell the delegation token does not exist at location /etc/oci/delegation_token."
                      "Run the script from the Cloud shell, where you need to delete the resources.")
                sys.exit(1)
            self.vcn_client = oci.core.VirtualNetworkClient(config={}, signer=self.signer)
            self.virtual_network_composite_operations = oci.core.VirtualNetworkClientCompositeOperations(self.vcn_client)
            self.log_client = oci.logging.LoggingManagementClient(config={}, signer=self.signer)
            self.log_composite_operations = oci.logging.LoggingManagementClientCompositeOperations(self.log_client)
            self.identity_client = oci.identity.IdentityClient(config={}, signer=self.signer)
            self.identity_client_composite_operations = oci.identity.IdentityClientCompositeOperations(self.identity_client)
    
        # Lists all the resources based on the service name prefix
        def list_all_resources(self, service_name_prefix):
            search_client = oci.resource_search.ResourceSearchClient(config={}, signer=self.signer)
            running_resources = ["RUNNING", "Running", "AVAILABLE", "STOPPED", "Stopped", "ACTIVE", "CREATED", "INACTIVE"]
            resource_not_required = ["PrivateIp", "Vnic"]
            structured_search = oci.resource_search.models.StructuredSearchDetails(
                query="query all resources where displayname =~ '{}'".format(service_name_prefix),
                type='Structured',
                matching_context_type=oci.resource_search.models.SearchDetails.MATCHING_CONTEXT_TYPE_NONE)
    
            resources = search_client.search_resources(structured_search)
            resources_details = []
            no_of_resources = 0
            tagname_resource = "wlsoci-" + service_name_prefix
            default_rt = "Default Route Table for " + service_name_prefix
            print(
                "Resource Name                              Resource Type                        Resource Lifecycle State                 OCID         DOC")
            print(
                "=================================================================================================================================================")
            for resource in resources.data.items:
                resource_name = resource.display_name
                if (resource_name.startswith(service_name_prefix) or tagname_resource in resource_name or default_rt in resource_name) and (
                        resource.lifecycle_state in running_resources) and (
                        resource.resource_type not in resource_not_required):
                    resources_details.append(resource)
                    no_of_resources = no_of_resources + 1
                    print("{}             {}          {}          {}           {}".format(resource.display_name,
                                                                                          resource.resource_type,
                                                                                          resource.lifecycle_state,
                                                                                          resource.identifier,
                                                                                          resource.time_created))
            print(
                "================================================================================================================================================")
            print("Total number of resources {}".format(len(resources_details)))
            return resources_details
    
        # Removes all resources based on the service name prefix
        def cleanup_resources(self, delete_list):
            print("Deleting the resources")
            self.delete_policies(delete_list)
            self.delete_instance(delete_list)
            self.delete_block_volumes(delete_list)
            self.delete_load_balancer(delete_list)
            self.delete_subnet(delete_list)
            self.delete_sec_list(delete_list)
            self.delete_route_table(delete_list)
            self.delete_dhcp_options(delete_list)
            self.delete_internet_gateway(delete_list)
            self.delete_service_gateway(delete_list)
            self.delete_local_peering_gateway(delete_list)
            self.delete_nat_gateway(delete_list)
            self.delete_vcn_resources(delete_list)
            self.delete_unified_agent_configuration(delete_list)
            self.delete_log(delete_list)
            self.delete_log_group(delete_list)
            self.delete_mount_targets(delete_list)
            self.delete_fss(delete_list)
            self.delete_tag_namespace(delete_list)
            self.delete_boot_volumes(delete_list)
    
        # Delete Policies
        def delete_policies(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "Policy":
                    policy_ocid = resource.identifier
                    print("Deleting policy: {0}, with ocid: {1}".format(resource.display_name, policy_ocid))
                    try:
                        self.identity_client_composite_operations.delete_policy_and_wait_for_state(
                            policy_ocid,
                            wait_for_states=[oci.identity.models.Policy.LIFECYCLE_STATE_DELETED])
                        print("Deleted policy successfully!")
                    except Exception as e:
                        print("Error while deleting the policy {0}, policy id {1}, Error message {2}".format(
                            resource.display_name, policy_ocid, str(e)))
    
        # Delete Dynamic Group
        def delete_dynamic_group(self, service_name_prefix):
            tenancy = os.environ['OCI_TENANCY']
            dynamic_group_list = self.identity_client.list_dynamic_groups(tenancy).data
            for d_group in dynamic_group_list:
                if service_name_prefix in d_group.name:
                    print("Deleting the dynamic group: {0}, with ocid: {1}".format(d_group.name, d_group.id))
                    try:
                        self.identity_client_composite_operations.delete_dynamic_group_and_wait_for_state(
                            d_group.id, wait_for_states=[oci.identity.models.DynamicGroup.LIFECYCLE_STATE_DELETED])
                        print("Deleted the dynamic group successfully!")
                    except Exception as e:
                        print("Error while deleting the dynamic group name {}, ocid {}, Error message {}".format(
                            d_group.name, d_group.id, str(e)))
    
        # Delete Block Volumes
        def delete_block_volumes(self, delete_list):
            bv_client = oci.core.BlockstorageClient(config={}, signer=self.signer)
            bv_composite_operations = oci.core.BlockstorageClientCompositeOperations(bv_client)
            for resource in delete_list:
                if resource.resource_type == "Volume":
                    bv_ocid = resource.identifier
                    try:
                        print(
                            "Deleting the block volume: {0}, with ocid {1}".format(resource.display_name, bv_ocid))
                        bv_composite_operations.delete_volume_and_wait_for_state(
                            bv_ocid, wait_for_states=[oci.core.models.Volume.LIFECYCLE_STATE_TERMINATED])
                        print("Deleted the block volume successfully!")
                    except Exception as e:
                        print(
                            "Error while deleting the block volume {0}, ocid {1}, Error message {2}".format(
                                resource.display_name, bv_ocid, str(e)))
    
        # Delete all compute instances
        def delete_instance(self, delete_list):
            compute_client = oci.core.ComputeClient(config={}, signer=self.signer)
            compute_composite_operations = oci.core.ComputeClientCompositeOperations(compute_client)
            for resource in delete_list:
                if resource.resource_type == "Instance":
                    instance_ocid = resource.identifier
                    instance_name = resource.display_name
                    print("Deleting the compute instance: {0}, with ocid {1}".format(instance_name, instance_ocid))
                    try:
                        compute_composite_operations.terminate_instance_and_wait_for_state(
                            instance_ocid, wait_for_states=[oci.core.models.Instance.LIFECYCLE_STATE_TERMINATED])
                        print("Deleted the compute instance successfully!")
                    except Exception as e:
                        print(
                            "Error while deleting the instance {0}, ocid {1}, Error message {2}".format(
                                instance_name, instance_ocid, str(e)))
    
        # Delete all Subnets in the VCN
        def delete_subnet(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "Subnet":
                    subnet_ocid = resource.identifier
                    print(
                        "Deleting subnet: {0}, with ocid {1}".format(resource.display_name, resource.identifier))
                    try:
                        self.virtual_network_composite_operations.delete_subnet_and_wait_for_state(
                            subnet_ocid,
                            wait_for_states=[oci.core.models.Subnet.LIFECYCLE_STATE_TERMINATED])
                        print("Deleted subnet successfully!")
                    except Exception as e:
                        print("Error while deleting the subnet {0}, ocid {1}, Error message {2}".format(resource.display_name,
                                                                                                  subnet_ocid, str(e)))
    
        # Delete Security lists
        def delete_sec_list(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "SecurityList":
                    sec_list_name = resource.display_name
                    sec_list_ocid = resource.identifier
                    if not ("Default" in sec_list_name):
                        print(
                            "Deleting the security list: {0}, with ocid {1}".format(resource.display_name,
                                                                                   resource.identifier))
                        try:
                            self.virtual_network_composite_operations.delete_security_list_and_wait_for_state(
                                sec_list_ocid,
                                wait_for_states=[oci.core.models.SecurityList.LIFECYCLE_STATE_TERMINATED])
                            print("Deleted the security list successfully!")
                        except Exception as e:
                            print(
                                "Error while deleting the security list {0}, ocid {1}, Error message {2}".format(
                                    resource.display_name, sec_list_ocid, str(e)))
    
        # Delete Load balancers
        def delete_load_balancer(self, delete_list):
            lb_client = oci.load_balancer.LoadBalancerClient(config={}, signer=self.signer)
            lb_composite_operations = oci.load_balancer.LoadBalancerClientCompositeOperations(lb_client)
            for resource in delete_list:
                if resource.resource_type == "LoadBalancer":
                    lb_name = resource.display_name
                    lb_ocid = resource.identifier
                    print("Deleting Load balancer {0} with ocid {1}".format(lb_name, lb_ocid))
                    try:
                        lb_composite_operations.delete_load_balancer_and_wait_for_state(
                            lb_ocid,
                            wait_for_states=[oci.load_balancer.models.WorkRequest.LIFECYCLE_STATE_SUCCEEDED])
                        print("Load balancer deleted successfully!")
                    except Exception as e:
                        print(
                            "Error while deleting the loadbalancer {0}, ocid {1}, Error message {2}".format(
                                lb_name, lb_ocid, str(e)))
    
        # Delete Route tables
        def delete_route_table(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "RouteTable":
                    route_table_name = resource.display_name
                    route_table_ocid = resource.identifier
                    # Removing the route rules from the tables
                    rt_details = oci.core.models.UpdateRouteTableDetails()
                    rt_details.route_rules = []
                    self.virtual_network_composite_operations.update_route_table_and_wait_for_state(
                        route_table_ocid, rt_details,
                        wait_for_states=[oci.core.models.RouteTable.LIFECYCLE_STATE_AVAILABLE])
                    self.vcn_client.update_route_table(route_table_ocid, rt_details)
                    # Default route table can't be deleted from VCN
                    if not ("Default" in route_table_name):
                        print(
                            "Deleting the route table: {0}, with ocid {1}".format(resource.display_name,
                                                                                 resource.identifier))
                        try:
                            self.virtual_network_composite_operations.delete_route_table_and_wait_for_state(
                                route_table_ocid,
                                wait_for_states=[oci.core.models.RouteTable.LIFECYCLE_STATE_TERMINATED])
    
                            print("Deleted the route table successfully!")
                        except Exception as e:
                            print("Error while deleting the route table {0}, ocid {1}, Error message {2}".format(
                                resource.display_name, route_table_ocid, str(e)))
                            if "associated with Subnet" in str(e):
                                try:
                                    self.delete_subnet_route_table_association(route_table_ocid)
                                    # After removing the association again retrying the removal of route table
                                    # This is for Db subnet route table
                                    self.virtual_network_composite_operations.delete_route_table_and_wait_for_state(
                                        route_table_ocid,
                                        wait_for_states=[oci.core.models.RouteTable.LIFECYCLE_STATE_TERMINATED])
                                    print("Deleted the route table successfully!")
                                except Exception as e:
                                    print("Error while deleting the route table after removing the association "
                                          "{0}, ocid {1}, Error message {2}".format
                                          (resource.display_name, route_table_ocid, str(e)))
    
        # Delete Subnet and route table association to remove route table
        def delete_subnet_route_table_association(self, route_table_ocid):
            default_rt_id_in_vcn = ""
            print("Route table is associated with a subnet. Removing the association between the subnet and route table")
            rt_res = self.vcn_client.get_route_table(route_table_ocid).data
            vcn_id = rt_res.vcn_id
            compartment_id = rt_res.compartment_id
            list_route_rables_vcn = self.vcn_client.list_route_tables(compartment_id=compartment_id,
                                                                      vcn_id=vcn_id).data
            for rt in list_route_rables_vcn:
                if "Default Route" in rt.display_name:
                    default_rt_id_in_vcn = rt.id
            list_subnets = self.vcn_client.list_subnets(compartment_id=compartment_id, vcn_id=vcn_id).data
            for subnet in list_subnets:
                subnet_ocid = subnet.id
                if subnet.route_table_id == route_table_ocid:
                    subnet_details = oci.core.models.UpdateSubnetDetails()
                    subnet_details.route_table_id = default_rt_id_in_vcn
                    try:
                        self.virtual_network_composite_operations.update_subnet_and_wait_for_state(
                            subnet_ocid, subnet_details,
                            wait_for_states=[oci.core.models.Subnet.LIFECYCLE_STATE_AVAILABLE])
                        print("Removed the association between the subnet and route table.")
                    except Exception as e:
                        print("Error while removing the association between the subnet and route table {}".format(str(e)))
    
        # Delete DHCP Options
        def delete_dhcp_options(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "DHCPOptions":
                    dhcp_name = resource.display_name
                    dhcp_ocid = resource.identifier
                    if not ("Default" in dhcp_name):
                        print(
                            "Deleting the DHCP options: {0}, with ocid {1}".format(resource.display_name, dhcp_ocid))
                        try:
                            self.virtual_network_composite_operations.delete_dhcp_options_and_wait_for_state(dhcp_ocid,
                                                                                                             wait_for_states=[
                                                                                                                 oci.core.models.DhcpOptions.LIFECYCLE_STATE_TERMINATED])
                            print("Deleted the DHCP options successfully!")
                        except Exception as e:
                            print(
                                "Error while deleting the DHCP options {0}, ocid {1}, Error message {2} ".format(
                                    resource.display_name, dhcp_ocid, str(e)))
    
        # Delete Internet Gateway
        def delete_internet_gateway(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "InternetGateway":
                    ig_ocid = resource.identifier
                    print("Deleting the Internet Gateway: {0}, with ocid {1}".format(resource.display_name,
                                                                                    ig_ocid))
                    try:
                        self.virtual_network_composite_operations.delete_internet_gateway_and_wait_for_state(ig_ocid,
                                                                                                             wait_for_states=[
                                                                                                                 oci.core.models.InternetGateway.LIFECYCLE_STATE_TERMINATED])
    
                        print("Deleted the Internet Gateway successfully!")
                    except Exception as e:
                        print("Error while deleting the Internet Gateway {0}, ocid {1}, Error message {2}".format(
                            resource.display_name,
                            ig_ocid, str(e)))
    
        # Delete Service Gateway
        def delete_service_gateway(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "ServiceGateway":
                    svc_gateway_ocid = resource.identifier
                    print("Deleting the service gateway: {0}, with ocid {1}".format(resource.display_name,
                                                                                   svc_gateway_ocid))
                    try:
                        self.virtual_network_composite_operations.delete_service_gateway_and_wait_for_state(
                            svc_gateway_ocid, wait_for_states=[oci.core.models.ServiceGateway.LIFECYCLE_STATE_TERMINATED])
    
                        print("Deleted the service gateway successfully!")
                    except Exception as e:
                        print("Error while deleting the service gateway {0}, ocid {1}, Error message {2}".format(
                            resource.display_name,
                            svc_gateway_ocid, str(e)))
    
        # Delete Local Peering Gateway
        def delete_local_peering_gateway(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "LocalPeeringGateway":
                    lpg_ocid = resource.identifier
                    print("Deleting the local peering gateway: {0}, with ocid {1}".format(resource.display_name,
                                                                                         lpg_ocid))
                    try:
                        self.virtual_network_composite_operations.delete_local_peering_gateway_and_wait_for_state(
                            lpg_ocid, wait_for_states=[oci.core.models.LocalPeeringGateway.LIFECYCLE_STATE_TERMINATED])
    
                        print("Deleted local peering gateway successfully!")
                    except Exception as e:
                        print("Error while deleting the local peering gateway {0}, ocid {1}, Error message {2}".format(
                            resource.display_name, lpg_ocid, str(e)))
    
        # Delete Nat Gateway
        def delete_nat_gateway(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "NatGateway":
                    nat_ocid = resource.identifier
                    print("Deleting the NAT gateway: {0}, with ocid {1}".format(resource.display_name,
                                                                               nat_ocid))
                    try:
                        self.virtual_network_composite_operations.delete_nat_gateway_and_wait_for_state(
                            nat_gateway_id=nat_ocid,
                            wait_for_states=[oci.core.models.NatGateway.LIFECYCLE_STATE_TERMINATED]
                        )
                        print("Deleted the NAT gateway successfully!")
                    except Exception as e:
                        print("Error while deleting the NAT gateway {0}, ocid {1}, Error message {2}".format(
                            resource.display_name, nat_ocid, str(e)))
    
        # Delete VCN
        def delete_vcn_resources(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "Vcn":
                    vcn_ocid = resource.identifier
                    vcn_name = resource.display_name
                    print("Deleting the VCN: {0}, with ocid {1}".format(vcn_name, vcn_ocid))
                    try:
                        self.virtual_network_composite_operations.delete_vcn_and_wait_for_state(vcn_ocid,
                                                                                                oci.core.models.Vcn.LIFECYCLE_STATE_TERMINATED)
                        print("Deleted the VCN successfully!")
                    except Exception as e:
                        print("Error while deleting the VCN {0}, VCN id {1}, Error message {2}".format(vcn_name, vcn_ocid,
                                                                                                      str(e)))
    
        # Deleting the Unified Agent Configuration
        def delete_unified_agent_configuration(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "UnifiedAgentConfiguration":
                    uac_ocid = resource.identifier
                    print("Deleting the unified agent configuration: {}, with ocid {}".format(resource.display_name, uac_ocid))
                    try:
                        self.log_composite_operations.delete_unified_agent_configuration_and_wait_for_state(
                            uac_ocid,
                            wait_for_states=[oci.logging.models.WorkRequest.STATUS_SUCCEEDED])
                        print("Deleted the unified agent configuration successfully!")
                    except Exception as e:
                        print("Error while deleting the unified agent configuration name {0}, ocid {1} - Error message {2}".format(
                            resource.display_name, uac_ocid, str(e)))
    
        # Delete logs in a Log groups
        def delete_log(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "LogGroup":
                    log_group_ocid = resource.identifier
                    list_logs = self.log_client.list_logs(log_group_ocid).data
                    for log in list_logs:
                        print("Deleting the log name {0}, with log ocid {1}".format(log.display_name, log.id))
                        try:
                            self.log_composite_operations.delete_log_and_wait_for_state(
                                log_group_ocid, log.id, wait_for_states=[oci.logging.models.WorkRequest.STATUS_SUCCEEDED])
                            print("Deleted the log successfully!")
                        except Exception as e:
                            print("Error while deleting the log name {}, log ocid {}, Error message {}".format(
                                log.display_name, log.id, str(e)))
    
        # Delete Log Group
        def delete_log_group(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "LogGroup":
                    log_group_ocid = resource.identifier
                    print("Deleting the log group: {0}, with ocid {1}".format(resource.display_name,
                                                                             log_group_ocid))
                    try:
                        self.log_composite_operations.delete_log_group_and_wait_for_state(
                            log_group_ocid, wait_for_states=[oci.logging.models.WorkRequest.STATUS_SUCCEEDED])
    
                        print("Deleted log group successfully!")
                    except Exception as e:
                        print("Error while deleting the log group {0}, ocid {1}, Error message {2}".format(
                            resource.display_name, log_group_ocid, str(e)))
    
        # Delete the Mount targets
        def delete_mount_targets(self, delete_list):
            mt_client = oci.file_storage.FileStorageClient(config={}, signer=self.signer)
            mt_composite_operations = oci.file_storage.FileStorageClientCompositeOperations(mt_client)
            for resource in delete_list:
                if resource.resource_type == "MountTarget":
                    mt_ocid = resource.identifier
                    print("Deleting the mount target {0}, with ocid {1}".format(resource.display_name, mt_ocid))
                    try:
                        mt_composite_operations.delete_mount_target_and_wait_for_state(
                            mt_ocid, wait_for_states=[oci.file_storage.models.MountTarget.LIFECYCLE_STATE_DELETED])
                        print("Deleted the mount target successfully!")
                    except Exception as e:
                        print("Error while deleting the mount target {0}, ocid {1}, Error message {2}".format(
                            resource.display_name, mt_ocid, str(e)))
    
        # Delete FSS
        def delete_fss(self, delete_list):
            fss_client = oci.file_storage.FileStorageClient(config={}, signer=self.signer)
            fss_composite_operations = oci.file_storage.FileStorageClientCompositeOperations(fss_client)
            for resource in delete_list:
                if resource.resource_type == "FileSystem":
                    fss_ocid = resource.identifier
                    try:
                        # Get the list of exports to delete
                        list_exports = fss_client.list_exports(file_system_id=fss_ocid).data
                        for export in list_exports:
                            export_ocid = export.id
                            print("Deleting the export id {}".format(export_ocid))
                            fss_composite_operations.delete_export_and_wait_for_state(
                                export_id=export_ocid,
                                wait_for_states=[oci.file_storage.models.Export.LIFECYCLE_STATE_DELETED])
                            print("Deleted the exports successfully!")
                    except Exception as e:
                        print("Error while deleting the export, Error message {}".format(str(e)))
                    try:
                        print("Deleting the FSS: {0}, with ocid {1}".format(resource.display_name, fss_ocid))
                        fss_composite_operations.delete_file_system_and_wait_for_state(
                            fss_ocid, wait_for_states=[oci.file_storage.models.FileSystem.LIFECYCLE_STATE_DELETED])
                        print("Deleted the FSS successfully!")
                    except Exception as e:
                        print("Error while deleting the FSS name {0}, ocid {1}, Error message {2}".format(
                            resource.display_name, fss_ocid, str(e)))
    
        # Deletion of TagNamespace
        def delete_tag_namespace(self, delete_list):
            for resource in delete_list:
                if resource.resource_type == "TagNamespace":
                    tag_ns_name = resource.display_name
                    tag_ns_ocid = resource.identifier
                    print("Deleting the tag namespace {0}, with ocid {1}".format(tag_ns_name, tag_ns_ocid))
                    try:
                        # Retiring the tag namespace
                        tag_status = self.identity_client.get_tag_namespace(tag_namespace_id=tag_ns_ocid).data
                        print("Tag namespace: {} and isRetired: {}".format(tag_ns_name, tag_status.is_retired))
    
                        if not tag_status.is_retired:
                            print("Retiring the tag namespace {}".format(tag_ns_name))
                            tag_ns_details = oci.identity.models.UpdateTagNamespaceDetails()
                            tag_ns_details.is_retired = True
                            self.identity_client_composite_operations.update_tag_namespace_and_wait_for_state(
                                tag_namespace_id=tag_ns_ocid,
                                update_tag_namespace_details=tag_ns_details,
                                wait_for_states=[
                                    oci.identity.models.TagNamespace.LIFECYCLE_STATE_INACTIVE])
                            tag_status = self.identity_client.get_tag_namespace(tag_namespace_id=tag_ns_ocid).data
                            print("Tag status before deleting {}".format(tag_status.is_retired))
                        print("Deleting the tag namespace {}".format(tag_ns_name))
                        # Tag namespace deletion is taking too long time. So not waiting for the completion.
                        self.identity_client.cascade_delete_tag_namespace(tag_namespace_id=tag_ns_ocid)
                        print("Asynchronous deletion of Tag namespaces is enabled."
                              "Check the deletion status manually. Tag name {0} with ocid {1}".format(tag_ns_name,
                                                                                                     tag_ns_ocid))
                    except Exception as e:
                        print("Error while deleting the Tag namespace {0}, ocid {1}, Error message {2} "
                              .format(tag_ns_name, tag_ns_ocid, str(e)))
    
        # Deleting the unattached boot volumes
        def delete_boot_volumes(self, delete_list):
            bv_client = oci.core.BlockstorageClient(config={}, signer=self.signer)
            bv_composite_operations = oci.core.BlockstorageClientCompositeOperations(bv_client)
            for resource in delete_list:
                if resource.resource_type == "BootVolume" and resource.lifecycle_state == "AVAILABLE":
                    bv_ocid = resource.identifier
                    bv_name = resource.display_name
                    print("Deleting the boot volume {}, with ocid {} ".format(bv_name, bv_ocid))
                    try:
                        bv_composite_operations.delete_boot_volume_and_wait_for_state(
                            boot_volume_id=bv_ocid,
                            wait_for_states=[oci.core.models.BootVolume.LIFECYCLE_STATE_TERMINATED])
                        print("Deleted the boot volume successfully!")
                    except Exception as e:
                        print("Error while deleting the boot volume name {}, ocid {}, Error message {}".format(bv_name,
                                                                                                               bv_ocid,
                                                                                                               str(e)))
    
    
    if __name__ == '__main__':
        no_of_args = len(sys.argv)
        if no_of_args < 2:
            print("Usage: ")
            print("To list all the resources based on service name prefix:")
            print("python3 remove_resources.py <service_name_prefix>")
            print("To remove all the resources based on service name prefix:")
            print("python3 remove_resources.py <service_name_prefix> delete")
            sys.exit(1)
    
        service_prefix = sys.argv[1]
        print("Service prefix name:" + service_prefix)
        cleanup_util = CleanUpResources()
        if len(service_prefix) >= 16:
            service_prefix = service_prefix[0:16]
        service_prefix = service_prefix + "-"
        if no_of_args < 3:
            print("Listing all resources with service prefix name" + service_prefix)
            cleanup_resources = cleanup_util.list_all_resources(service_prefix)
        elif no_of_args < 4 and sys.argv[2] == "delete":
            print("Deleting all resources with service prefix name" + service_prefix)
            cleanup_resources = cleanup_util.list_all_resources(service_prefix)
            cleanup_util.cleanup_resources(cleanup_resources)
            cleanup_util.delete_dynamic_group(service_prefix)
    
  2. Run the following command to list all the resources:
    python3 remove_resources.py <full_service_prefix_name>
  3. Check that list and ensure that you want to delete these resources.
  4. Run the following command to deleted all the resources of the instance:
    python3 remove_resources.py <full_service_prefix_name> delete

Missing uuid for /u01/data or /u01/app on Reboot

Oracle WebLogic Server for OCI adds the UUID for volume mounts to /etc/fstab . In some instances no UUID value is returned for the mount, so an empty value is entered for UUID into /etc/fstab.

To see if this is the cause of the failed mount, run the following:
cat /etc/fstab | grep /u01/
Example output for /u01/app:

UUID=5341b4d8-9905-479d-be44-9241349add47 /u01/app ext4 auto,defaults,_netdev,nofail 0 2

Example output for /u01/data:

UUID= /u01/data ext4 auto,defaults,_netdev,nofail 0 2
Workaround
  1. Locate the device to mount.

    In almost all cases where this is observed, the mount only fails for one of the devices. Run the following to locate the device:

    sudo lsblk | grep /u01/

    Example output:

    sdb 8:16 0 50G 0 disk /u01/app

    In the above example /u01/app is mounted to device sdb. The other device WebLogic Server for OCI provides is sdc. Therefore, the device to mount /u01/data would be sdc. If the output had returned sdc for /u01/app then you would use sdb as the device.

  2. Mount the device.

    Continuing with the example from above, this command would be:

    sudo mount -v -t ext4 /dev/sdc /u01/data

    If this command returns an error including "does not contain SELinux labels" and /u01/data is still empty, run the following:

    sudo restorecon -Rv /
    sudo mount -v -t ext4 /dev/sdc /u01/data

    If /u01/data is still empty, you can wait 30 minutes, and try the above commands again, or you can move on to step 3 and reboot after modifying /etc/fstab.

  3. Get the UUID regardless of whether the device was mounted.

    Continuing with the example:

    sudo blkid -s UUID -o value /dev/sdc

    Example UUID value output:

    5341b4d8-9905-479d-be44-9241349add47
  4. Update /etc/fstab with the acquired UUID so future reboots won't experience this problem.

    Either use sudo vi to update /etc/fstab with the value retrieved from step 3 or use a sed command like below:

    sudo sed -i -e "s;UUID= /u01/data;UUID=5341b4d8-9905-479d-be44-9241349add47 /u01/data;" /etc/fstab
  5. If the device was not mounted in step 2, then reboot the instance.

    Due to completion of step 4, it should be mounted on reboot.

Error in Mounting the Volume During Provisioning

Troubleshoot a failed Oracle WebLogic Server for OCI domain due to Oracle Cloud Infrastructure (OCI) policy not in effect.

Issue:

When you create a domain with the OCI Policies check box selected, at times, the policy creation takes longer time than it takes to reach the first OCI API call, that is, the call to create a volume mount, and an error message is displayed in the bootstrap log.

Example message:

Exception stacktrace [
{'opc-request-id': '<GUID>', 'code': 'NotAuthorizedOrNotFound', 'message': 'Authorization failed or requested resource not found.', 'status': 404} 
]
Error executing volume mounting.. Exiting provisioning

Workaround:

  1. Create a dynamic group using the following rule:

    All { instance.compartment.id = '<resource_compartment ocid>') }

    To create a dynamic group, see Create a Dynamic Group.

  2. Create the policy for the dynamic group as follows:

    Example policy:

    Allow dynamic-group MyInstancesPrincipalGroup to use volumes in compartment MyCompartment where any { request.operation = 'AttachVolume', request.operation = 'DetachVolume'}" 

    To create other policies for the dynamic group, see Create Policies for the Dynamic Group.

  3. Wait for 10 to 15 minutes and then create a domain without selecting the OCI Policies check box.
  4. Delete the dynamic group and policy created manually after the domain is created.

Unable to Access the WebLogic Console From the Internet

Troubleshoot problems accessing the WebLogic Console of an Oracle WebLogic Server domain after it's successfully created.

By default the WebLogic Server Administration Console is accessed through port 7001 or 7002.

To check port access:

  1. Access the Oracle Cloud Infrastructure console.
  2. From the navigation menu, select Networking, and then click Virtual Cloud Networks.
  3. Select the compartment in which you created the domain.
  4. Select the virtual cloud network in which the domain was created.
  5. Select the subnet where the WebLogic Server compute instance is provisioned.
  6. Select the security list assigned to this subnet.
  7. For a domain that's not on a private subnet, make sure the following ingress rules exist:
    Source: 0.0.0.0/0
    IP Protocol: TCP
    Source Port Range: All
    Destination Port Range: 7002
    Source: 0.0.0.0/0
    IP Protocol: TCP
    Source Port Range: All
    Destination Port Range: 7001

    For a domain on a private subnet, set the Source to the CIDR of the bastion instance subnet.

Unable to Access the Sample Application Using the Load Balancer

Troubleshoot problems accessing the load balancer of an Oracle WebLogic Server domain after it's successfully created.

Cannot access the sample application using the load balancer: Not Found

On a domain running Oracle WebLogic Server Standard Edition, the sample application is deployed only to the first Managed Server. If your Standard Edition domain has multiple Managed Servers and you access the sample application using a load balancer, the Managed Servers that aren't hosting the sample application will respond with the code 404 (Not Found).

You can use the WebLogic Server Administration Console to update the targets for the sample application, and add the remaining Managed Servers.

Cannot access applications using the load balancer: Bad Gateway

If you restart the compute instances running your Managed Servers, or you restart the compute instances running the App Gateway, the backend set of the load balancer will temporarily be in an unhealthy state. By default, a load balancer in this state will respond with the code 502 (Bad Gateway). After the WebLogic Server and App Gateway processes are running, the load balancer should return to the OK state.

To check the status of the load balancer and backend servers:

  1. Access the Oracle Cloud Infrastructure console.
  2. From the navigation menu, select Networking, and then click Load Balancers.
  3. Click the load balancer that was created for your domain, prefix-lb.
  4. Click Backend Sets, and then click prefix-lb-backendset.
  5. Click Backends, and then check the state of each backend.
  6. Access the WebLogic compute instances using a secure shell (SSH) client. Check that the Managed Server process is listening on its assigned port (the default is 7003).
    curl -s -o /dev/null -w "%{http_code}\n" http://private_ip:7003

    A 404 response indicates that the Managed Server is running.

  7. If you enabled authentication with Oracle Identity Cloud Service, then access the App Gateway compute instances using an SSH client. Check that the App Gateway process is listening on its assigned port (the default is 9999).
    curl -s -o /dev/null -w "%{http_code}\n" http://private_ip:9999

    A 404 response indicates that the App Gateway is running.

See Managing Backend Servers in the Oracle Cloud Infrastructure documentation.

Unable to Access the Fusion Middleware Control Console or the Enterprise Manager Console From the Internet

Troubleshoot problems accessing the Fusion Middleware Control Console and the Enterprise Manager Consoles of an Oracle WebLogic Server domain after it is created successfully.

If you have enabled authentication with Oracle Identity Cloud Service on a WebLogic Server 12.2.1.4 domain, you might be redirected to an error page when you try to log in to the Fusion Middleware Control Console or the Enterprise Manager Console.

Example error message:

<Error> <oracle.help.web.rich.OHWFilter>
<BEA-000000> <ADFSHARE-00120: Error encountered while creating the MDS
Session. Application state will be reset. Please logout and log back in if
problem persists.
oracle.adf.share.ADFShareException: ADFSHARE-00120: Error encountered while
creating the MDS Session. Application state will be reset. Please logout and
log back in if problem persists.

You need to add the Cloud Gate privilege to access the consoles.

To access the Consoles:

  1. Add the Cloud Gate App Role to your confidential application that you created for the domain.
    1. Access the Oracle Identity Cloud Service console.
    2. From the navigation menu, click Applications.
    3. Click the confidential application that was created for your domain.
    4. Click the Configuration tab.
    5. Under Client Configuration, locate Grant the client access to Identity Cloud Service Admin APIs, and then click Add.
    6. Select the Cloud Gate App Role and click Add.
    7. Click Save.
  2. Restart your WebLogic Server domain and log in to the Fusion Middleware Control Console or the Enterprise Manager Console again.

See Create a Confidential Application.

Note:

This issue is seen only in releases earlier than 23.2.3. From release 23.2.3 onward, the confidential application for a JRF domain is set with the Authenticator Client and Cloud Gate roles by default. Hence, this workaround is not required.

Load Balancer Does Not Send Cookie X-Oracle-BMC-LBS-Route

When you setup Oracle WebLogic Server for OCI with a load balancer, the load balancer does not send cookie X-Oracle-BMC-LBS-Route.

Scenario:
  1. Create a 2-node WebLogic instance with load balancer by using a Oracle WebLogic Server for OCI listings in marketplace.
  2. Access the sample app through load balancer.
  3. In your web browser, go to WebDeveloper > Web Console > Network.
  4. Click Reload.
  5. Click on Get request of the sample app, then select the Cookies tab

    The cookies tab is empty.

Workaround:
  1. Sign in to the Oracle Cloud Infrastructure console.
  2. From the navigation menu, click Networking, and then click Load Balancers.
  3. Click the name of the Compartment that contains the load balancer you want to modify, and then click the load balancer's name.
  4. , and then click the name of the backend set you want to modify.
  5. In the Resources menu, click Backend Sets. Deselect HTTP Only.
  6. Save the changes.
  7. Undo the changes you did in step 5 and then save the changes.
  8. Reload the sample app browser.

    Now you can view that the cookie with name X-Oracle-BMC-LBS-Route is passed properly.

Reapply Fails for Load Balancer Configuration

Troubleshoot the problem for load balancer configuration in Oracle WebLogic Server for OCI during stack reapply.

Issue:

For a stack that is provisioned with a new load balancer, reapply fails, if you modify the following load balancer configuration:

  • Change the CIDR for the load balancer subnet
  • Change the load balancer from public to private or vice versa
Workaround:
  1. Sign in to the Oracle Cloud Infrastructure Console.
  2. Click the navigation menu Navigation Menu icon, select Developer Services. Under the Resource Manager group, click Stacks.
  3. Select the Compartment that contains your stack.
  4. Click the name of your stack.
  5. Click Variables and then click Edit Variables.
  6. Deselect Provision Load Balancer.
  7. Click Next and save the changes.
  8. On the Stack Details page, click Apply.
  9. In the Apply panel, enter a name for the job and click Apply.
  10. Periodically monitor the progress of the Apply job until it is finished.
  11. Go to the Stack Details page, and click Variables and then click Edit Variables.
  12. Select Provision Load Balancer.
  13. Configure the load balancer based on your requirements.
    • Change the CIDR of the load balancer subnet.
    • Select Private Load Balancer to change from public to private or deselect Private Load Balancer to change from private to public.

      Note:

      This option is available only if you used a private subnet for WebLogic Server.
  14. Click Next and save the changes.
  15. On the Stack Details page, click Apply.
  16. In the Apply panel, enter a name for the job and click Apply.
  17. Periodically monitor the progress of the Apply job until it is finished.

The load balancer configuration changes are now applied on the stack.

Autoscaling Failed to Create Functions

When you create an Oracle WebLogic Server for OCI domain with autoscaling enabled, functions may not be created during provisioning.

Issue:

During provisioning, if autoscaling failed to create the functions due to invalid OCIR auth token value, provisioning is successful but the following error is displayed in the log:

module.provisioners.null_resource.print_service_info[0] (remote-exec): ************************************************************
module.provisioners.null_resource.print_service_info[0] (remote-exec): This service is configured with the following options .....
module.provisioners.null_resource.print_service_info[0] (remote-exec): WebLogic Server for OCI Version : 22.1.1-220208100422
module.provisioners.null_resource.print_service_info[0] (remote-exec): WebLogic Server Version: 12.2.1.4
module.provisioners.null_resource.print_service_info[0] (remote-exec): WebLogic Server Edition: SUITE
module.provisioners.null_resource.print_service_info[0] (remote-exec): Virtual Cloud Network : NEW VCN
module.provisioners.null_resource.print_service_info[0] (remote-exec): Network Type: PRIVATE Network with BASTION
module.provisioners.null_resource.print_service_info[0] (remote-exec): Domain Type: Plain WebLogic Server Domain (non-JRF)
module.provisioners.null_resource.print_service_info[0] (remote-exec): APM agent enabled : [True]
module.provisioners.null_resource.print_service_info[0] (remote-exec): APM agent installed : [True]
module.provisioners.null_resource.print_service_info[0] (remote-exec): Failed to create autoscaling resources, Check provisioning logs for details
module.provisioners.null_resource.print_service_info[0] (remote-exec): User can invoke remove_resources.py script and then rerun the configure_autoscaling.sh script on Admin VM to recreate the resources.
module.provisioners.null_resource.print_service_info[0] (remote-exec): ************************************************************

Workaround:

Perform the following steps to create the function resources:
  1. Update the OCIR auth token secret to the valid OCIR auth token as follows:
    • In the script /opt/scripts/observability/autoscaling/configure_autoscaling.sh, replace the line ocir_auth_token=$(python3 /opt/scripts/wls_credentials.py ocirAuthToken)with ocir_auth_token='<VALID_AUTH_TOKEN>'.
  2. Run the script to delete resources to clean up any resources created by autoscaling during provisioning from WebLogic administration instance.

    python3 remove_resources.py pre-destroy <service_name_prefix> -f autoscaling

  3. Log in as a root user to the Administration server and run the configure_autoscaling.sh script.

    /opt/scripts/observability/autoscaling/configure_autoscaling.sh

    This script creates the autoscaling functions using the valid OCIR auth token from step 1. If you encounter any errors when you run the script, see /u01/logs/provisioning.log.

  4. In the OCI console, verify if:
    • Autoscaling functions are created under the function application.
    • Notification subscriptions are created for Scale Out and Scale In notification topics.
    • Event rule is created for the stack.

Management Agents Are Not Deleted on Instance Termination

In case of an Oracle WebLogic Server for OCI domain with autoscaling enabled, when you destroy the stack, the management agent resources associated with the compute instance are not destroyed.

Issue:

When you destroy the stack, the compute instance for the domain is terminated but the associated management agent resources are active.

Workaround:

Perform the following steps to manually delete the management agent resources:

Note:

You must run the following commands from the Cloud Shell. You can also install OCI CLI and create the config file on your host, and then run the following commands. See Installing the CLI.
  1. List the management agents in the stack compartment.
    oci management-agent agent list --compartment-id <stack_compartment_ocid>
    oci management-agent agent list --compartment-id <stack_compartment_ocid>  | grep ocid1.managementagent | grep '"id":'
    
  2. Delete the management agents associated with your service.
    oci management-agent agent delete --agent-id <OCID_of_the_managementagent_from_step1> --force

Enterprise Manager Console Is Not Loading

Issue: After you create a JRF-enabled domain without Oracle Identity Cloud Service in Oracle WebLogic Server for OCI, you are unable to log into the Enterprise Manager console.

Note:

This issue is applicable for stacks created between 31st August, 2022 and 20th September, 2022 (22.3.2 release).

Workaround:

  1. Edit the jps-config.xml located in /u01/data/domain/<domain-name>/config/fmwconfig/. Replace idstore.scim with idstore.ldap.
    <serviceInstanceRef ref="idstore.ldap"/>
  2. Execute the restart_domain.sh script.
    /opt/scripts/restart_domain.sh -o restart

Scale Out Fails on the Administration Compute Instance

Scale out fails due to high CPU usage on the administration compute instance.

Issue:

If the administration compute instance is stressed to 100 percent utilization, the scale out fails as the pack commands that are run during scale out on the administration compute instance do not give any results and time out.

Workaround:

Verify if the control group wlsmcg exists under /sys/fs/cgroup/cpu. If it exists, assign process IDs for the administration server and managed server to the control group, and assign CPU shares to the control group to manage the CPU usage. So, you can successfully run the pack command.

Note:

If you start the servers on the administration compute instance using scripts or through the WebLogic console, the new process IDs for the server are not added to the control group.
To reassign the process ID for the administration server and managed server to the control group:
  1. Check if current server process ID is part of the control group wlsmcg.
    cat /sys/fs/cgroup/cpu/wlsmscg/tasks | grep "<processID for managed server>"
  2. If the process ID is not found in the step 1, run the following script as the opc user to create control groups and assign process IDs for the administration server and managed server.
    sudo /opt/scripts/create_control_groups.sh
  3. Verify that managed server process ID is assigned to the control group, wlsmscg.
     cat /sys/fs/cgroup/cpu/wlsmscg/tasks | grep "<processID for managed server>"

Enable OS Management to Install Patches

For an existing Oracle WebLogic Server for OCI instance, you might encounter issues when you use the OS Management to apply patches.

So, to enable the OS Management, create the following policies:

Allow dynamic-group MyInstancesPrincipalGroup to use osms-managed-instances in compartment MyCompartment
Allow dynamic-group MyInstancesPrincipalGroup to use osms-managed-instances in compartment MyCompartment

Warnings for Schema Password

You receive warning messages about password expiry for your infrastructure schema password when you log in to the administration instance. If you want to reset the password, follow the instructions in Update the Infrastructure Schema Password.

Security Checkup Tool Warnings

Learn about the security check warnings that are displayed in the Oracle WebLogic Server Administration console and how to troubleshoot them.

At the top of the WebLogic Server Administration console, the message Security warnings detected. Click here to view the report and recommended remedies is displayed for Oracle WebLogic Server for OCI instances created after July 20, 2021, or the instances on which the July 2021 PSUs are applied.

When you click the message, a list of security warnings are displayed as listed in the following table.

The warning messages listed in the table are examples.

Security Warnings

Warning Message Resolution

The configuration for key stores for this server are set to Demo Identity and Demo Trust. Trust Demo certificates are not supported in production mode domains.

Configure the identity and trust keystores for each server and the name of the certificate in the identity keystore that the server uses for SSL communication. See Configure Keystore Attributes for Identity and Trust.

Note: This warning is displayed for Oracle WebLogic Server for OCI instances created after October 20, 2021, or the instances on which the October PSUs are applied.

SSL hostname verification is disabled by the SSL configuration.

You see the SSL host name verification warnings in case of existing Oracle WebLogic Server for OCI instances created before release 21.3.2 (August 17, 2021).

Review your applications before you make any changes to address these SSL host name security warnings.

For applications that connect to SSL endpoints with a host name in the certificate, which does not match the local machine's host name, the connection fails if you configure the BEA host name verifier in Oracle WebLogic Server. See Using the BEA Host Name Verifier in Administering Security for Oracle WebLogic Server.

For applications that connect to Oracle provided endpoints such as Oracle Identity Cloud Service (for example,*.identity.oraclecloud.com), the connection fails if you did not configure the wildcard host name verifier or a custom host name verifier that accepts wildcard host names. If you are not sure of the SSL configuration settings you should configure to address the warning, Oracle recommends that you configure the wildcard host name verifier. See Using the Wildcard Host Name Verifier in Administering Security for Oracle WebLogic Server.

Note: For WebLogic Server 14.1.1.0.0, the default host name verifier is set to the wildcard host name verifier.

Remote Anonymous RMI T3 or IIOP requests are enabled. Set the RemoteAnonymousRMIT3Enabled and RemoteAnonymousRMIIIOPEnabled attributes to false.

Disable the anonymous RMI T3 and IIOP requests in the WebLogic Server Administration Console as soon as possible unless your deployment requires anonymous T3 or IIOP (not typical). See Disable Remote Anonymous RMI T3 and IIOP Requests.

After you address the warnings, you must click Refresh Warnings to see the warnings removed in the console.

For Oracle WebLogic Server for OCI instances created after July 20, 2021, though the java properties to disable anonymous requests for preventing anonymous RMI access are configured, the warnings still appear. This is a known issue in Oracle WebLogic Server.

If you want to perform anonymous RMI requests, you must disable the java properties. Go to the nodemanager.properties file located under DOMAIN_HOME/nodemanager and remove the weblogic.startup.Arguments property.

Disable Remote Anonymous RMI T3 and IIOP Requests

To disable the remote anonymous RMI T3 and IIOP requests in the WebLogic Server Administration console:

  1. Locate the Change Center and click Lock & Edit to lock the editable configuration hierarchy for the domain.

  2. Under Domain structure, select the domain name, and then select the Security tab.

  3. Expand Advanced and deselect Remote anonymous RMI access via IIOP and Remote anonymous RMI access via T3.

After saving the changes, return to Change Center and click Activate Changes.

Configure Keystore Attributes for Identity and Trust

To configure the identity and trust keystore files and the name of the certificate in the identity keystore in the WebLogic Server Administration console:

  1. Locate the Change Center and click Lock & Edit to lock the editable configuration hierarchy for the domain.

  2. Under Domain structure, select Environment and then select Servers.

  3. In the Servers table, select the server you want to configure.

  4. On the Configuration tab, click Keystores, and then click Change.

  5. Select Custom Identity and Custom Trust, and then click Save.

  6. Under Identity, provide the following details:

    1. Enter the full path of your identity keystore.

      For example: /u01/data/keystores/identity.jks

    2. For Custom Identity Keystore Type, enter JKS.

    3. For Custom Identity Keystore Passphrase, enter your keystore password. Enter the same value for Confirm Custom Identity Keystore Passphrase.

  7. Under Trust, provide the following details:

    1. Enter the full path of your identity keystore.

      For example, /u01/data/keystores/trust.jks

    2. For Custom Trust Keystore Type, enter JKS.

    3. For Custom Trust Keystore Passphrase, enter your keystore password. Enter the same value for Confirm Custom Trust Keystore Passphrase.

  8. Click Save.

  9. Click the SSL tab.

  10. Under Identity, provide the following details:

    1. For Private Key Alias, enter the name of the certificate (private key) in the identitykeystore, server_cert.

    2. For Private Key Passphrase, enter the password for this certificate in the keystore. Enter the same value for Confirm Private Key Passphrase.

      By default, the password for the certificate is the same as the identity keystore password.

  11. Click Save.

    After saving the changes, return to Change Center and click Activate Changes.

  12. Repeat steps 3 to 9 to configure each server in the domain.

Running python3 Command Fails

Issue: When you run a command that uses python3, it might fail on the stacks that were created earlier than May 25, 2022.

Workaround: If your stack is created earlier than May 25, 2022, then in the command use python. For stacks created after May 25, 2022, use python3.

Unrecognized Arguments When Using the Patching Utility Tool

When you run the patching utility tool with some of the documented arguments, you see the unrecognized arguments message.

Issue:

Run the patching utility tool to list latest patches, list pending patches, download latest patches, apply patches, and roll back patches using patch-utils with the following arguments:
#List patches
patch-utils list -L
#List pending patches
patch-utils diff
#Download latest patches
patch-utils download -L -p /tmp/<Location to download> 
#Apply patches
patch-utils apply -L
#Roll back patches
patch-utils rollback -L

The following message is displayed:

usage: patch-utils <action> [options]
patch-utils: error: unrecognized arguments:

The listed arguments correspond to latest features added to the patching utility tool for Oracle WebLogic Server for OCI instances created after December 15, 2022 (22.4.3). So, if you are using Oracle WebLogic Server for OCI instances created before release December 15, 2022, you see the unrecognized arguments message.

Workaround:

Run patch-utils upgrade to upgrade the patching tool, if you are using the latest features of the patching utility tool for your existing instances (created before release December 15, 2022). See Upgrade Patching Tool.

Get Additional Help and Contact Support

Use online help, email, customer support, and other tools if you have questions or problems with Oracle WebLogic Server for OCI.

For customer support, you can create support tickets using the Oracle Cloud Infrastructure (OCI) console or My Oracle Support.

Create Support Ticket Using OCI Console

Use the Support Center in Oracle Cloud Infrastructure console to create a support ticket for your technical issues for Oracle WebLogic Server for OCI service in the Marketplace.

Note:

Make sure to provision your support account before you create a support request. See Configuring Your Oracle Support Account in Oracle Cloud Infrastructure documentation.

To create a support ticket:

  1. Sign in to the Oracle Cloud Infrastructure console.
  2. Click the navigation menu Navigation Menu icon, and select Governance & Administration. Under Support, click Support Center.
  3. Click Create Support Request.

    The Technical Support tab on the Support Options page is displayed.

  4. For Issue Summary, enter the a title that summarizes your issue.
  5. For Describe Your Issue, enter a brief description of your issue.
  6. Select the severity level of the issue based on the impact of service.
  7. Select Compute from the Select Service list.
  8. Select Oracle WebLogic Cloud from the Select Category list.
  9. Select the type of issue you are experiencing.
  10. Click Create Support Request.

After you submit the request, My Oracle Support sends a confirmation email to the address provided in the primary contact details. A follow-up email is sent if additional information is required.

Optionally, you can create a support ticket using the Help menu Help Menu Icon and the Support button Support Iconin Oracle Cloud Infrastructure console. See Support Ticket Management in Oracle Cloud Infrastructure documentation.

However, when you a create support ticket using these options, the support ticket may not be assigned to a specific service or component for resources like compute instances, networks and load balancers. So, it is recommended to use Support Center in Oracle Cloud Infrastructure console to create support tickets.

Create Support Ticket Using My Oracle Support

Use the Service Request in My Oracle Support to create a support ticket for your technical issues for Oracle WebLogic Server for OCI service in the Marketplace.

Note:

Make sure you have a Support Identifier which verifies your eligibility for Support services, and an account at My Oracle Support.

To create a support ticket:

  1. Sign in to My Oracle Support.
  2. On the Service Requests tab, click Create Technical SR.
  3. Enter the Problem Summary and the Problem Description.
  4. Under Where is the Problem, click Cloud.
  5. Select Oracle WebLogic for Cloud Infrastructure from the Service Type list.
  6. Select the tenancy from the Service list.
  7. Select a Problem Type and provide the Support Identifier details.
  8. Click Next until you have provided all the mandatory information.
  9. Click Submit.

    Your service request is created.

For general help with Oracle Cloud Marketplace, see How Do I Get Support in Oracle Cloud Infrastructure documentation.

Unable to Fetch the Password Expiry Date for the OPSS User

For JRF-enabled Oracle WebLogic Server for OCI instances created after release 23.1.1, if your Oracle Platform Security Services (OPSS) schema password is nearing expiry, you will get a notification about the password expiry date so you can update your schema password. However, if you are using a database connection string to provision a domain an Oracle WebLogic Server domain, you will encounter an error.

Issue

If you create a Oracle WebLogic Server for OCI instance with JRF using the database connections string, you will encounter the following error message:
<WLSC-ERROR> : Unable to get schema password expiry date. Failed to get password expiry date for OPSS User. For details, refer the log, /u01/logs/opss_pwd_expiry.log
The opss_pwd_expiry.log file will display the following:
SEVERE: ERROR: Failed to get password expiry date for OPSS User.ORA-65015: missing or invalid container name

Workaround

This error occurs because the pluggable database (PDB) name is not set in the metadata. Therefore, when you run the opss_password_expiry_date.sh script, it fetches an empty string for the <pdb_name> attribute.

To avoid the error:
  1. Set the metadata attribute pdb_name when you use a database connection string to provision an Oracle WebLogic Server for OCI instance.
    python3 /opt/scripts/databag.py pdb_name
  2. If the above command results in an empty value, update the database value:
    python3 /opt/scripts/utils/update_metadata.py -k pdb_name -v <pdb_name>
  3. Execute Step 1 again to confirm that the value is updated:
    python3 /opt/scripts/databag.py pdb_name
  4. Run the following command to confirm that the workaround is successful:
    bash /opt/scripts/validation/opss_password_expiry_date.sh