Still, Implementation always Implements at least one Interface
It cannot be a generic Interface. For now, it will be assured by content review and written down in our best practices guide. Later we can add automated checks, e.g. the cap.core.type.generic.value Type is not used in Interfaces.
It can be just a warning in the same way how the Helm lint does e.g. with iconURL “enforcement”.
Add option to specify additionalInput parameters which can be used in: advanced rendering mode and when referencing Implementation directly (e.g. via CLI when creating an Action or in umbrella workflows).
Option B: Nested Policy support
Renderer: Inject additionalInput into workflow as Argo artifact
Populate it similarly as e.g. input parameters
If empty, create output empty artifact (to avoid rendering fail)
Support One-time policy from User
Engine: Extend Action CR with One time policy ref
Allow passing users one-time Policy - store in ConfigMap/Secret
Support it via CLI and GraphQL API
Interactive and passing policy from file
Support nested Policy in workflow (Content Developer uses that) \<MD: 5MD>
In the future, they could be overridden by advanced rendering.
Support passing additionalInput in Policy
To discuss: Per step or per Implementation manifest
[DRAFT - to discuss] Policy priorities
Cluster Policy
User Policy for first Action (before running workfow)
Workflow Policy (created by Content Developer)
User Policy for step (in advanced rendering)
make the Policy priorities order configurable
All policies on different levels are merged into one single Policy
To discuss - see how Helm it does
UX → naming
Property naming
Feature naming (policy or something else)
How to define it with as little boilerplate as possible
Update docs and describe clearly how the policies on different level work
CLI: Naming --user-policy-from-file?
OCH manifests
OCF Schema: Add additionalInput for Implementation to OCF JSON schema
Cleanup Interface parameters for RocketChat, BitBucket, Jira, Crowd, Confluence etc. Move all K8s specific params to Implementation.additionalInput with dedicated JSON schema
Remove Impl-specific Interfaces and Implementations for RDS and Elasticsearch
Reduce the Implementations to single one with additionalInput with dedicated JSON schema
You don’t need to install all apps to verify - just compare values.yaml
Create one Type with shared k8s parameters - If possible
If there are common parameters from additionalInput for different Implementations, extract them to dedicated Type
Update tutorials if needed
Discarded option
Click to expand
Option A: Static imports for Implementation
1. Modify Action CR and add ability to pass multiple parameters
1. list/map of input parameters - save all in Secret
1. update GraphQL API for Engine
1. Update CLI - add option to pass multiple different params
1. Renderer - iterate over input params and output them as multiple artifacts
1. update renderer unit tests - test multiple params
1. Engine: Allow running Implementation as Action by User
1. Modify Renderer to not assume that we run Interface every time
1. As we need to query Interface, pick first one from the `implements` list
1. Get Impl/Interface based on prefix (`cap.implementation`, `cap.interface`)
1. Policy: get Interface for a given Implementation and inject TypeInstances based on policy
1. For now we support just a single item on `implements` list, so take just first Interface from the list
1. Engine/Renderer: Allow referring Implementation in `action` field in workflow
1. Implementation will be imported (in `imports` ) in the same way as Interface currently
1. Rename `imports.interfaceGroupPath` → `imports.pathPrefix`
1. Additional input parameters are passed as input artifact similarly to current `input-parameters` (with different name)
```yaml
artifacts:
- name: input-parameters
from: "`steps.fill-aws-params-in-module-args.outputs.artifacts.render`"
- name: additional-input # dedicated name specified in `Implementation.additionalInput`?
from: ""```
```
Reason
Currently, Interfaces are implementation specific which violates one of our main paradigm
Description
cap.core.type.generic.value
Type is not used in Interfaces.iconURL
“enforcement”.additionalInput
parameters which can be used in: advanced rendering mode and when referencing Implementation directly (e.g. via CLI when creating an Action or in umbrella workflows).Option B: Nested Policy support
additionalInput
into workflow as Argo artifactadditionalInput
in Policy[DRAFT - to discuss] Policy priorities
--user-policy-from-file
?additionalInput
for Implementation to OCF JSON schemaImplementation.additionalInput
with dedicated JSON schemaadditionalInput
with dedicated JSON schemaadditionalInput
for different Implementations, extract them to dedicated TypeDiscarded option
Click to expand
Option A: Static imports for Implementation 1. Modify Action CR and add ability to pass multiple parameters 1. list/map of input parameters - save all in Secret 1. update GraphQL API for Engine 1. Update CLI - add option to pass multiple different params 1. Renderer - iterate over input params and output them as multiple artifacts 1. update renderer unit tests - test multiple params 1. Engine: Allow running Implementation as Action by User 1. Modify Renderer to not assume that we run Interface every time 1. As we need to query Interface, pick first one from the `implements` list 1. Get Impl/Interface based on prefix (`cap.implementation`, `cap.interface`) 1. Policy: get Interface for a given Implementation and inject TypeInstances based on policy 1. For now we support just a single item on `implements` list, so take just first Interface from the list 1. Engine/Renderer: Allow referring Implementation in `action` field in workflow 1. Implementation will be imported (in `imports` ) in the same way as Interface currently 1. Rename `imports.interfaceGroupPath` → `imports.pathPrefix` 1. Additional input parameters are passed as input artifact similarly to current `input-parameters` (with different name) ```yaml artifacts: - name: input-parameters from: "`steps.fill-aws-params-in-module-args.outputs.artifacts.render`" - name: additional-input # dedicated name specified in `Implementation.additionalInput`? from: ""``` ```Reason
Currently, Interfaces are implementation specific which violates one of our main paradigm
Subtasks