J'ai des problèmes pour gérer influxdb via ansible en utilisant le module "influxdb_database". Même s'il affiche une erreur sur la dépendance python, il échoue uniquement lorsque le conteneur où le playbook ansible s'exécute est exécuté sur une machine virtuelle différente de celle où influxdb est hébergé. Je lance un playbook ansible à partir du conteneur docker, et si j'exécute le conteneur sur l'hôte où influxdb est installé, cela fonctionne bien - il parvient à créer une base de données. Mais, lorsque le même conteneur (créé à partir de la même image que celle mentionnée précédemment) s'exécute sur une machine virtuelle différente de celle où influxdb est hébergé, il échoue avec une erreur collée ci-dessous. Je suis donc confus maintenant avec l'erreur sur la dépendance python et je ne comprends pas où se trouve le problème.
Playbook Ansible:
TASK [Create database] *********************************************************************************************************************************************************** task path: /app/lib/ansible/playbooks/influx.yml:6 Using module file /usr/lib/python3.8/site-packages/ansible/modules/database/influxdb/influxdb_database.py Pipelining is enabled. <10.246.44.196> ESTABLISH SSH CONNECTION FOR USER: centos <10.246.44.196> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="centos"' -o ConnectTimeout=30 -o ControlPath=/root/.ansible/cp/be4c96d801 10.246.44.196 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-brzvkupumuacfsjirccgazqszuzzfwwx ; /usr/bin/python'"'"'"'"'"'"'"'"' && sleep 0'"'"'' Escalation succeeded <10.246.44.196> (1, b'\n{"msg": "Failed to import the required Python library (influxdb) on frame-tick10-246-44-196\'s Python /usr/bin/python. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter", "failed": true, "exception": "Traceback (most recent call last):\\n File \\"/tmp/ansible_influxdb_database_payload_IrdxhN/ansible_influxdb_database_payload.zip/ansible/module_utils/influxdb.py\\", line 23, in <module>\\n from influxdb import InfluxDBClient\\nImportError: No module named influxdb\\n", "invocation": {"module_args": {"username": "root", "retries": 3, "use_udp": true, "proxies": {}, "database_name": "miroslav", "hostname": "localhost", "udp_port": 4444, "ssl": false, "state": "present", "timeout": null, "password": "root", "validate_certs": true, "port": 8086}}}\n', b'OpenSSH_8.1p1, OpenSSL 1.1.1g 21 Apr 2020\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug2: resolve_canonicalize: hostname 10.246.44.196 is address\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 2147\r\ndebug3: mux_client_request_session: session request sent\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\n') <10.246.44.196> Failed to connect to the host via ssh: OpenSSH_8.1p1, OpenSSL 1.1.1g 21 Apr 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug2: resolve_canonicalize: hostname 10.246.44.196 is address debug1: auto-mux: Trying existing master debug2: fd 3 setting O_NONBLOCK debug2: mux_client_hello_exchange: master version 4 debug3: mux_client_forwards: request forwardings: 0 local, 0 remote debug3: mux_client_request_session: entering debug3: mux_client_request_alive: entering debug3: mux_client_request_alive: done pid = 2147 debug3: mux_client_request_session: session request sent debug3: mux_client_read_packet: read header failed: Broken pipe debug2: Received exit status from master 1 The full traceback is: Traceback (most recent call last): File "/tmp/ansible_influxdb_database_payload_IrdxhN/ansible_influxdb_database_payload.zip/ansible/module_utils/influxdb.py", line 23, in <module> from influxdb import InfluxDBClient ImportError: No module named influxdb fatal: [10.246.44.196]: FAILED! => { "changed": false, "invocation": { "module_args": { "database_name": "miroslav", "hostname": "localhost", "password": "root", "port": 8086, "proxies": {}, "retries": 3, "ssl": false, "state": "present", "timeout": null, "udp_port": 4444, "use_udp": true, "username": "root", "validate_certs": true } } } MSG: Failed to import the required Python library (influxdb) on frame-tick10-246-44-196's Python /usr/bin/python. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter
Echec de la connexion Ansible
hosts: "tag_deployment_sysmiromis:&tag_service_tick_yes" user: centos become: yes tasks: - name: Install InfluxDB package yum: name="influxdb-{{ frame_tick_influxdb_package_version }}" state=present disable_gpg_check=yes register: frame_yum_run retries: 10 until: frame_yum_run is success - name: Restrict InfluxDB user login user: name: "influxdb" group: "influxdb" shell: /sbin/nologin - name: Enable InfluxDB service systemd: name: influxdb enabled: yes state: started - name: Create InfluxDB data directory file: path: "{{ frame_tick_influxdb_data_directory }}" owner: influxdb group: influxdb state: directory mode: 0750 - name: Create database influxdb_database: hostname: localhost database_name: miroslav
3 Réponses :
on dirait que vous avez le même problème que moi. J'avais du mal à découvrir ce qui n'allait pas, puis j'ai lu les exigences et j'ai vu cela. J'utilise une version plus récente d'influxdb que ce module prend en charge, donc j'obtiens la même erreur que vous
Exigences Les exigences ci-dessous sont nécessaires sur l'hôte qui exécute ce module.
python> = 2,6
influxdb> = 0.9 et <= 1.2.4
demandes
https://docs.ansible.com/ansible/latest/modules/influxdb_database_module.html
MISE À JOUR:
J'ai pu trouver un moyen d'interagir avec influx DB en utilisant l'api au lieu des modules car ils ne fonctionnent pas. Cela implique de modifier influxdb.conf pour activer l'utilisation de l'API
# modifying the influxdb.conf is required to be able to use the influxDB API - name: Enable http lineinfile: path: /etc/influxdb/influxdb.conf regexp: 'Determines whether HTTP endpoint is enabled.' line: ' enabled = true' - name: Enable bind address :8086 lineinfile: path: /etc/influxdb/influxdb.conf regexp: '# bind-address = ":8086"' line: ' bind-address = ":8086"' - name: Restart influxdb, systemd: name: influxdb state: restarted - name: Create influxDB database via api uri: url: "http://localhost:8086/query" method: POST body: 'q=CREATE DATABASE "grafanadb"' body_format: form-urlencoded - name: create root user in influxdb uri: url: "http://localhost:8086/query" method: POST body: "q=CREATE USER user WITH PASSWORD 'pass' WITH ALL PRIVILEGES" - name: create grafana user in influxdb uri: url: "http://localhost:8086/query" method: POST body: "q=CREATE USER grafana WITH PASSWORD 'grafana'" - name: Grant all privileges to grafana user on grafanadb uri: url: "http://localhost:8086/query" method: POST body: "q=GRANT ALL ON grafanadb TO grafana" body_format: form-urlencoded
Merci! L'avez-vous fait fonctionner pour vous? Quelle version d'influxdb avez-vous utilisée?
Je suppose que les versions des exigences que vous avez mentionnées se réfèrent à l'hôte exécutant un playbook ansible, non? Pas l'hôte sur lequel influxdb que je souhaite gérer est en cours d'exécution? J'ai essayé de définir influxdb version 1.0.2 sur le playbook en cours d'exécution de l'hôte, mais même erreur. J'ai également essayé avec python2.7 et python3.8 en cours d'exécution dans un hôte ansible (conteneur dans mon cas) et à nouveau la même erreur.
Ce qui me manquait, c'est influxdb installé dans l'hôte ciblé.Une fois qu'il est installé, le module influxdb ansible commence à fonctionner correctement.
Afin de faire fonctionner le module influxdb_database, vous devez vous assurer que influxdb-python est installé sur votre machine. Il est également recommandé d'installer influxdb car vous souhaiterez peut-être accéder directement à la base de données à partir de la ligne de commande.
Pour les installations CentOS7 / RHEL7, cela peut être fait comme suit:
- name: Create database using custom credentials influxdb_database: hostname: "{{influxurl}}" username: "{{influxusername}}" password: "{{influxpassword}}" database_name: "{{influxdbv7}}" port: "{{influxport}}" ssl: yes validate_certs: yes
CentOS8 / RHEL8:
- name: Install applications for CentOS apt: name: - python-influxdb
Remarque: Vous devez utiliser une version de python différente car l'interpréteur python par défaut est différent pour CentOS7 et 8. Par conséquent, l'interpréteur python influxdb_database sera également différent.
Par conséquent, le playbook ressemblerait à ceci:
apt-get install python-influxdb
Pour les configurations debian / ubuntu, vous pouvez effectuer les opérations suivantes:
- name: Install applications for CentOS 7 yum: name: - influxdb - python-pip - name: Install applications for CentOS 8 yum: name: - influxdb - python3-pip - name: Install required pip packages pip: name: - influxdb
ou
dnf install python3-pip pip3 install influxdb
Si vous essayez de vous connecter à un InfluxDB distant, vous devez vous assurer que vous vous authentifiez via SSL. Vous devez l'activer manuellement car il n'est pas activé par défaut.
Voici à quoi ressemblerait une création de base de données d'afflux à distance:
yum install python-pip pip install influxdb
Remarque: j'ai testé cette configuration avec CentOS7 / 8. Cela fonctionne peut-être aussi bien avec les configurations Ubuntu / Debian. Pour une raison quelconque, CentOS7 m'a obligé à désactiver validate_certs, sinon cela échoue. C'est peut-être un bug.
Version testée: