From 826d9edd2492c3bbe492face3ce4d7fe0dd84b8a Mon Sep 17 00:00:00 2001 From: Sirisha_Manchikanti Date: Fri, 17 Sep 2021 17:33:11 +0100 Subject: Add http and k8s participant to CSIT Add HTTP and Kubernetes participant to policy/docker/csit Issue-ID: POLICY-3413 Signed-off-by: Sirisha_Manchikanti Change-Id: Id87dca9ba6487b2f12e9d036136ea553d2b67a23 --- csit/clamp/plans/setup.sh | 17 +- csit/clamp/tests/data/InstantiateCL.json | 64 +- csit/clamp/tests/data/PMSHMultipleCLTosca.yaml | 697 +++++++++++++++++---- csit/config/clamp/ClRuntimeParameters.json | 56 -- csit/config/clamp/ClRuntimeParameters.yaml | 60 ++ csit/config/clamp/DcaeParticipantParameters.json | 65 -- csit/config/clamp/HttpParticipantParameters.yaml | 24 + .../clamp/KubernetesParticipantParameters.yaml | 58 ++ csit/config/clamp/PolicyParticipantParameters.json | 49 -- csit/config/clamp/PolicyParticipantParameters.yaml | 45 ++ csit/config/db/db.sh | 2 +- csit/docker-compose-all.yml | 64 +- 12 files changed, 841 insertions(+), 360 deletions(-) delete mode 100644 csit/config/clamp/ClRuntimeParameters.json create mode 100644 csit/config/clamp/ClRuntimeParameters.yaml delete mode 100644 csit/config/clamp/DcaeParticipantParameters.json create mode 100644 csit/config/clamp/HttpParticipantParameters.yaml create mode 100644 csit/config/clamp/KubernetesParticipantParameters.yaml delete mode 100644 csit/config/clamp/PolicyParticipantParameters.json create mode 100644 csit/config/clamp/PolicyParticipantParameters.yaml (limited to 'csit') diff --git a/csit/clamp/plans/setup.sh b/csit/clamp/plans/setup.sh index 746a16e2..dbd5b6a4 100644 --- a/csit/clamp/plans/setup.sh +++ b/csit/clamp/plans/setup.sh @@ -27,14 +27,15 @@ sudo apt-get -y install libxml2-utils source ${SCRIPTS}/detmVers.sh -docker-compose -f ${SCRIPTS}/docker-compose-all.yml up -d policy-controlloop-runtime +docker-compose -f ${SCRIPTS}/docker-compose-all.yml up -d policy-clamp-cl-runtime sleep 10 unset http_proxy https_proxy -POLICY_CONTROLLOOP_RUNTIME_IP=`get-instance-ip.sh policy-controlloop-runtime` -POLICY_PARTICIPANT_IP=`get-instance-ip.sh policy-participant` -DCAE_PARTICIPANT_IP=`get-instance-ip.sh dcae-participant` +POLICY_CONTROLLOOP_RUNTIME_IP=`get-instance-ip.sh policy-clamp-cl-runtime` +POLICY_PARTICIPANT_IP=`get-instance-ip.sh policy-clamp-cl-pf-ppnt` +K8S_PARTICIPANT_IP=`get-instance-ip.sh policy-clamp-cl-k8s-ppnt` +HTTP_PARTICIPANT_IP=`get-instance-ip.sh policy-clamp-cl-http-ppnt` MARIADB_IP=`get-instance-ip.sh mariadb` DMAAP_IP=`get-instance-ip.sh simulator` POLICY_API_IP=`get-instance-ip.sh policy-api` @@ -44,14 +45,16 @@ echo DMAAP_IP IS ${DMAAP_IP} echo API IP IS ${POLICY_API_IP} echo POLICY CONTROLLOOP RUNTIME IP IS ${POLICY_CONTROLLOOP_RUNTIME_IP} echo POLICY PARTICIPANT IP IS ${POLICY_PARTICIPANT_IP} -echo DCAE PARTICIPANT IP IS ${DCAE_PARTICIPANT_IP} +echo K8S PARTICIPANT IP IS ${K8S_PARTICIPANT_IP} +echo HTTP PARTICIPANT IP IS ${HTTP_PARTICIPANT_IP} # wait for the app to start up -${SCRIPTS}/wait_for_port.sh ${POLICY_CONTROLLOOP_RUNTIME_IP} 6970 +${SCRIPTS}/wait_for_port.sh ${POLICY_CONTROLLOOP_RUNTIME_IP} 6969 ${SCRIPTS}/wait_for_port.sh ${POLICY_API_IP} 6969 ROBOT_VARIABLES="" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_CONTROLLOOP_RUNTIME_IP:${POLICY_CONTROLLOOP_RUNTIME_IP}" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_PARTICIPANT_IP:${POLICY_PARTICIPANT_IP}" -ROBOT_VARIABLES="${ROBOT_VARIABLES} -v DCAE_PARTICIPANT_IP:${DCAE_PARTICIPANT_IP}" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v K8S_PARTICIPANT_IP:${K8S_PARTICIPANT_IP}" +ROBOT_VARIABLES="${ROBOT_VARIABLES} -v HTTP_PARTICIPANT_IP:${HTTP_PARTICIPANT_IP}" ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_API_IP:${POLICY_API_IP}" diff --git a/csit/clamp/tests/data/InstantiateCL.json b/csit/clamp/tests/data/InstantiateCL.json index d7402031..46cab320 100644 --- a/csit/clamp/tests/data/InstantiateCL.json +++ b/csit/clamp/tests/data/InstantiateCL.json @@ -11,32 +11,32 @@ "orderedState": "UNINITIALISED", "description": "PMSH control loop instance 0", "elements": { - "709c62b3-8918-41b9-a747-d21eb79c6c20": { - "id": "709c62b3-8918-41b9-a747-d21eb79c6c20", - "definition": { - "name": "org.onap.domain.pmsh.PMSH_DCAEMicroservice", - "version": "1.2.3" - }, - "participantType": { - "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant", - "version": "2.3.4" - }, - "state": "UNINITIALISED", - "orderedState": "UNINITIALISED", - "description": "DCAE Control Loop Element for the PMSH instance 0 control loop" - }, "709c62b3-8918-41b9-a747-d21eb79c6c21": { "id": "709c62b3-8918-41b9-a747-d21eb79c6c21", "definition": { "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", "version": "1.2.3" }, - "participantType": { - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", - "version": "2.3.1" + "participantType":{ + "name":"org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version":"2.3.1" + }, + "participantId":{ + "name":"org.onap.PM_Policy", + "version":"1.0.0" }, - "state": "UNINITIALISED", - "orderedState": "UNINITIALISED", + "state":"UNINITIALISED", + "orderedState":"UNINITIALISED", + "propertiesMap": { + "provider_instance": { + "name": "provider_instance", + "version": "1.2.3", + "type": "org.onap.datatypes.policy.clamp.controlloop.policControlLoopElement.Chart", + "typeVersion": "1.0.0", + "description": "The helm chart for the microservice", + "required": true + } + }, "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop" }, "709c62b3-8918-41b9-a747-d21eb79c6c22": { @@ -45,13 +45,27 @@ "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", "version": "1.2.3" }, - "participantType": { - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", - "version": "2.3.1" + "participantType":{ + "name":"org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version":"2.3.1" + }, + "participantId":{ + "name":"org.onap.PM_Policy", + "version":"1.0.0" }, - "state": "UNINITIALISED", - "orderedState": "UNINITIALISED", - "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop" + "state":"UNINITIALISED", + "orderedState":"UNINITIALISED", + "propertiesMap": { + "provider_instance": { + "name": "provider_instance", + "version": "1.2.3", + "type": "org.onap.datatypes.policy.clamp.controlloop.policControlLoopElement.Chart", + "typeVersion": "1.0.0", + "description": "The helm chart for the microservice", + "required": true + } + }, + "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop" } } } diff --git a/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml b/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml index b0b35158..2a68d18c 100644 --- a/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml +++ b/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml @@ -1,4 +1,4 @@ -tosca_definitions_version: tosca_simple_yaml_1_3 +tosca_definitions_version: tosca_simple_yaml_1_1_0 data_types: onap.datatypes.ToscaConceptIdentifier: derived_from: tosca.datatypes.Root @@ -9,6 +9,377 @@ data_types: version: type: string required: true + onap.datatype.controlloop.Target: + derived_from: tosca.datatypes.Root + description: Definition for a entity in A&AI to perform a control loop operation on + properties: + targetType: + type: string + description: Category for the target type + required: true + constraints: + - valid_values: + - VNF + - VM + - VFMODULE + - PNF + entityIds: + type: map + description: | + Map of values that identify the resource. If none are provided, it is assumed that the + entity that generated the ONSET event will be the target. + required: false + metadata: + clamp_possible_values: ClampExecution:CSAR_RESOURCES + entry_schema: + type: string + onap.datatype.controlloop.Actor: + derived_from: tosca.datatypes.Root + description: An actor/operation/target definition + properties: + actor: + type: string + description: The actor performing the operation. + required: true + metadata: + clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor + operation: + type: string + description: The operation the actor is performing. + metadata: + clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation + required: true + target: + type: onap.datatype.controlloop.Target + description: The resource the operation should be performed on. + required: true + payload: + type: map + description: Name/value pairs of payload information passed by Policy to the actor + required: false + metadata: + clamp_possible_values: ClampExecution:CDS/payload + entry_schema: + type: string + onap.datatype.controlloop.Operation: + derived_from: tosca.datatypes.Root + description: An operation supported by an actor + properties: + id: + type: string + description: Unique identifier for the operation + required: true + description: + type: string + description: A user-friendly description of the intent for the operation + required: false + operation: + type: onap.datatype.controlloop.Actor + description: The definition of the operation to be performed. + required: true + timeout: + type: integer + description: The amount of time for the actor to perform the operation. + required: true + retries: + type: integer + description: The number of retries the actor should attempt to perform the operation. + required: true + default: 0 + success: + type: string + description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation. + required: false + default: final_success + failure: + type: string + description: Points to the operation to invoke on Actor operation failure. + required: false + default: final_failure + failure_timeout: + type: string + description: Points to the operation to invoke when the time out for the operation occurs. + required: false + default: final_failure_timeout + failure_retries: + type: string + description: Points to the operation to invoke when the current operation has exceeded its max retries. + required: false + default: final_failure_retries + failure_exception: + type: string + description: Points to the operation to invoke when the current operation causes an exception. + required: false + default: final_failure_exception + failure_guard: + type: string + description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement. + required: false + default: final_failure_guard + onap.datatypes.monitoring.managedObjectDNsBasic: + constraints: [] + properties: + DN: + name: DN + type: string + typeVersion: 0.0.0 + description: Managed object distinguished name + required: true + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.managedObjectDNsBasic + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.managedObjectDNsBasics: + constraints: [] + properties: + managedObjectDNsBasic: + name: managedObjectDNsBasic + type: map + typeVersion: 0.0.0 + description: Managed object distinguished name object + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.managedObjectDNsBasic + typeVersion: 0.0.0 + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.managedObjectDNsBasics + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.measurementGroup: + constraints: [] + properties: + measurementTypes: + name: measurementTypes + type: list + typeVersion: 0.0.0 + description: List of measurement types + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.measurementTypes + typeVersion: 0.0.0 + constraints: [] + metadata: {} + managedObjectDNsBasic: + name: managedObjectDNsBasic + type: list + typeVersion: 0.0.0 + description: List of managed object distinguished names + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.managedObjectDNsBasics + typeVersion: 0.0.0 + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.measurementGroup + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.measurementGroups: + constraints: [] + properties: + measurementGroup: + name: measurementGroup + type: map + typeVersion: 0.0.0 + description: Measurement Group + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.measurementGroup + typeVersion: 0.0.0 + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.measurementGroups + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.measurementType: + constraints: [] + properties: + measurementType: + name: measurementType + type: string + typeVersion: 0.0.0 + description: Measurement type + required: true + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.measurementType + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.measurementTypes: + constraints: [] + properties: + measurementType: + name: measurementType + type: map + typeVersion: 0.0.0 + description: Measurement type object + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.measurementType + typeVersion: 0.0.0 + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.measurementTypes + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.nfFilter: + constraints: [] + properties: + modelNames: + name: modelNames + type: list + typeVersion: 0.0.0 + description: List of model names + required: true + constraints: [] + entry_schema: + type: string + typeVersion: 0.0.0 + constraints: [] + metadata: {} + modelInvariantIDs: + name: modelInvariantIDs + type: list + typeVersion: 0.0.0 + description: List of model invariant IDs + required: true + constraints: [] + entry_schema: + type: string + typeVersion: 0.0.0 + constraints: [] + metadata: {} + modelVersionIDs: + name: modelVersionIDs + type: list + typeVersion: 0.0.0 + description: List of model version IDs + required: true + constraints: [] + entry_schema: + type: string + typeVersion: 0.0.0 + constraints: [] + metadata: {} + nfNames: + name: nfNames + type: list + typeVersion: 0.0.0 + description: List of network functions + required: true + constraints: [] + entry_schema: + type: string + typeVersion: 0.0.0 + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.nfFilter + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} + onap.datatypes.monitoring.subscription: + constraints: [] + properties: + measurementGroups: + name: measurementGroups + type: list + typeVersion: 0.0.0 + description: Measurement Groups + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.measurementGroups + typeVersion: 0.0.0 + constraints: [] + metadata: {} + fileBasedGP: + name: fileBasedGP + type: integer + typeVersion: 0.0.0 + description: File based granularity period + required: true + constraints: [] + metadata: {} + fileLocation: + name: fileLocation + type: string + typeVersion: 0.0.0 + description: ROP file location + required: true + constraints: [] + metadata: {} + subscriptionName: + name: subscriptionName + type: string + typeVersion: 0.0.0 + description: Name of the subscription + required: true + constraints: [] + metadata: {} + administrativeState: + name: administrativeState + type: string + typeVersion: 0.0.0 + description: State of the subscription + required: true + constraints: + - valid_values: + - LOCKED + - UNLOCKED + metadata: {} + nfFilter: + name: nfFilter + type: map + typeVersion: 0.0.0 + description: Network function filter + required: true + constraints: [] + entry_schema: + type: onap.datatypes.monitoring.nfFilter + typeVersion: 0.0.0 + constraints: [] + metadata: {} + name: onap.datatypes.monitoring.subscription + version: 0.0.0 + derived_from: tosca.datatypes.Root + metadata: {} +policy_types: + onap.policies.Monitoring: + derived_from: tosca.policies.Root + description: a base policy type for all policies that govern monitoring provisioning + version: 1.0.0 + name: onap.policies.Monitoring + onap.policies.TestPolicy: + derived_from: tosca.policies.Root + description: a base policy type for all policies that govern monitoring provisioning + version: 1.0.0 + name: onap.policies.TestPolicy + onap.policies.monitoring.dcae-pm-subscription-handler: + properties: + pmsh_policy: + name: pmsh_policy + type: onap.datatypes.monitoring.subscription + typeVersion: 0.0.0 + description: PMSH Policy JSON + required: false + constraints: [] + metadata: {} + name: onap.policies.monitoring.dcae-pm-subscription-handler + version: 1.0.0 + derived_from: onap.policies.Monitoring + metadata: {} node_types: org.onap.policy.clamp.controlloop.Participant: version: 1.0.1 @@ -23,36 +394,126 @@ node_types: properties: provider: type: string - requred: false - participant_id: + required: false + metadata: + common: true + description: Specifies the organization that provides the control loop element + participantType: type: onap.datatypes.ToscaConceptIdentifier - requred: true + required: true + metadata: + common: true + description: The identity of the participant type that hosts this type of Control Loop Element + startPhase: + type: integer + required: false + constraints: + - greater_or_equal: 0 + metadata: + common: true + description: A value indicating the start phase in which this control loop element will be started, the + first start phase is zero. Control Loop Elements are started in their start_phase order and stopped + in reverse start phase order. Control Loop Elements with the same start phase are started and + stopped simultaneously + uninitializedToPassiveTimeout: + type: integer + required: false + constraints: + - greater_or_equal: 0 + default: 60 + metadata: + common: true + description: The maximum time in seconds to wait for a state chage from uninitialized to passive + passiveToRunningTimeout: + type: integer + required: false + constraints: + - greater_or_equal: 0 + default: 60 + metadata: + common: true + description: The maximum time in seconds to wait for a state chage from passive to running + runningToPassiveTimeout: + type: integer + required: false + constraints: + - greater_or_equal: 0 + default: 60 + metadata: + common: true + description: The maximum time in seconds to wait for a state chage from running to passive + passiveToUninitializedTimeout: + type: integer + required: false + constraints: + - greater_or_equal: 0 + default: 60 + metadata: + common: true + description: The maximum time in seconds to wait for a state chage from passive to uninitialized org.onap.policy.clamp.controlloop.ControlLoop: version: 1.0.1 derived_from: tosca.nodetypes.Root properties: provider: type: string - requred: false + required: false + metadata: + common: true + description: Specifies the organization that provides the control loop element elements: type: list required: true + metadata: + common: true entry_schema: type: onap.datatypes.ToscaConceptIdentifier + description: Specifies a list of control loop element definitions that make up this control loop definition org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement: version: 1.0.1 derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement properties: dcae_blueprint_id: type: onap.datatypes.ToscaConceptIdentifier - requred: true - org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement: + requred: false + dcae_blueprint: + type: onap.dcae.cloudify_blueprint + requred: false + consul_info: + type: list + required: false + entry_schema: + type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo + org.onap.policy.clamp.controlloop.PolicyControlLoopElement: version: 1.0.1 derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement properties: policy_type_id: type: onap.datatypes.ToscaConceptIdentifier requred: true + policy_id: + type: onap.datatypes.ToscaConceptIdentifier + requred: false + org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement: + version: 1.0.1 + derived_from: org.onap.policy.clamp.controlloop.PolicyControlLoopElement + properties: + policy_type_id: + type: onap.datatypes.ToscaConceptIdentifier + requred: true + policy_id: + type: onap.datatypes.ToscaConceptIdentifier + requred: false + org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement: + version: 1.0.1 + derived_from: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement + properties: + policy_type_id: + type: onap.datatypes.ToscaConceptIdentifier + requred: true + policy_id: + type: onap.datatypes.ToscaConceptIdentifier + requred: false org.onap.policy.clamp.controlloop.CDSControlLoopElement: version: 1.0.1 derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement @@ -61,83 +522,60 @@ node_types: type: onap.datatypes.ToscaConceptIdentifier requred: true topology_template: + inputs: + pmsh_monitoring_policy: + type: onap.datatypes.ToscaConceptIdentifier + description: The ID of the PMSH monitoring policy to use + default: + name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test + version: 1.0.0 + pmsh_operational_policy: + type: onap.datatypes.ToscaConceptIdentifier + description: The ID of the PMSH operational policy to use + default: + name: operational.apex.pmcontrol + version: 1.0.0 node_templates: - org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant: - version: 2.3.4 - type: org.onap.policy.clamp.controlloop.Participant - type_version: 1.0.1 - description: Participant for DCAE microservices - properties: - provider: ONAP org.onap.policy.controlloop.PolicyControlLoopParticipant: - version: 2.2.1 - type: org.onap.policy.clamp.controlloop.Participant - type_version: 1.0.1 - description: Participant for DCAE microservices - properties: - provider: ONAP - org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant: - version: 2.2.1 + version: 2.3.1 type: org.onap.policy.clamp.controlloop.Participant type_version: 1.0.1 description: Participant for DCAE microservices properties: provider: ONAP - org.onap.domain.pmsh.PMSH_DCAEMicroservice: - version: 1.2.3 - type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement - type_version: 1.0.0 - description: Control loop element for the DCAE microservice for Performance Management Subscription Handling - properties: - provider: Ericsson - participant_id: - name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant - version: 2.3.4 - dcae_blueprint_id: - name: org.onap.dcae.blueprints.PMSHBlueprint - version: 1.0.0 org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement: version: 1.2.3 - type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement + type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement type_version: 1.0.0 description: Control loop element for the monitoring policy for Performance Management Subscription Handling properties: provider: Ericsson - participant_id: + participantType: name: org.onap.policy.controlloop.PolicyControlLoopParticipant - version: 2.2.1 + version: 2.3.1 policy_type_id: name: onap.policies.monitoring.pm-subscription-handler version: 1.0.0 + policy_id: + get_input: pmsh_monitoring_policy org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement: version: 1.2.3 - type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement + type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement type_version: 1.0.0 description: Control loop element for the operational policy for Performance Management Subscription Handling properties: provider: Ericsson - participant_id: + participantType: name: org.onap.policy.controlloop.PolicyControlLoopParticipant - version: 2.2.1 + version: 2.3.1 policy_type_id: name: onap.policies.operational.pm-subscription-handler version: 1.0.0 - org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement: + policy_id: + get_input: pmsh_operational_policy + org.onap.domain.pmsh.DerivedPolicyControlLoopElement: version: 1.2.3 - type: org.onap.policy.clamp.controlloop.ControlLoopElement - type_version: 1.0.0 - description: Control loop element for CDS for Performance Management Subscription Handling - properties: - provider: Ericsson - participant_Id: - name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant - version: 3.2.1 - cds_blueprint_id: - name: org.onap.ccsdk.cds.PMSHCdsBlueprint - version: 1.0.0 - org.onap.domain.pmsh.PMSHControlLoopDefinition: - version: 1.2.3 - type: org.onap.policy.clamp.controlloop.ControlLoop + type: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement type_version: 1.0.0 description: Control loop for Performance Management Subscription Handling properties: @@ -149,61 +587,17 @@ topology_template: version: 1.2.3 - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement version: 1.2.3 - - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement - version: 1.2.3 - org.onap.domain.pmsh.PMSD_DCAEMicroservice: - version: 1.2.3 - type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement - type_version: 1.0.0 - description: Control loop element for the DCAE microservice for Performance Management Subscription Handling - properties: - provider: Ericsson - participant_id: - name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant - version: 2.3.4 - dcae_blueprint_id: - name: org.onap.dcae.blueprints.PMSDBlueprint - version: 1.0.0 - org.onap.domain.pmsh.PMSD_MonitoringPolicyControlLoopElement: - version: 1.2.3 - type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement - type_version: 1.0.0 - description: Control loop element for the monitoring policy for Performance Management Subscription Handling - properties: - provider: Ericsson - participant_id: - name: org.onap.policy.controlloop.PolicyControlLoopParticipant - version: 2.2.1 - policy_type_id: - name: onap.policies.monitoring.pm-subscription-handler - version: 1.0.0 - org.onap.domain.pmsh.PMSD_OperationalPolicyControlLoopElement: - version: 1.2.3 - type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement - type_version: 1.0.0 - description: Control loop element for the operational policy for Performance Management Subscription Handling - properties: - provider: Ericsson - participant_id: - name: org.onap.policy.controlloop.PolicyControlLoopParticipant - version: 2.2.1 - policy_type_id: - name: onap.policies.operational.pm-subscription-handler - version: 1.0.0 - org.onap.domain.pmsh.PMSD_CDS_ControlLoopElement: + org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement: version: 1.2.3 - type: org.onap.policy.clamp.controlloop.ControlLoopElement + type: org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement type_version: 1.0.0 - description: Control loop element for CDS for Performance Management Subscription Handling + description: Control loop for Performance Management Subscription Handling properties: - provider: Ericsson - participant_Id: - name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant - version: 3.2.1 - cds_blueprint_id: - name: org.onap.ccsdk.cds.PMSDCdsBlueprint - version: 1.0.0 - org.onap.domain.pmsh.PMSDControlLoopDefinition: + provider: Ericsson Software Technologies + elements: + - name: org.onap.domain.pmsh.PMSH_DerivedTestMicroservice + version: 1.2.3 + org.onap.domain.pmsh.PMSHControlLoopDefinition: version: 1.2.3 type: org.onap.policy.clamp.controlloop.ControlLoop type_version: 1.0.0 @@ -211,32 +605,67 @@ topology_template: properties: provider: Ericsson elements: - - name: org.onap.domain.pmsh.PMSD_DCAEMicroservice - version: 1.2.3 - - name: org.onap.domain.pmsh.PMSD_MonitoringPolicyControlLoopElement + - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice version: 1.2.3 - - name: org.onap.domain.pmsh.PMSD_OperationalPolicyControlLoopElement + - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement version: 1.2.3 - - name: org.onap.domain.pmsh.PMSD_CDS_ControlLoopElement + - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement version: 1.2.3 -policies: - - TestCheckPolicy: - type: onap.policies.DemoCheckPolicyType - type_version: 1.0.0 - name: TestCheckPolicy - version: 1.0.0 - metadata: - policy-id: TestCheckPolicy - policy-version: 1.0.0 - properties: - pmsh_policy: - fileBasedGP: 15 - fileLocation: /pm/pm.xml - subscriptionName: subscriptiona - administrativeState: UNLOCKED -policy_types: - onap.policies.DemoCheckPolicyType: - derived_from: tosca.policies.Root - description: a base policy type for all policies that govern monitoring provisioning - version: 1.0.0 - name: onap.policies.DemoCheckPolicyType + policies: + - MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test: + type: onap.policies.monitoring.dcae-pm-subscription-handler + type_version: 1.0.0 + name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test + version: 1.0.0 + metadata: + policy-id: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test + policy-version: 1.0.0 + properties: + pmsh_policy: + fileBasedGP: 15 + fileLocation: /pm/pm.xml + subscriptionName: subscriptiona + administrativeState: UNLOCKED + nfFilter: + onap.datatypes.monitoring.nfFilter: + modelVersionIDs: + - e80a6ae3-cafd-4d24-850d-e14c084a5ca9 + modelInvariantIDs: + - 5845y423-g654-6fju-po78-8n53154532k6 + - 7129e420-d396-4efb-af02-6b83499b12f8 + modelNames: [] + nfNames: + - '"^pnf1.*"' + measurementGroups: + - measurementGroup: + onap.datatypes.monitoring.measurementGroup: + measurementTypes: + - measurementType: + onap.datatypes.monitoring.measurementType: + measurementType: countera + - measurementType: + onap.datatypes.monitoring.measurementType: + measurementType: counterb + managedObjectDNsBasic: + - managedObjectDNsBasic: + onap.datatypes.monitoring.managedObjectDNsBasic: + DN: dna + - managedObjectDNsBasic: + onap.datatypes.monitoring.managedObjectDNsBasic: + DN: dnb + - measurementGroup: + onap.datatypes.monitoring.measurementGroup: + measurementTypes: + - measurementType: + onap.datatypes.monitoring.measurementType: + measurementType: counterc + - measurementType: + onap.datatypes.monitoring.measurementType: + measurementType: counterd + managedObjectDNsBasic: + - managedObjectDNsBasic: + onap.datatypes.monitoring.managedObjectDNsBasic: + DN: dnc + - managedObjectDNsBasic: + onap.datatypes.monitoring.managedObjectDNsBasic: + DN: dnd diff --git a/csit/config/clamp/ClRuntimeParameters.json b/csit/config/clamp/ClRuntimeParameters.json deleted file mode 100644 index f73899fb..00000000 --- a/csit/config/clamp/ClRuntimeParameters.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "ControlLoopRuntimeGroup", - "restServerParameters": { - "host": "0.0.0.0", - "port": 6970, - "userName": "healthcheck", - "password": "zb!XztG34", - "https": false, - "aaf": false - }, - "participantParameters": { - "heartBeatMs": 120000, - "updateParameters": { - "maxRetryCount": 1, - "maxWaitMs": 30000 - }, - "stateChangeParameters": { - "maxRetryCount": 1, - "maxWaitMs": 30000 - } - }, - "databaseProviderParameters": { - "name": "PolicyProviderParameterGroup", - "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", - "databaseDriver": "org.mariadb.jdbc.Driver", - "databaseUrl": "jdbc:mariadb://mariadb:3306/controlloop", - "databaseUser": "policy_user", - "databasePassword": "policy_user", - "persistenceUnit": "CommissioningMariaDb" - }, - "topicParameterGroup": { - "topicSources": [ - { - "topic": "POLICY-CLRUNTIME-PARTICIPANT", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true, - "fetchTimeout": 15000 - } - ], - "topicSinks": [ - { - "topic": "POLICY-CLRUNTIME-PARTICIPANT", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - }, - { - "topic": "POLICY-NOTIFICATION", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - } - ] - } -} diff --git a/csit/config/clamp/ClRuntimeParameters.yaml b/csit/config/clamp/ClRuntimeParameters.yaml new file mode 100644 index 00000000..d399b82b --- /dev/null +++ b/csit/config/clamp/ClRuntimeParameters.yaml @@ -0,0 +1,60 @@ +spring: + security: + user: + name: healthcheck + password: zb!XztG34 + http: + converters: + preferred-json-mapper: gson + +security: + enable-csrf: false + +server: + port: 6969 + servlet: + context-path: /onap/controlloop + error: + path: /error + + +runtime: + supervisionScannerIntervalSec: 1000 + participantClUpdateIntervalSec: 1000 + participantClStateChangeIntervalSec: 1000 + participantParameters: + heartBeatMs: 20000 + maxStatusWaitMs: 100000 + updateParameters: + maxRetryCount: 3 + maxWaitMs: 20000 + databaseProviderParameters: + name: PolicyProviderParameterGroup + implementation: org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl + databaseDriver: org.mariadb.jdbc.Driver + databaseUrl: jdbc:mariadb://${mariadb.host:mariadb}:${mariadb.port:3306}/controlloop + databaseUser: policy_user + databasePassword: policy_user + persistenceUnit: CommissioningMariaDb + topicParameterGroup: + topicSources: + - + topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + fetchTimeout: 15000 + useHttps: true + topicSinks: + - + topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + useHttps: true + +management: + endpoints: + web: + exposure: + include: health, metrics, prometheus diff --git a/csit/config/clamp/DcaeParticipantParameters.json b/csit/config/clamp/DcaeParticipantParameters.json deleted file mode 100644 index e0f1ba9a..00000000 --- a/csit/config/clamp/DcaeParticipantParameters.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "ControlLoopParticipantDcae", - "clampClientParameters": { - "clientName": "Clamp", - "hostname": "0.0.0.0", - "port": 8443, - "userName": "admin", - "password": "password", - "useHttps": true - }, - "consulClientParameters": { - "clientName": "Consul", - "hostname": "consul", - "port": 31321, - "userName": "admin", - "password": "password", - "useHttps": false - }, - "intermediaryParameters": { - "name": "Participant parameters", - "reportingTimeInterval": 120000, - "description": "Participant Description", - "participantId": { - "name": "DCAEParticipant0", - "version": "1.0.0" - }, - "participantType": { - "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant", - "version": "2.3.4" - }, - "clampControlLoopTopics": { - "topicSources": [ - { - "topic": "POLICY-CLRUNTIME-PARTICIPANT", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - } - ], - "topicSinks": [ - { - "topic": "POLICY-CLRUNTIME-PARTICIPANT", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - }, - { - "topic": "POLICY-NOTIFICATION", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - } - ] - } - }, - "databaseProviderParameters": { - "name": "PolicyProviderParameterGroup", - "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl", - "databaseDriver": "org.mariadb.jdbc.Driver", - "databaseUrl": "jdbc:mariadb://mariadb:3306/policyadmin", - "databaseUser": "policy_user", - "databasePassword": "policy_user", - "persistenceUnit": "PolicyMariaDb" - } -} diff --git a/csit/config/clamp/HttpParticipantParameters.yaml b/csit/config/clamp/HttpParticipantParameters.yaml new file mode 100644 index 00000000..be421fca --- /dev/null +++ b/csit/config/clamp/HttpParticipantParameters.yaml @@ -0,0 +1,24 @@ +participant: + intermediaryParameters: + reportingTimeIntervalMs: 120000 + description: Participant Description + participantId: + name: HttpParticipant0 + version: 1.0.0 + participantType: + name: org.onap.k8s.controlloop.HttpControlLoopParticipant + version: 2.3.4 + clampControlLoopTopics: + topicSources: + - topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + fetchTimeout: 15000 + useHttps: true + topicSinks: + - topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + useHttps: true diff --git a/csit/config/clamp/KubernetesParticipantParameters.yaml b/csit/config/clamp/KubernetesParticipantParameters.yaml new file mode 100644 index 00000000..d605cfa1 --- /dev/null +++ b/csit/config/clamp/KubernetesParticipantParameters.yaml @@ -0,0 +1,58 @@ +spring: + security: + user: + name: healthcheck + password: zb!XztG34 +security: + enable-csrf: false + +participant: + localChartDirectory: /home/policy/local-charts + infoFileName: CHART_INFO.json + intermediaryParameters: + reportingTimeIntervalMs: 120000 + description: Participant Description + participantId: + name: K8sParticipant0 + version: 1.0.0 + participantType: + name: org.onap.k8s.controlloop.K8SControlLoopParticipant + version: 2.3.4 + clampControlLoopTopics: + topicSources: + - + topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + fetchTimeout: 15000 + useHttps: true + topicSinks: + - + topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + useHttps: true + +management: + endpoints: + web: + exposure: + include: "loggers,logfile,health,info,metrics,threaddump,heapdump" +server: + # Configuration of the HTTP/REST server. The parameters are defined and handled by the springboot framework. + # See springboot documentation. + port: 8083 + servlet: + context-path: /onap/k8sparticipant + +logging: + # Configuration of logging + level: + ROOT: INFO + org.springframework: ERROR + org.springframework.data: ERROR + org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR + file: + name: /var/log/onap/policy/clamp/application.log diff --git a/csit/config/clamp/PolicyParticipantParameters.json b/csit/config/clamp/PolicyParticipantParameters.json deleted file mode 100644 index 242df20d..00000000 --- a/csit/config/clamp/PolicyParticipantParameters.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "ControlLoopParticipantGroup", - "intermediaryParameters": { - "name": "Participant parameters", - "reportingTimeInterval": 120000, - "description": "Participant Description", - "participantType":{ - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", - "version":"2.2.1" - }, - "participantId": { - "name": "org.onap.PM_Policy", - "version": "1.0.0" - }, - "clampControlLoopTopics": { - "topicSources": [ - { - "topic": "POLICY-CLRUNTIME-PARTICIPANT", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true, - "fetchTimeout": 15000 - } - ], - "topicSinks": [ - { - "topic": "POLICY-CLRUNTIME-PARTICIPANT", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - }, - { - "topic": "POLICY-NOTIFICATION", - "servers" : [ "message-router" ], - "topicCommInfrastructure" : "dmaap", - "useHttps" : true - } - ] - } - }, - "policyApiParameters": { - "clientName": "api", - "hostname": "policy-api", - "port": "6969", - "userName": "healthcheck", - "password": "zb!XztG34", - "https": true - } -} diff --git a/csit/config/clamp/PolicyParticipantParameters.yaml b/csit/config/clamp/PolicyParticipantParameters.yaml new file mode 100644 index 00000000..bd9a6260 --- /dev/null +++ b/csit/config/clamp/PolicyParticipantParameters.yaml @@ -0,0 +1,45 @@ + +participant: + pdpGroup: defaultGroup + pdpType: apex + policyApiParameters: + clientName: api + hostname: policy-api + port: 6969 + userName: healthcheck + password: zb!XztG34 + https: true + allowSelfSignedCerts: true + policyPapParameters: + clientName: pap + hostname: policy-pap + port: 6969 + userName: healthcheck + password: zb!XztG34 + https: true + allowSelfSignedCerts: true + intermediaryParameters: + reportingTimeIntervalMs: 120000 + description: Participant Description + participantId: + name: org.onap.PM_Policy + version: 1.0.0 + participantType: + name: org.onap.policy.controlloop.PolicyControlLoopParticipant + version: 2.3.1 + clampControlLoopTopics: + topicSources: + - + topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + fetchTimeout: 15000 + useHttps: true + topicSinks: + - + topic: POLICY-CLRUNTIME-PARTICIPANT + servers: + - ${topicServer:message-router} + topicCommInfrastructure: dmaap + useHttps: true diff --git a/csit/config/db/db.sh b/csit/config/db/db.sh index 1afaebc7..7cc94fdb 100755 --- a/csit/config/db/db.sh +++ b/csit/config/db/db.sh @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -for db in migration pooling policyadmin operationshistory +for db in migration pooling policyadmin operationshistory controlloop do mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "CREATE DATABASE IF NOT EXISTS ${db};" mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "GRANT ALL PRIVILEGES ON \`${db}\`.* TO '${MYSQL_USER}'@'%' ;" diff --git a/csit/docker-compose-all.yml b/csit/docker-compose-all.yml index c2b3af3f..eeea35b1 100644 --- a/csit/docker-compose-all.yml +++ b/csit/docker-compose-all.yml @@ -236,56 +236,74 @@ services: 'pap', '6969', 'apex-pdp', '6969' ] - policy-controlloop-runtime: - image: onap/policy-controlloop-runtime:latest - container_name: policy-controlloop-runtime + policy-clamp-cl-runtime: + image: onap/policy-clamp-cl-runtime:latest + container_name: policy-clamp-cl-runtime depends_on: - mariadb - simulator - - policy-participant - - dcae-participant - hostname: policy-controlloop-runtime + - policy-clamp-cl-http-ppnt + - policy-clamp-cl-k8s-ppnt + - policy-clamp-cl-pf-ppnt + hostname: policy-clamp-cl-runtime expose: - - 6970 + - 6969 volumes: - - ./config/clamp/ClRuntimeParameters.json:/opt/app/policy/clamp/etc/ClRuntimeParameters.json:ro - - ./config/policy-truststore:/opt/app/policy/api/etc/ssl/policy-truststore:ro + - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './controlloop-runtime.sh', 'message-router', '3905' ] - dcae-participant: - image: onap/dcae-participant:latest - container_name: dcae-participant + policy-clamp-cl-http-ppnt: + image: onap/policy-clamp-cl-http-ppnt:latest + container_name: policy-clamp-cl-http-ppnt depends_on: - simulator - hostname: dcae-participant + hostname: policy-clamp-cl-http-ppnt expose: - 6971 volumes: - - ./config/clamp/DcaeParticipantParameters.json:/opt/app/policy/clamp/etc/DcaeParticipantParameters.json:ro - - ./config/policy-truststore:/opt/app/policy/api/etc/ssl/policy-truststore:ro + - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ - '-c', './dcae-participant.sh', + '-c', './http-participant.sh', 'message-router', '3905' ] - policy-participant: - image: onap/policy-participant:latest - container_name: policy-participant + policy-clamp-cl-k8s-ppnt: + image: onap/policy-clamp-cl-k8s-ppnt:latest + container_name: policy-clamp-cl-k8s-ppnt depends_on: - simulator - - api - hostname: policy-participant + hostname: policy-clamp-cl-k8s-ppnt expose: - 6972 volumes: - - ./config/clamp/PolicyParticipantParameters.json:/opt/app/policy/clamp/etc/PolicyParticipantParameters.json:ro - - ./config/policy-truststore:/opt/app/policy/api/etc/ssl/policy-truststore:ro + - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro + - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro + entrypoint: /opt/app/policy/bin/wait_for_port.sh + command: [ + '-c', './kubernetes-participant.sh', + 'message-router', '3905' + ] + policy-clamp-cl-pf-ppnt: + image: onap/policy-clamp-cl-pf-ppnt:latest + container_name: policy-clamp-cl-pf-ppnt + depends_on: + - simulator + - api + hostname: policy-clamp-cl-pf-ppnt + expose: + - 6973 + volumes: + - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro + - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './policy-participant.sh', -- cgit 1.2.3-korg