Blueprints

Deploy configuration files to multiple servers using Ansible

Source

yaml
id: ansible-deploy-configuration
namespace: blueprints

tasks:

  - id: aws_setup
    type: io.kestra.plugin.aws.cli.AwsCLI
    outputFiles:
      - ssh-key.pem
    commands:
      - aws ec2 create-key-pair --key-name ssh-key.pem --query 'KeyMaterial'
        --output text > ssh-key.pem.pem
      - aws ec2 create-security-group --group-name MySSHGroup --description
        "Security group for SSH access"
      - aws ec2 authorize-security-group-ingress --group-id MySSHGroup
        --protocol tcp --port 22 --cidr 0.0.0.0/0
      - aws ec2 run-instances \ --image-id ami-0c55b992cb05c84cb \
        --instance-type t2.micro \ --key-name ssh-key.pem \ --security-group-ids
        MySSHGroup \ --subnet-id subnet-0123456789abcdef0 \ --count 2 | xargs -0
        -I {} echo '::{"outputs":{}}::'

  - id: ansible
    type: io.kestra.plugin.ansible.cli.AnsibleCLI
    inputFiles:
      ssh-key.pem: "{{ read(outputs.aws_setup.outputFiles['ss-key.pem']) }}"
      inventory.ini: |
        [servers]
        server1 ansible_connection={{ outputs.aws_setup.vars.ec2[0].ip }} ansible_user=ubuntu ansible_ssh_common_args='-o StrictHostKeyChecking=no'
        server2 ansible_connection={{ outputs.aws_setup.vars.ec2[1].ip }} ansible_user=ubuntu ansible_ssh_common_args='-o StrictHostKeyChecking=no'
      playbook.yml: |
        ---
        - name: Configuration Deployment Playbook
          hosts: servers
          
          tasks:
            - name: Deploy .env file
              copy:
                content: |
                  # Environment configuration file
                  DB_HOST=localhost
                  DB_PORT=5432
                  DB_NAME=myapp
                  DB_USER=appuser
                  DB_PASSWORD=securepassword
                  # API Configuration
                  API_PORT=3000
                  API_SECRET=your_secret_key
                  # Application settings
                  APP_ENV=production
                  DEBUG=false
                  LOG_LEVEL=info
                dest: "/home/app/.env"
                mode: '0600'
              register: env_file_result
    commands:
      - ansible-playbook -i inventory.ini playbook.yml --key-file ssh-key.pem

About this blueprint

CLI AWS DevOps

This flow creates two AWS EC2 instances, then deploys a configuration file to each of them using Ansible.

Aws CLI

Ansible CLI

More Related Blueprints

New to Kestra?

Use blueprints to kickstart your first workflows.

Get started with Kestra