All of the posts on orchestration on here have been about Puppet on CentOS however last week I had need to script an AWS architecture and then launch instances built with Packerexternal link into it.

After much swearing I managed to hack together a python script which used Botoexternal link to create a launch configuration and register it with an auto-scaling group, I then used a second script which re-cycled instances behind the Elastic Load Balancer which were launched with the previous launch configuration.

I decided there must be a more elegant way of doing this so I looked at Puppet using it to manage AWS, there are some modules available but there was a lot of people discussing the various ways to configure a VPC using Puppet. Then I remember that learning the basics of Ansibleexternal link was on my list of things to do.

As Ansible is agent-less I needed to install it on my Mac, this is simple enough as you can use Brewexternal link  ….

brew update
brew install ansible

… once install I used a CentOS 7 Vagrant box to work through a few tutorialsexternal link  …

russ @ Russs-iMac in ~/Desktop/ansible
vagrant up
Bringing machine ‘default’ up with ‘virtualbox’ provider…
==> default: Importing base box ‘zoresvit/centos-7.0’…
==> default: Matching MAC address for NAT networking…
==> default: Checking if box ‘zoresvit/centos-7.0’ is up to date…
==> default: Setting the name of the VM: ansible-000dd0c7684e44d25776288b71d594e00234a0ad_default_1418570825018_9435
==> default: Clearing any previously set network interfaces…
==> default: Preparing network interfaces based on configuration…
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports…
default: 22 => 2222 (adapter 1)
==> default: Running ‘pre-boot’ VM customizations…
==> default: Booting VM…
==> default: Waiting for machine to boot. This may take a few minutes…
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying…
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM…
==> default: Setting hostname…
==> default: Configuring and enabling network interfaces…
==> default: Mounting shared folders…
default: /share => /Users/russ/Desktop/ansible/share
default: /vagrant => /Users/russ/Desktop/ansible
==> default: Running provisioner: ansible…

PLAY [all] ********************************************************************

GATHERING FACTS *************************************************************** 
ok: [default]

TASK: [common | install ntp] ************************************************** 
changed: [default]

TASK: [common | check ntpd service is stopped] ******************************** 
changed: [default]

TASK: [common | ntpdate] ****************************************************** 
skipping: [default]

TASK: [common | ntp config file] ********************************************** 
changed: [default]

TASK: [common | start ntpd service] ******************************************* 
changed: [default]

NOTIFIED: [common | restart ntpd] ********************************************* 
changed: [default]

PLAY RECAP ******************************************************************** 
default : ok=6 changed=5 unreachable=0 failed=0

… like all first steps using a new orchestration tool I had installed & configured NTPD.

The syntax itself isn’t too different from Puppet so it was easy to get the gist of what was going on. Once I had gotten my head around the basics I started on creating a Playbookexternal link which configures a VPC and launches an Elastic Load Balancer , here is the current work in progress …

- name: install ntp
  yum: pkg=ntp state=installed
- name: check ntpd service is stopped
  shell: "service ntpd status | grep -q stopped; echo $?"
  register: result
- name: ntpdate
  command: ntpdate 0.uk.pool.ntp.org
  when: result.stdout == "0"
- name: ntp config file
  template: src=roles/common/templates/ntp.conf.j2 dest=/etc/ntp.conf owner=root group=root mode=0644
  notify:
    - restart ntpd
- name: start ntpd service
  service: name=ntpd state=started enabled=yes

Once I have everything working as expected I will post an update.