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: