cloudsoft.io

Ansible and BASH over SSH for a Web Server

The following code defines an entity which uses Ansible and BASH on a CentOS server to configure and run a web server (Apache httpd) running a simple HTML site.

name: Ansible+SSH HTTPD Web App

# most any CentOS/RHEL environment should work
location: amazon-us-east-1-fast-centos

services:
  - type: org.apache.brooklyn.entity.software.base.WorkflowSoftwareProcess
    brooklyn.config:
      install.workflow:
        steps:
          - id: install-ansible
            type: workflow
            steps:
              - ssh sudo yum update -y
              - ssh sudo yum install -y epel-release
              - ssh sudo yum install -y ansible
              - ssh sudo yum install -y unzip

          - id: install-httpd-with-ansible
            type: ansible-ssh
            input:
              playbook_yaml:
                - name: Ensure httpd is running
                  hosts: localhost
                  become: yes
                  tasks:
                    - name: ensure apache is at the latest version
                      yum:
                        name: httpd
                        state: latest
                    - name: ensure apache is running
                      service:
                        name: httpd
                        state: started

          # confirm it is running and return stdout
          - ssh ps aux | grep httpd
          - return ${stdout}

      files.runtime:
        https://github.com/cloudsoft/hello-world-html/archive/refs/heads/main.zip: hello-world.zip
      launch.workflow:
        steps:
          - ssh rm -rf hello-world-html-main/
          - ssh unzip ${entity.driver.runDir}/hello-world.zip
          - ssh sudo cp hello-world-html-main/* /var/www/html/
          - set-sensor main.uri = http://${entity.sensor['host.address']}/
      checkRunning.workflow:
        steps:
          - step: http ${entity.sensor['main.uri']}
            timeout: 10s
            on-error:
              - return false
          - return true