diff options
Diffstat (limited to 'feature-lifecycle/src/main')
18 files changed, 354 insertions, 940 deletions
diff --git a/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties b/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties index 1bb32169..076da1f9 100644 --- a/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties +++ b/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties @@ -21,14 +21,14 @@ lifecycle.pdp.group=${envd:POLICY_PDP_PAP_GROUP:defaultGroup} dmaap.source.topics=POLICY-PDP-PAP dmaap.sink.topics=POLICY-PDP-PAP -dmaap.source.topics.POLICY-PDP-PAP.servers=${env:DMAAP_SERVERS} -dmaap.source.topics.POLICY-PDP-PAP.effectiveTopic=${env:POLICY_PDP_PAP_TOPIC} -dmaap.source.topics.POLICY-PDP-PAP.apiKey=${env:POLICY_PDP_PAP_API_KEY} -dmaap.source.topics.POLICY-PDP-PAP.apiSecret=${env:POLICY_PDP_PAP_API_SECRET} +dmaap.source.topics.POLICY-PDP-PAP.servers=${envd:DMAAP_SERVERS} +dmaap.source.topics.POLICY-PDP-PAP.effectiveTopic=${envd:POLICY_PDP_PAP_TOPIC} +dmaap.source.topics.POLICY-PDP-PAP.apiKey=${envd:POLICY_PDP_PAP_API_KEY} +dmaap.source.topics.POLICY-PDP-PAP.apiSecret=${envd:POLICY_PDP_PAP_API_SECRET} dmaap.source.topics.POLICY-PDP-PAP.https=true -dmaap.sink.topics.POLICY-PDP-PAP.servers=${env:DMAAP_SERVERS} -dmaap.sink.topics.POLICY-PDP-PAP.effectiveTopic=${env:POLICY_PDP_PAP_TOPIC} -dmaap.sink.topics.POLICY-PDP-PAP.apiKey=${env:POLICY_PDP_PAP_API_KEY} -dmaap.sink.topics.POLICY-PDP-PAP.apiSecret=${env:POLICY_PDP_PAP_API_SECRET} +dmaap.sink.topics.POLICY-PDP-PAP.servers=${envd:DMAAP_SERVERS} +dmaap.sink.topics.POLICY-PDP-PAP.effectiveTopic=${envd:POLICY_PDP_PAP_TOPIC} +dmaap.sink.topics.POLICY-PDP-PAP.apiKey=${envd:POLICY_PDP_PAP_API_KEY} +dmaap.sink.topics.POLICY-PDP-PAP.apiSecret=${envd:POLICY_PDP_PAP_API_SECRET} dmaap.sink.topics.POLICY-PDP-PAP.https=true diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java deleted file mode 100644 index d7956b41..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.controller; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Builder; -import lombok.Data; - - -@Data -@Builder -public class ControllerCustomSerializer implements Serializable { - private static final long serialVersionUID = 1505345574249332514L; - - @SerializedName("customSerializerClass") - protected String customSerializerClass; - - @SerializedName("jsonParser") - protected String jsonParser; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java deleted file mode 100644 index 0d5a363e..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.controller; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Data; -import lombok.experimental.SuperBuilder; -import org.onap.policy.drools.domain.models.DroolsPolicy; - -/** - * Controller Policy model root object. - */ - -@Data -@SuperBuilder -public class ControllerPolicy extends DroolsPolicy implements Serializable { - - private static final long serialVersionUID = -8171337852833516581L; - - @SerializedName("properties") - protected ControllerProperties properties; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java deleted file mode 100644 index 692b1790..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.controller; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import java.util.List; -import java.util.Map; -import lombok.Builder; -import lombok.Data; - - -/** - * Controller Domain Policy. - */ - -@Data -@Builder -public class ControllerProperties implements Serializable { - private static final long serialVersionUID = 1259434187110418986L; - - @SerializedName("controllerName") - protected String controllerName; - - @SerializedName("sourceTopics") - protected List<ControllerSourceTopic> sourceTopics; - - @SerializedName("sinkTopics") - protected List<ControllerSinkTopic> sinkTopics; - - @SerializedName("customConfig") - protected Map<String, String> customConfig; - -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java deleted file mode 100644 index 8daaa31f..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.controller; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Builder; -import lombok.Data; - - -@Data -@Builder -public class ControllerSerialization implements Serializable { - - @SerializedName("eventClass") - public String eventClass; - - @SerializedName("eventFilter") - public String eventFilter; - - @SerializedName("customSerializer") - public ControllerCustomSerializer customSerializer; - -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java deleted file mode 100644 index ecd66a3f..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.controller; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import java.util.List; -import lombok.Builder; -import lombok.Data; - - -/** - * Sink Topic. - */ - -@Data -@Builder -public class ControllerSinkTopic implements Serializable { - private static final long serialVersionUID = 8770353732981476267L; - - @SerializedName("topicName") - protected String topicName; - - @SerializedName("serialization") - protected List<ControllerSerialization> serialization; - -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java deleted file mode 100644 index 09344016..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.controller; - -import java.io.Serializable; -import java.util.List; -import lombok.Builder; -import lombok.Data; - - -/** - * Source Topics. - */ - -@Data -@Builder -public class ControllerSourceTopic implements Serializable { - private static final long serialVersionUID = -1732598566914643612L; - - protected String topicName; - protected List<ControllerSerialization> serialization; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java deleted file mode 100644 index 0af96331..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.nativ.rules; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Builder; -import lombok.Data; - -/** - * Controller Model in Native Drools Policies. - */ - -@Data -@Builder -public class NativeDroolsController implements Serializable { - - private static final long serialVersionUID = -2070515139072136869L; - - @SerializedName("name") - protected String name; - - @SerializedName("version") - protected String version; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java deleted file mode 100644 index fce6ca1a..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.nativ.rules; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Data; -import lombok.experimental.SuperBuilder; -import org.onap.policy.drools.domain.models.DroolsPolicy; - -/** - * Native Drools Policy model root object. - */ - -@Data -@SuperBuilder -public class NativeDroolsPolicy extends DroolsPolicy implements Serializable { - - private static final long serialVersionUID = -8171337852833516581L; - - @SerializedName("properties") - protected NativeDroolsProperties properties; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java deleted file mode 100644 index dfd25ca7..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.nativ.rules; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Builder; -import lombok.Data; - -/** - * Properties in Native Drools Policies. - */ - -@Data -@Builder -public class NativeDroolsProperties implements Serializable { - private static final long serialVersionUID = 2360030332628276427L; - - @SerializedName("rulesArtifact") - protected NativeDroolsRulesArtifact rulesArtifact; - - @SerializedName("controller") - protected NativeDroolsController controller; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java deleted file mode 100644 index 8ca33865..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.domain.models.nativ.rules; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import lombok.Builder; -import lombok.Data; - -/** - * Rules Artifact in Native Drools Policies. - */ - -@Data -@Builder -public class NativeDroolsRulesArtifact implements Serializable { - - private static final long serialVersionUID = -3519759514319217518L; - - @SerializedName("groupId") - protected String groupId; - - @SerializedName("artifactId") - protected String artifactId; - - @SerializedName("version") - protected String version; -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java index 119ae7aa..a435f02e 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java @@ -132,10 +132,10 @@ public class LifecycleFsm implements Startable { this.policyTypesMap.put( POLICY_TYPE_DROOLS_CONTROLLER, - new PolicyTypeNativeController(this, POLICY_TYPE_DROOLS_CONTROLLER)); + new PolicyTypeNativeDroolsController(this, POLICY_TYPE_DROOLS_CONTROLLER)); this.policyTypesMap.put( POLICY_TYPE_DROOLS_NATIVE_RULES, - new PolicyTypeRulesController(this, POLICY_TYPE_DROOLS_NATIVE_RULES)); + new PolicyTypeNativeArtifactController(this, POLICY_TYPE_DROOLS_NATIVE_RULES)); } @JsonIgnore diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java index f5ceafbe..36c52e2b 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java @@ -20,23 +20,45 @@ package org.onap.policy.drools.lifecycle; +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; import lombok.Getter; - +import org.apache.commons.lang3.StringUtils; +import org.onap.policy.common.gson.annotation.GsonJsonIgnore; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.drools.domain.models.legacy.LegacyPolicy; +import org.onap.policy.drools.domain.models.operational.OperationalPolicy; import org.onap.policy.drools.system.PolicyController; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Policy Type Drools Controller that delegates to a corresponding * PolicyController that supports this policy type. */ -@Getter public class PolicyTypeDroolsController implements PolicyTypeController { + protected static final ToscaPolicyTypeIdentifier legacyType = + new ToscaPolicyTypeIdentifier("onap.policies.controlloop.Operational", "1.0.0"); + + protected static final ToscaPolicyTypeIdentifier compliantType = + new ToscaPolicyTypeIdentifier("onap.policies.controlloop.operational.common.Drools", "1.0.0"); + + private static final Logger logger = LoggerFactory.getLogger(PolicyTypeController.class); - protected final PolicyController controller; + protected final Map<String, PolicyController> controllers = new ConcurrentHashMap<>(); + + @Getter protected final ToscaPolicyTypeIdentifier policyType; - protected final LifecycleFsm fsm; + + @GsonJsonIgnore + @JsonIgnore + protected final transient LifecycleFsm fsm; /** * Creates a Policy Type Drools Controller. @@ -44,17 +66,74 @@ public class PolicyTypeDroolsController implements PolicyTypeController { public PolicyTypeDroolsController( LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType, PolicyController controller) { this.policyType = policyType; - this.controller = controller; + this.controllers.put(controller.getName(), controller); this.fsm = fsm; } @Override public boolean deploy(ToscaPolicy policy) { - return fsm.getDomainMaker().isConformant(policy) && this.controller.offer(policy); + return perform(policy, (PolicyController controller) -> controller.offer(policy)); } @Override public boolean undeploy(ToscaPolicy policy) { - return controller.getDrools().delete(policy); + return perform(policy, (PolicyController controller) -> controller.getDrools().delete(policy)); + } + + private boolean perform(ToscaPolicy policy, Function<PolicyController, Boolean> operation) { + try { + List<PolicyController> selected = selectControllers(policy); + boolean success = true; + for (PolicyController controller : selected) { + try { + success = operation.apply(controller) && success; + } catch (RuntimeException r) { + logger.warn("invalid offer to controller: {}", controller); + success = false; + } + } + return success && !selected.isEmpty(); + } catch (CoderException e) { + logger.warn("perform: invalid formatted policy: {}", policy, e); + return false; + } + } + + private List<PolicyController> selectControllers(ToscaPolicy policy) throws CoderException { + List<PolicyController> selected; + if (legacyType.equals(policyType)) { + selected = controllers( + fsm.getDomainMaker().convertTo(policy, LegacyPolicy.class) + .getProperties() + .getControllerName()); + } else if (compliantType.equals(policyType)) { + selected = controllers( + fsm.getDomainMaker().convertTo(policy, OperationalPolicy.class) + .getProperties() + .getControllerName()); + } else { + selected = List.copyOf(controllers.values()); + } + return selected; + } + + private List<PolicyController> controllers(String controllerName) { + if (StringUtils.isBlank(controllerName)) { + /* this policy applies to all controllers */ + return controllers(); + } + + if (!this.controllers.containsKey(controllerName)) { + return List.of(); + } + + return List.of(this.controllers.get(controllerName)); + } + + /** + * Get all controllers that support the policy type. + */ + public List<PolicyController> controllers() { + return List.copyOf(controllers.values()); } } diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java index 79e2ddb8..31e9059d 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java @@ -25,7 +25,7 @@ import lombok.Getter; import org.onap.policy.common.gson.annotation.GsonJsonIgnore; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.drools.controller.DroolsControllerConstants; -import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy; +import org.onap.policy.drools.domain.models.artifact.NativeArtifactPolicy; import org.onap.policy.drools.protocol.configuration.DroolsConfiguration; import org.onap.policy.drools.system.PolicyController; import org.onap.policy.drools.system.PolicyControllerConstants; @@ -34,27 +34,27 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PolicyTypeRulesController implements PolicyTypeController { - private static final Logger logger = LoggerFactory.getLogger(PolicyTypeRulesController.class); +public class PolicyTypeNativeArtifactController implements PolicyTypeController { + private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeArtifactController.class); @Getter protected final ToscaPolicyTypeIdentifier policyType; @GsonJsonIgnore @JsonIgnore - protected final LifecycleFsm fsm; + protected final transient LifecycleFsm fsm; - public PolicyTypeRulesController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) { + public PolicyTypeNativeArtifactController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) { this.policyType = policyType; this.fsm = fsm; } @Override public boolean deploy(ToscaPolicy policy) { - NativeDroolsPolicy nativePolicy; + NativeArtifactPolicy nativePolicy; PolicyController controller; try { - nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class); + nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class); controller = PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName()); } catch (CoderException e) { @@ -76,7 +76,7 @@ public class PolicyTypeRulesController implements PolicyTypeController { public boolean undeploy(ToscaPolicy policy) { PolicyController controller; try { - NativeDroolsPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class); + NativeArtifactPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class); controller = PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName()); } catch (RuntimeException | CoderException e) { diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java deleted file mode 100644 index 1b5e7c47..00000000 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.lifecycle; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.Getter; -import org.onap.policy.common.gson.annotation.GsonJsonIgnore; -import org.onap.policy.common.utils.coder.CoderException; -import org.onap.policy.drools.domain.models.controller.ControllerPolicy; -import org.onap.policy.drools.system.PolicyControllerConstants; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PolicyTypeNativeController implements PolicyTypeController { - private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeController.class); - - @Getter - protected final ToscaPolicyTypeIdentifier policyType; - - @GsonJsonIgnore - @JsonIgnore - protected final LifecycleFsm fsm; - - public PolicyTypeNativeController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) { - this.policyType = policyType; - this.fsm = fsm; - } - - @Override - public boolean deploy(ToscaPolicy policy) { - // TODO - return fsm.getDomainMaker().isConformant(policy); - } - - @Override - public boolean undeploy(ToscaPolicy policy) { - try { - ControllerPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class); - PolicyControllerConstants.getFactory().destroy(nativePolicy.getProperties().getControllerName()); - return true; - } catch (RuntimeException | CoderException e) { - logger.warn("failed undeploy of policy: {}", policy); - return false; - } - } -} diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java new file mode 100644 index 00000000..b0118fbe --- /dev/null +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java @@ -0,0 +1,250 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools.lifecycle; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; +import lombok.Getter; +import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager; +import org.onap.policy.common.endpoints.event.comm.TopicSink; +import org.onap.policy.common.endpoints.event.comm.TopicSource; +import org.onap.policy.common.gson.annotation.GsonJsonIgnore; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.drools.domain.models.controller.ControllerCustomSerialization; +import org.onap.policy.drools.domain.models.controller.ControllerEvent; +import org.onap.policy.drools.domain.models.controller.ControllerPolicy; +import org.onap.policy.drools.domain.models.controller.ControllerProperties; +import org.onap.policy.drools.domain.models.controller.ControllerSinkTopic; +import org.onap.policy.drools.domain.models.controller.ControllerSourceTopic; +import org.onap.policy.drools.properties.DroolsPropertyConstants; +import org.onap.policy.drools.system.PolicyController; +import org.onap.policy.drools.system.PolicyControllerConstants; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PolicyTypeNativeDroolsController implements PolicyTypeController { + private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeDroolsController.class); + + @Getter + protected final ToscaPolicyTypeIdentifier policyType; + + @GsonJsonIgnore + @JsonIgnore + protected final transient LifecycleFsm fsm; + + public PolicyTypeNativeDroolsController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) { + this.policyType = policyType; + this.fsm = fsm; + } + + @Override + public boolean deploy(ToscaPolicy policy) { + Properties controllerProps = new Properties(); + ControllerPolicy controllerPolicy = toDomainPolicy(policy); + if (controllerPolicy == null) { + return false; + } + + ControllerProperties controllerConfig = controllerPolicy.getProperties(); + + boolean success = + configControllerName(controllerConfig, controllerProps) + && configControllerSources(controllerConfig, controllerProps) + && configControllerSinks(controllerConfig, controllerProps) + && configControllerCustom(controllerConfig, controllerProps); + + if (!success) { + return false; + } + + PolicyController controller; + try { + controller = + PolicyControllerConstants.getFactory().build( + controllerConfig.getControllerName(), controllerProps); + } catch (RuntimeException e) { + logger.warn("failed deploy (cannot create controller) for policy: {}", policy); + return false; + } + + return controller != null; + } + + @Override + public boolean undeploy(ToscaPolicy policy) { + try { + ControllerPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class); + PolicyControllerConstants.getFactory() + .destroy(nativePolicy.getProperties().getControllerName()); + return true; + } catch (RuntimeException | CoderException e) { + logger.warn("failed undeploy of policy: {}", policy); + return false; + } + } + + private ControllerPolicy toDomainPolicy(ToscaPolicy policy) { + ControllerPolicy nativePolicy = null; + try { + nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class); + ControllerProperties config = nativePolicy.getProperties(); + + /* check for duplicates */ + + if (isDups(sourceTopics(config.getSourceTopics())) + || isDups(sinkTopics(config.getSinkTopics()))) { + logger.warn("there are duplicated topics in policy {}", policy); + return null; + } + + /* check for non-existance of the controller - throws IAE if there's not */ + + PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getControllerName()); + + } catch (CoderException e) { + logger.warn("failed deploy of policy (invalid): {}", policy); + return null; + } catch (IllegalArgumentException e) { + // this is OK + logger.trace("proceeding with the deploy of native controller policy: {}", policy); + } + + return nativePolicy; + } + + private boolean configControllerName(ControllerProperties controllerConfig, Properties controllerProps) { + controllerProps + .setProperty(DroolsPropertyConstants.PROPERTY_CONTROLLER_NAME, controllerConfig.getControllerName()); + return true; + } + + private boolean configControllerSources(ControllerProperties controllerConfig, Properties controllerProps) { + for (ControllerSourceTopic configSourceTopic : controllerConfig.getSourceTopics()) { + List<TopicSource> sources = + TopicEndpointManager.getManager().getTopicSources(List.of(configSourceTopic.getTopicName())); + if (sources.size() != 1) { + logger.warn("Topic {} is not present or ambigous {}", configSourceTopic.getTopicName(), sources); + return false; + } + + configSourceTopic(sources.get(0), configSourceTopic, controllerProps); + } + return true; + } + + private void configSourceTopic(TopicSource topic, ControllerSourceTopic configTopic, Properties controllerProps) { + String configCommPrefix = topic.getTopicCommInfrastructure().name().toLowerCase() + ".source"; + configTopic(configCommPrefix, topic.getTopic(), configTopic.getEvents(), controllerProps); + } + + private boolean configControllerSinks(ControllerProperties controllerConfig, Properties controllerProps) { + for (ControllerSinkTopic configSinkTopic : controllerConfig.getSinkTopics()) { + List<TopicSink> sinks = + TopicEndpointManager.getManager().getTopicSinks(List.of(configSinkTopic.getTopicName())); + if (sinks.size() != 1) { + logger.warn("Topic {} is not present or ambigous {}", configSinkTopic.getTopicName(), sinks); + return false; + } + + configSinkTopic(sinks.get(0), configSinkTopic, controllerProps); + } + return true; + } + + private void configSinkTopic(TopicSink topic, ControllerSinkTopic configTopic, Properties controllerProps) { + String configCommPrefix = topic.getTopicCommInfrastructure().name().toLowerCase() + ".sink"; + configTopic(configCommPrefix, topic.getTopic(), configTopic.getEvents(), controllerProps); + } + + private void configTopic( + String configCommPrefix, String topicName, List<ControllerEvent> events, Properties controllerProps) { + String configTopicPrefix = configCommPrefix + "." + topicName; + configTopics(configCommPrefix, topicName, controllerProps); + for (ControllerEvent configEvent : events) { + configEvent(configTopicPrefix, configEvent, controllerProps); + } + } + + private void configTopics(String propPrefix, String topicName, Properties controllerProps) { + String topicsPropKey = propPrefix + ".topics"; + configTopicItemList(topicsPropKey, topicName, controllerProps); + } + + private void configEvent(String propPrefix, ControllerEvent configEvent, Properties controllerProps) { + String eventPropPrefix = propPrefix + ".events"; + controllerProps.setProperty(eventPropPrefix, configEvent.getEventClass()); + if (configEvent.getEventFilter() != null) { + controllerProps.setProperty( + eventPropPrefix + "." + configEvent.getEventClass() + ".filter", configEvent.getEventFilter()); + } + if (configEvent.getCustomSerialization() != null) { + configSerialization(eventPropPrefix, configEvent.getCustomSerialization(), controllerProps); + } + configTopicItemList(eventPropPrefix, configEvent.getEventClass(), controllerProps); + } + + private void configTopicItemList(String itemPrefix, String item, Properties controllerProps) { + if (controllerProps.getProperty(itemPrefix) == null) { + controllerProps.setProperty(itemPrefix, item); + } else { + controllerProps.setProperty(itemPrefix, "," + item); + } + } + + private void configSerialization( + String propPrefix, ControllerCustomSerialization configCustom, Properties controllerProps) { + String customPropPrefix = propPrefix + ".custom.gson"; + controllerProps.setProperty( + customPropPrefix, configCustom.getCustomSerializerClass() + "," + configCustom.getJsonParser()); + } + + private boolean configControllerCustom(ControllerProperties controllerConfig, Properties controllerProps) { + Map<String, String> configCustom = controllerConfig.getCustomConfig(); + if (configCustom == null || configCustom.isEmpty()) { + return true; + } + + controllerProps.putAll(configCustom); + return true; + } + + private <T> boolean isDups(List<T> items) { + return items.size() != items.stream().distinct().count(); + } + + private List<String> sourceTopics(List<ControllerSourceTopic> sourceTopics) { + return sourceTopics.stream() + .map(ControllerSourceTopic::getTopicName) + .collect(Collectors.toList()); + } + + private List<String> sinkTopics(List<ControllerSinkTopic> sourceTopics) { + return sourceTopics.stream() + .map(ControllerSinkTopic::getTopicName) + .collect(Collectors.toList()); + } + +} diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json deleted file mode 100644 index d638e3b9..00000000 --- a/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://www.onap.org/policy/models/schemas/onap.policies.drools.Controller.schema.json", - "type": "object", - "title": "Domain onap.policies.drools.Controller Policy root schema", - "required": [ - "type", - "type_version", - "version", - "metadata", - "properties" - ], - "properties": { - "type": { - "$id": "#/properties/type", - "type": "string", - "title": "Policy Type", - "default": "onap.policies.native.Drools", - "examples": [ - "onap.policies.native.Drools" - ], - "pattern": "^(.+)$" - }, - "type_version": { - "$id": "#/properties/type_version", - "type": "string", - "title": "Policy Type Version", - "examples": [ - "1.0.0" - ], - "pattern": "^(.+)$" - }, - "version": { - "$id": "#/properties/version", - "type": "string", - "title": "Version", - "examples": [ - "1.0.0" - ], - "pattern": "^(.+)$" - }, - "name": { - "$id": "#/properties/name", - "type": "string", - "title": "Name", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - }, - "metadata": { - "$id": "#/properties/metadata", - "type": "object", - "title": "Metadata", - "required": [ - "policy-id" - ], - "properties": { - "policy-id": { - "$id": "#/properties/metadata/properties/policy-id", - "type": "string", - "title": "The policy-id Schema", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - } - } - }, - "properties": { - "$id": "#/properties/properties", - "type": "object", - "title": "Policy Domain Properties", - "required": [ - "controllerName" - ], - "properties": { - "controllerName": { - "$id": "#/properties/properties/properties/controllerName", - "type": "string", - "title": "Controller Name", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - }, - "sourceTopics": { - "$id": "#/properties/properties/properties/sourceTopics", - "type": "array", - "title": "Source Topics", - "items": { - "$id": "#/properties/properties/properties/sourceTopics/items", - "type": "object", - "title": "Topic Data", - "required": [ - "topicName", - "serialization" - ], - "properties": { - "topicName": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/topicName", - "type": "string", - "title": "Topic Name", - "examples": [ - "DCAE_TOPIC" - ], - "pattern": "^(.+)$" - }, - "serialization": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization", - "type": "array", - "title": "Serialization", - "items": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items", - "type": "object", - "title": "Serialization Data", - "required": [ - "eventClass", - "eventFilter", - "customSerializer" - ], - "properties": { - "eventClass": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/eventClass", - "type": "string", - "title": "Event Class", - "examples": [ - "org.onap.policy.controlloop.CanonicalOnset" - ], - "pattern": "^(.+)$" - }, - "eventFilter": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/eventFilter", - "type": "string", - "title": "Event Filter", - "examples": [ - "[?($.closedLoopEventStatus == 'ONSET')]" - ], - "pattern": "^(.+)$" - }, - "customSerializer": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer", - "type": "object", - "title": "Custom Serializer", - "required": [ - "customSerializerClass", - "jsonParser" - ], - "properties": { - "customSerializerClass": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer/properties/customSerializerClass", - "type": "string", - "title": "Custom Serializer Class", - "examples": [ - "org.onap.policy.controlloop.util.Serialization" - ], - "pattern": "^(.*)$" - }, - "jsonParser": { - "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer/properties/jsonParser", - "type": "string", - "title": "JSON Parser reference", - "examples": [ - "gson" - ], - "pattern": "^(.+)$" - } - } - } - } - } - } - } - } - }, - "sinkTopics": { - "$id": "#/properties/properties/properties/sinkTopics", - "type": "array", - "title": "Sink Topics", - "items": { - "$id": "#/properties/properties/properties/sinkTopics/items", - "type": "object", - "title": "Sink Topic Data", - "required": [ - "topicName", - "serialization" - ], - "properties": { - "topicName": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/topicName", - "type": "string", - "title": "Topic Name", - "default": "", - "examples": [ - "APPC-CL" - ], - "pattern": "^(.+)$" - }, - "serialization": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization", - "type": "array", - "title": "The Serialization Schema", - "items": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items", - "type": "object", - "title": "Serialization Data", - "required": [ - "eventClass", - "eventFilter" - ], - "properties": { - "eventClass": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/eventClass", - "type": "string", - "title": "Event Class", - "examples": [ - "org.onap.policy.appc.Response" - ], - "pattern": "^(.+)$" - }, - "eventFilter": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/eventFilter", - "type": "string", - "title": "The Eventfilter Schema", - "examples": [ - "[?($.CommonHeader && $.Status)]" - ], - "pattern": "^(.+)$" - }, - "customSerializer": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer", - "type": "object", - "title": "The Customserializer Schema", - "required": [ - "customSerializerClass", - "jsonParser" - ], - "properties": { - "customSerializerClass": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer/properties/customSerializerClass", - "type": "string", - "title": "The Customserializerclass Schema", - "examples": [ - "org.onap.policy.appc.util.Serialization" - ], - "pattern": "^(.+)$" - }, - "jsonParser": { - "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer/properties/jsonParser", - "type": "string", - "title": "The Jsonparser Schema", - "examples": [ - "gsonPretty" - ], - "pattern": "^(.+)$" - } - } - } - } - } - } - } - } - }, - "customConfig": { - "$id": "#/properties/properties/properties/customConfig", - "type": "object", - "title": "other Configuration", - "additionalProperties": { - "type": "string" - } - } - } - } - } -} diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json deleted file mode 100644 index 8742768b..00000000 --- a/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.native.Drools.schema.json", - "type": "object", - "title": "Domain onap.policies.controlloop.native.Drools Policy root schema", - "required": [ - "type", - "type_version", - "version", - "metadata", - "properties" - ], - "properties": { - "type": { - "$id": "#/properties/type", - "type": "string", - "title": "Policy Type", - "default": "onap.policies.native.Drools", - "examples": [ - "onap.policies.native.Drools" - ], - "pattern": "^(.+)$" - }, - "type_version": { - "$id": "#/properties/type_version", - "type": "string", - "title": "Policy Type Version", - "examples": [ - "1.0.0" - ], - "pattern": "^(.+)$" - }, - "version": { - "$id": "#/properties/version", - "type": "string", - "title": "Version", - "examples": [ - "1.0.0" - ], - "pattern": "^(.+)$" - }, - "name": { - "$id": "#/properties/name", - "type": "string", - "title": "Name", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - }, - "metadata": { - "$id": "#/properties/metadata", - "type": "object", - "title": "Metadata", - "required": [ - "policy-id" - ], - "properties": { - "policy-id": { - "$id": "#/properties/metadata/properties/policy-id", - "type": "string", - "title": "Policy Name", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - } - } - }, - "properties": { - "$id": "#/properties/properties", - "type": "object", - "title": "Properties", - "required": [ - "rulesArtifact", - "controller" - ], - "properties": { - "rulesArtifact": { - "$id": "#/properties/properties/properties/rulesArtifact", - "type": "object", - "title": "Rules Artifact", - "required": [ - "groupId", - "artifactId", - "version" - ], - "properties": { - "groupId": { - "$id": "#/properties/properties/properties/rulesArtifact/properties/groupId", - "type": "string", - "title": "Group Id", - "examples": [ - "org.onap.policy.controlloop" - ], - "pattern": "^(.+)$" - }, - "artifactId": { - "$id": "#/properties/properties/properties/rulesArtifact/properties/artifactId", - "type": "string", - "title": "Artifact ID", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - }, - "version": { - "$id": "#/properties/properties/properties/rulesArtifact/properties/version", - "type": "string", - "title": "Version", - "examples": [ - "1.0.0" - ], - "pattern": "^(.+)$" - } - } - }, - "controller": { - "$id": "#/properties/properties/properties/controller", - "type": "object", - "title": "Controller", - "required": [ - "name" - ], - "properties": { - "name": { - "$id": "#/properties/properties/properties/controller/properties/name", - "type": "string", - "title": "Name", - "examples": [ - "example" - ], - "pattern": "^(.+)$" - } - } - } - } - } - } -} |