--- # NVIDIA GPU Exporter using NVML (pynvml) # Works with consumer GPUs (RTX/GTX) and datacenter GPUs # No DCGM required - uses pynvml Python library - name: Create NVIDIA exporter group ansible.builtin.group: name: "{{ nvidia_exporter_user }}" state: present system: true become: true - name: Create NVIDIA exporter user ansible.builtin.user: name: "{{ nvidia_exporter_user }}" group: "{{ nvidia_exporter_user }}" home: "{{ nvidia_exporter_user_home }}" system: true create_home: true shell: /usr/sbin/nologin become: true - name: Create NVIDIA exporter install directory ansible.builtin.file: path: "{{ item }}" state: directory owner: "{{ nvidia_exporter_user }}" group: "{{ nvidia_exporter_user }}" mode: "0755" loop: - "{{ nvidia_exporter_install_dir }}" - "{{ nvidia_exporter_install_dir }}/logs" become: true - name: Copy NVIDIA exporter script ansible.builtin.copy: src: nvidia_gpu_exporter.py dest: "{{ nvidia_exporter_script_path }}" owner: "{{ nvidia_exporter_user }}" group: "{{ nvidia_exporter_user }}" mode: "0755" become: true notify: - Restart nvidia_exporter - name: Create Python virtual environment for NVIDIA exporter ansible.builtin.command: cmd: "{{ ansible_facts['python']['executable'] }} -m venv {{ nvidia_exporter_venv_path }}" creates: "{{ nvidia_exporter_venv_path }}/bin/activate" become: true - name: Install nvidia-ml-py in NVIDIA exporter venv ansible.builtin.pip: name: "nvidia-ml-py" virtualenv: "{{ nvidia_exporter_venv_path }}" state: present become: true - name: Fix ownership of NVIDIA exporter directory ansible.builtin.file: path: "{{ nvidia_exporter_install_dir }}" owner: "{{ nvidia_exporter_user }}" group: "{{ nvidia_exporter_user }}" recurse: true become: true - name: Copy NVIDIA exporter systemd service ansible.builtin.template: src: nvidia_exporter.service.j2 dest: "/etc/systemd/system/{{ nvidia_exporter_service_name }}.service" owner: root group: root mode: "0644" become: true notify: - Reload systemd daemon - Restart nvidia_exporter - name: Ensure NVIDIA exporter is enabled and started ansible.builtin.systemd: name: "{{ nvidia_exporter_service_name }}" enabled: true state: started become: true