Awx-operator: En attente du pod postgres même si postgres externe est défini

Créé le 15 avr. 2021  ·  6Commentaires  ·  Source: ansible/awx-operator

---
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 ?

docs good first issue help wanted

Tous les 6 commentaires

@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 :

https://github.com/ansible/awx-operator/blob/devel/roles/installer/tasks/database_configuration.yml#L90

 - 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é

Cette page vous a été utile?
0 / 5 - 0 notes