HomeAboutContact

Custom Ansible GPT mit ChatGPT

Von Yannik Korzikowski
Veröffentlich in Software Entwicklung
06. December 2023
2 min Lesezeit
🇩🇪
Custom Ansible GPT mit ChatGPT

Inhalt

01
TL;DR
02
Motivation
03
Ziel
04
GPT Konfiguration
05
Der Test
06
Fazit

TL;DR

Wer es selbst mal ausprobieren möchte, kann den GPT unter folgendem Link erreichen: https://chat.openai.com/g/g-CcYaJbKYH-ansible-architect

Motivation

ChatGPT bietet die Möglichkeit, eigene Custom-GPTs zu erstellen, welche einen bestimmten Auftrag haben und sich somit immer gleich verhalten sollen. (vgl. https://openai.com/blog/introducing-gpts).

Da ich aktuell sehr viel mit Ansible Automatisiere, habe ich mir einen Ansible GPT Assistenten gebaut, der mir einen konsistenten Output an Ansible Rollen ausgibt.

Ziel

Ich gebe ChatGPT eine Anleitung im analogen Stil. Als Antwort erwarte ich Copy&Paste Rollen, Templates und host_vars.

GPT Konfiguration

Umeinen neuen GPT zu erstellen, klicke ich im eingeloggten Zustand auf meinen Profil-Badge und auf My GPTs. Screenshot 2023 11 26 at 18 04 32

Danach habe ich die Möglichkeit, aus bereits bestehenden GPTs zu wählen oder einen neuen GPT anzulegen. Einen GPT Store gibt es aktuell noch nicht, dieser soll aber bald kommen. Screenshot 2023 11 26 at 18 06 04

Ich entscheide mich dazu, einen neuen GPT anzulegen, nämlich meinen Ansible Architect GPT.

Initiiert habe ich dies mit dem folgenden Prompt. Die Erstellung eines GPTs ist geführt, ich bekomme also laufend Input von ChatGPT.

Prompt: I want create Ansible roles from user prompts. I want the GPT to follow ansible lint rules.

Screenshot 2023 11 26 at 17 38 07

ChatGPT schlägt einen Namen vor und auch ein Profilbild.

Screenshot 2023 11 26 at 17 40 37

Auch macht es bereits Vorschläge, was wohl hilfreich für diesen GPT sein könnte.

Screenshot 2023 11 26 at 17 44 22

Irgendwann ist die Fragerunde dann beendet und ich darf den frisch erstellten GPT ausprobieren.

Screenshot 2023 11 26 at 17 44 27

ChatGPT ist sehr redselig und antwortet mir auf meine Prompt mit einer ausführlichen Beschreibung. Dies habe habe ich in der Konfiguration des GPT noch einmal ausdrücklich deaktiviert.

Prompt: Keep your messages short and focus on copy&pastable code. Only give description if the user asks you.

Auch benutzt ChatGPT gerne lineinfileund blockinfile. Ich bevorzuge jedoch die Erstellung von Templates mit Jinja.

Prompt: prioritizes the use of Ansible’s template module over blockinfile or lineinfile

Der Test

Als einfaches Beispiel möchte ich von meiner GPT nun eine Ansible Rolle zur Installation von Docker bekommen. Dazu kopiere ich einfach die Anleitung von https://docs.docker.com/engine/install/ubuntu/ in den Prompt.

Die Antwort des GPTs

To automate the Docker installation process using Ansible, create an Ansible role with tasks that replicate the steps provided. Below is an example of how this can be structured in Ansible:

  1. Create Role Directories:
mkdir -p docker-install/{tasks,templates,vars}
  1. Variables File (docker-install/vars/main.yml: This file will contain variables such as the Docker GPG key URL and the Docker repository URL.
docker_gpg_key_url: "https://download.docker.com/linux/ubuntu/gpg"
docker_repo_url: "deb [arch={{ ansible_architecture }} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release | lower }} stable"
  1. Tasks File (docker-install/tasks/main.yml: This file contains the tasks that need to be executed.
- name: Update apt and install prerequisites
ansible.builtin.apt:
name:
- ca-certificates
- curl
- gnupg
update_cache: yes
- name: Create directory for Docker GPG key
ansible.builtin.file:
path: /etc/apt/keyrings
state: directory
mode: '0755'
- name: Add Docker's official GPG key
ansible.builtin.get_url:
url: "{{ docker_gpg_key_url }}"
dest: "/etc/apt/keyrings/docker.gpg"
mode: 'a+r'
- name: Add Docker repository
ansible.builtin.template:
src: docker.list.j2
dest: /etc/apt/sources.list.d/docker.list
notify: Update apt cache
- name: Install Docker packages
ansible.builtin.apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: latest
notify: Verify Docker Installation
- name: Verify Docker Installation
ansible.builtin.command:
cmd: docker run hello-world
register: docker_test_output
changed_when: false
- debug:
var: docker_test_output.stdout_lines
  1. Template File (docker-install/templates/docker.list.j2: This file is a Jinja2 template for the Docker repository source list.
{{ docker_repo_url }}
  1. Handlers File (docker-install/handlers/main.yml: This file will contain handlers to update the apt cache and verify Docker installation.
- name: Update apt cache
ansible.builtin.apt:
update_cache: yes
- name: Verify Docker Installation
ansible.builtin.command:
cmd: docker run hello-world
  1. Using the Role: In your playbook, include the role as follows:
- hosts: all
roles:
- docker-install

This Ansible role will set up the Docker repository and install Docker on the target machine(s, mimicking the manual steps you’ve outlined. Remember to adjust the variables as needed for your specific environment.

Fazit

Die Möglichkeit, sich kleine Assistenten zu konfigurieren, die dann auch hoffentlich immer einem bestimmten Regelsatz folgen, finde ich sehr charmant.

In der Vergangenheit habe ich schon öfters mit Ansible und ChatGPT herumexperimentiert. Da der Output jedoch nie wirklich konsistent war, musste ich immer sehr viel nacharbeiten. Ich werde in einigen Monaten ein Update in diesem Artikel veröffentlichen und schauen, wie sich dieser GPT im Langzeittest macht.

Wer es selbst mal ausprobieren möchte, kann den GPT unter folgendem Link erreichen: https://chat.openai.com/g/g-CcYaJbKYH-ansible-architect


Tags

#chatgpt#ansible

Share


Vorheriger Artikel
Website Relaunch
Yannik Korzikowski

Yannik Korzikowski

Cloud Architect

Quick Links

AboutContact me

Social Media