0
votes

ImportError: aucun module nommé influxdb. Échec de l'importation de la bibliothèque Python requise (influxdb)

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


0 commentaires

3 Réponses :


2
votes

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


2 commentaires

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.



0
votes

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.


0 commentaires

1
votes

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:

  • Base de données: InfluxDB version 1.8.3
  • Ansible: version 2.9


0 commentaires