---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
namespace: awx
spec:
tower_postgres_configuration_secret: awx-postgres-configuration
tower_old_postgres_configuration_secret: awx-old-postgres-configuration
$ kubectl -n awx get secrets
NAME TYPE DATA AGE
[..]
awx-old-postgres-configuration Opaque 5 21m
[..]
awx-postgres-configuration Opaque 5 21m
[..]
L'opérateur enregistre les éléments suivants :
TASK [installer : Get the postgres pod information] ****************************\r\ntask path: /opt/ansible/roles/installer/tasks/migrate_data.yml:11\nfatal: [localhost]: FAILED! => {\"msg\": \"The conditional check 'postgres_pod['resources'][0]['status']['phase'] == 'Running'' failed. The error was: error while evaluating conditional (postgres_pod['resources'][0]['status']['phase'] == 'Running'): list object has no element 0\"}\n\r\nPLAY RECAP
*********************************************************\r\nlocalhost : ok=29 changed=0 unreachable=0 failed=1 skipped=13 rescued=0 ignored=0 \r\n\n","job":"2740376916591569721","name":"awx","namespace":"awx","error":"exit status 2","stacktrace":"github.com/go-logr/zapr.(*zapLogger).Error\n\tpkg/mod/github.com/go-logr/[email protected]/zapr.go:128\ngithub.com/operator-framework/operator-sdk/pkg/ansible/runner.(*runner).Run.func1\n\tsrc/github.com/operator-framework/operator-sdk/pkg/ansible/runner/runner.go:239"}
--------------------------- Ansible Task Status Event StdOut -----------------
PLAY RECAP *********************************************************************
localhost : ok=29 changed=0 unreachable=0 failed=1 skipped=13 rescued=0 ignored=0
-------------------------------------------------------------------------------
{"level":"error","ts":1618494205.2788725,"logger":"controller-runtime.controller","msg":"Reconciler error","controller":"awx-controller","request":"awx/awx","error":"event runner on failed","stacktrace":"github.com/go-logr/zapr.(*zapLogger).Error\n\tpkg/mod/github.com/go-logr/[email protected]/zapr.go:128\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\tpkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:258\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\tpkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:232\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).worker\n\tpkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:211\nk8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1\n\tpkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:155\nk8s.io/apimachinery/pkg/util/wait.BackoffUntil\n\tpkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:156\nk8s.io/apimachinery/pkg/util/wait.JitterUntil\n\tpkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:133\nk8s.io/apimachinery/pkg/util/wait.Until\n\tpkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:90"}
Étant donné que les secrets de connexion postgres sont définis et transmis, pourquoi l'opérateur semble-t-il attendre (et donc se tromper) qu'un pod postgres soit disponible ?
@daenney Si vous regardez le code, la tâche " Obtenir les informations du pod postgres " fait partie du https://github.com/ansible/awx-operator/blob/devel/roles/installer/tasks/migrate_data.yml#L11 qui seront importés lorsque ces conditions seront remplies :
- name: Migrate data from old Openshift instance
import_tasks: migrate_data.yml
when:
- old_pg_config['resources'] is defined
- old_pg_config['resources'] | length
- this_awx['resources'][0]['status']['towerMigratedFromSecret'] is not defined
Essayez-vous donc de passer d'une instance Postgres
gérée localement à une instance externe ? Si oui, avez-vous un pod PostgreSQL en cours d'exécution ? Pouvons-nous obtenir la sortie kubectl describe pod <pgsql-managed>
?
Si tel est le cas, il se peut que votre pod PostgreSQL géré local n'ait pas les étiquettes attendues et puisque la tâche de réconciliation s'exécute après le database_configuration
vous rencontrez cette erreur.
Non, il n'y a pas de postgres géré localement. Il est distant dans les deux cas (RDS). Il n'était pas clair pour moi qu'il ne pouvait être mis à niveau qu'à partir d'une instance gérée localement.
L'ancienne instance est antérieure à la version 18.x, et les documents de migration m'ont suggéré que c'est ce que nous devrions faire. Sur la base de https://github.com/ansible/awx-operator/blob/devel/docs/migration.md , rien ne m'indiquait qu'il ne pouvait pas être mis à niveau à partir d'une ancienne base de données distante.
@daenney je vois votre point. Avoir cette configuration vous permettra de déplacer la base de données d'un endroit à un autre (voir plus sur https://github.com/ansible/awx-operator/blob/devel/roles/installer/tasks/database_configuration.yml#L90-L95 et https://github.com/ansible/awx-operator/blob/devel/roles/installer/tasks/migrate_data.yml#L59-L70)
Donc, dans votre cas, supprimez de votre type awx
l'ancien tower_old_postgres_configuration_secret
et le schéma de la base de données doit être mis à niveau par https://github.com/ansible/awx-operator/blob/devel/roles /installer/tasks/main.yml#L98 -L108
Faites-nous savoir si cela fonctionne et je suis d'accord, la documentation nécessite un peu de raffinement pour que ce soit clair.
Si vous souhaitez envoyer un PR, c'est le bienvenu !
Merci pour l'explication. J'ai essayé de le pointer sur une base de données externe existante et tout a parfaitement fonctionné. J'enverrai un PR demain avec quelques mises à jour de doc !
@tchellomello et @daenney ,
génial, vous n'aviez que quelques heures d'avance sur moi dans ma tentative de mise à niveau de 18.0.0 à 19.0.0 avec la base de données Postgres externe !
J'ai eu le même problème ce soir sur k8s ........ J'ai également une base de données Postgres distante qui n'a pas pu être vérifiée :
À partir des journaux awx-operator (0.8.0)
_"msg": "La vérification conditionnelle 'postgres_pod['resources'][0]['status']['phase'] == 'Running'' a échoué. L'erreur était : erreur lors de l'évaluation conditionnelle (postgres_pod['resources '][0]['status']['phase'] == 'Running'): l'objet liste n'a pas d'élément 0"_
J'ai supprimé la ligne "tower_old_postgres_configuration_secret" de my-awx.yml comme suggéré et cela a fonctionné pour moi.
Mise à niveau claire et simple et une instance AWX 19.0.0 fonctionnelle. Pas trouvé de problèmes avec les informations d'identification, jusqu'à présent tout va bien.
grtz,
André