Disabled components in the PloigosPlatform will still be deployed by the operator due to jmespath edge cases
Closed this issue · 2 comments
I was running through the Ploigos Enablement, but the operator was unable to deploy due to issues setting up Quay, even though Quay was disabled in the platform definition. This is because the Ansible json search filter will return all components in a service if any one of them is enabled.
The below playbook shows the issue. The vars are pulled from the platform role defaults/main.yml.
---
- hosts: localhost
gather_facts: no
vars:
ploigosPlatform:
apiVersion: redhatgov.io/v1alpha1
kind: PloigosPlatform
metadata:
name: ploigosplatform-jenkins
spec:
due to the all the operations being OR'd together in the query.
ploigosPlatform:
services:
continuousIntegration:
jenkins:
enabled: true
sourceControl:
gitea:
enabled: true
containerRegistry:
nexusContainers:deploy
enabled: true
quay:
enabled: false # Quay should not appear in managed Services output
ploigos_platform: "{{ ploigosPlatform['spec']['ploigosPlatform'] }}"
all_services: "{{ ploigos_platform.services.values() | list | json_query('[].keys(@)[]') }}"
managed_services: >-
{{ ploigos_platform.services.values() | list |
json_query('[?(' + ( all_services | join('||') ) + ').enabled && !*.external_properties].keys(@)[]') }}
tasks:
- debug: var=ploigos_platform
- debug: var=all_services
- debug: var=managed_services
Example output, displays quay as a managed service even when it is not enabled:
PLAY [localhost] ***************************
TASK [debug] **********************
Friday 02 July 2021 15:53:27 -0400 (0:00:00.016) 0:00:00.016 ***********
[started TASK: debug on localhost]
ok: [localhost] => {deploy
"ploigos_platform": {
"services": {
"containerRegistry": {
"nexusContainers": {
"enabled": true
},
"quay": {
"enabled": false
}
},
"continuousIntegration": {
"jenkins": {due to the all the operations being OR'd together in the query.
"enabled": true
}
},
"sourceControl": {
"gitea": {
"enabled": true
}
}
}
}
}
TASK [debug] *********************************
Friday 02 July 2021 15:53:27 -0400 (0:00:00.037) 0:00:00.054 ***********
[started TASK: debug on localhost]
ok: [localhost] => {
"all_services": [
"jenkins",
"gitea",
"nexusContainers",
"quay"
]
}
TASK [debug] ********************
Friday 02 July 2021 15:53:27 -0400 (0:00:00.042) 0:00:00.096 ***********
[started TASK: debug on localhost]
ok: [localhost] => {
"managed_services": [
"jenkins",
"gitea",
"nexusContainers",
"quay" # Quay still appears, even though it is still disabled.
]
}
PLAY RECAP ******************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Problem can be worked around by deleting the component from the service definition instead of setting enabled to false. However this work around is not intuitive when using the form-based operator installation method in the OCP UI.
Nice catch @rhn-gps-anbecker ! 👍🏼 I just pushed a commit to fix this. Once this build finishes: https://github.com/ploigos/ploigos-software-factory-operator/runs/2975526543 can you delete your ploigos-operator-controller-manager
Pod and see if it corrects the behavior?
Awesome! Will do, thanks @andykrohg