Agent skill

ansible-awx

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/ansible-awx

SKILL.md

馃敡 Skill: Ansible AWX Automation

馃搵 Metadata

Atributo Valor
ID cicd-ansible-awx
Nivel 馃敶 Avanzado
Versi贸n 1.0.0
Keywords ansible, awx, automation, configuration-management

馃攽 Keywords

  • ansible, awx, tower, automation, playbook, @skill:ansible-awx

馃摉 Descripci贸n

Ansible AWX (upstream de Red Hat Ansible Tower) proporciona UI web y API REST para gesti贸n de playbooks Ansible, ideal para automatizar configuraci贸n y deployment de backends Flutter.

馃捇 Implementaci贸n

1. Install AWX on Kubernetes

yaml
# awx-operator.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: awx
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: awx-operator
  namespace: awx
spec:
  channel: stable
  name: awx-operator
  source: operatorhubio-catalog
  sourceNamespace: olm
yaml
# awx-instance.yaml
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-prod
  namespace: awx
spec:
  service_type: LoadBalancer
  ingress_type: Ingress
  hostname: awx.myapp.com
  admin_user: admin
  admin_password_secret: awx-admin-password

2. Playbook para Deploy Backend

yaml
# playbooks/deploy-backend.yml
---
- name: Deploy Flutter Backend
  hosts: backend_servers
  become: yes
  vars:
    app_name: myapp-backend
    app_version: "{{ version | default('latest') }}"
    app_port: 3000
    
  tasks:
    - name: Pull Docker image
      docker_image:
        name: "myorg/{{ app_name }}"
        tag: "{{ app_version }}"
        source: pull
    
    - name: Stop existing container
      docker_container:
        name: "{{ app_name }}"
        state: stopped
      ignore_errors: yes
    
    - name: Remove existing container
      docker_container:
        name: "{{ app_name }}"
        state: absent
      ignore_errors: yes
    
    - name: Start new container
      docker_container:
        name: "{{ app_name }}"
        image: "myorg/{{ app_name }}:{{ app_version }}"
        state: started
        restart_policy: always
        published_ports:
          - "{{ app_port }}:{{ app_port }}"
        env:
          NODE_ENV: production
          DATABASE_URL: "{{ database_url }}"
          REDIS_URL: "{{ redis_url }}"
        networks:
          - name: backend-network
    
    - name: Wait for service to be ready
      uri:
        url: "http://localhost:{{ app_port }}/health"
        status_code: 200
      register: result
      until: result.status == 200
      retries: 30
      delay: 2

3. Playbook para Database Migration

yaml
# playbooks/db-migrate.yml
---
- name: Run Database Migrations
  hosts: db_server
  vars:
    db_host: "{{ lookup('env', 'DB_HOST') }}"
    db_name: myapp_prod
    
  tasks:
    - name: Check if migrations table exists
      postgresql_query:
        login_host: "{{ db_host }}"
        login_user: "{{ db_user }}"
        login_password: "{{ db_password }}"
        db: "{{ db_name }}"
        query: "SELECT EXISTS (SELECT FROM pg_tables WHERE tablename = 'migrations');"
      register: migrations_exist
    
    - name: Run migrations
      command: npm run migrate
      args:
        chdir: /app/backend
      environment:
        DATABASE_URL: "postgresql://{{ db_user }}:{{ db_password }}@{{ db_host }}/{{ db_name }}"

4. Playbook para Kubernetes Deployment

yaml
# playbooks/k8s-deploy.yml
---
- name: Deploy to Kubernetes
  hosts: localhost
  connection: local
  vars:
    namespace: production
    app_name: myapp-backend
    image_tag: "{{ version }}"
    
  tasks:
    - name: Create namespace if not exists
      k8s:
        state: present
        definition:
          apiVersion: v1
          kind: Namespace
          metadata:
            name: "{{ namespace }}"
    
    - name: Deploy application
      k8s:
        state: present
        definition:
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: "{{ app_name }}"
            namespace: "{{ namespace }}"
          spec:
            replicas: 3
            selector:
              matchLabels:
                app: "{{ app_name }}"
            template:
              metadata:
                labels:
                  app: "{{ app_name }}"
              spec:
                containers:
                - name: "{{ app_name }}"
                  image: "myorg/{{ app_name }}:{{ image_tag }}"
                  ports:
                  - containerPort: 3000
                  env:
                  - name: NODE_ENV
                    value: production
    
    - name: Expose service
      k8s:
        state: present
        definition:
          apiVersion: v1
          kind: Service
          metadata:
            name: "{{ app_name }}"
            namespace: "{{ namespace }}"
          spec:
            selector:
              app: "{{ app_name }}"
            ports:
            - port: 80
              targetPort: 3000
            type: LoadBalancer

5. AWX Job Templates

yaml
# Via AWX API
curl -X POST https://awx.myapp.com/api/v2/job_templates/ \
  -H "Authorization: Bearer $AWX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Deploy Backend to Production",
    "job_type": "run",
    "inventory": 1,
    "project": 1,
    "playbook": "playbooks/deploy-backend.yml",
    "extra_vars": "{\"version\": \"v1.0.0\"}",
    "ask_variables_on_launch": true
  }'

6. Inventory Configuration

ini
# inventory/production.ini
[backend_servers]
backend-1 ansible_host=10.0.1.10 ansible_user=ubuntu
backend-2 ansible_host=10.0.1.11 ansible_user=ubuntu
backend-3 ansible_host=10.0.1.12 ansible_user=ubuntu

[db_server]
db-1 ansible_host=10.0.2.10 ansible_user=ubuntu

[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_become=yes

馃幆 Mejores Pr谩cticas

  1. Use Ansible Vault para secrets
  2. Tag tasks para ejecuci贸n selectiva
  3. Idempotent playbooks - safe to re-run
  4. Roles para reutilizaci贸n de c贸digo
  5. Job Templates en AWX para self-service
  6. Workflows para pipelines complejos
  7. Surveys para inputs din谩micos

馃摎 Recursos


Versi贸n: 1.0.0

Didn't find tool you were looking for?

Be as detailed as possible for better results