Skip to main content

Ansible tips and tricks

Ansible is a server management tool that gets installed on a single Linux hosts, then uses playbooks to communicate out via SSH to servers and run commands.

Installation:

This will install Ansible on a CentOS host, then use a custom hosts file to ping all the hosts using a custom login key:

> yum install ansible
> ansible --version
> ansible all -i ~/.ansible/hosts -m ping --user=centos --private-key ~/tests.pem

Hosts:

Place in /etc/ansible/hosts or in a custom file:

[name]
ip1
ip2
ip3

Running a playbook:

This example will run a playbook with a custom login key and custom host file:

> ansible-playbook -v -i ~/.ansible/hosts --private-key ~/tests.pem ~/git/scripts/centos-initial.playbook --limit prod
> play centos-initial.playbook --limit prod

Run on a single node: -i ip.

Provisioning a full load balanced, auto-scaling environment:

  • Create certificate for elb.dendory.net, *.test.dendory.net using Certficiate Manager in AWS console.
  • Create a load balancer through the AWS console, assign the correct subnets, add 80 and 443 listener.
  • Create a DNS entry, set it to ALIAS to the load balancer’s DNS name.

Example run, using both ansible and aws.py available from my scripts folder:

> ~/git/scripts/aws.py create-vm test-% small-centos

* Creating instance...
Instance ID: i-782c5960
Private IP: 10.0.0.2

> ~/git/scripts/aws.py create-vm test-% small-centos
* Creating instance...
Instance ID: i-b92c59a1
Private IP: 10.0.0.3

> ~/git/scripts/aws.py dump-inventory ~/.ansible/hosts test

> play ~/git/scripts/centos-initial.playbook

> play ~/git/scripts/centos-website.playbook

> play ~/git/scripts/centos-healthstone.playbook

> ~/git/scripts/aws.py list-load-balancers
test-lb (test-lb-572946456.us-west-2.elb.amazonaws.com): No instance attached

> ~/git/scripts/aws.py attach-balanced-vm test-lb i-782c5960

> ~/git/scripts/aws.py attach-balanced-vm test-lb i-b92c59a1

> ~/git/scripts/aws.py list-load-balancers
test-lb (test-lb-572946456.us-west-2.elb.amazonaws.com): [{'InstanceId': 'i-782c5960'}, {'InstanceId': 'i-b92c59a1'}]

Inventory:

Here is a sample environment for the playbooks:

[test:vars]
env=test
dashboard=https://mydomain.com/healthstone
template=linux
rootpwd=Test1234
replipwd=GDFgdgwerG436346
syspwd=htreERer75376734
dbname=tests
master=172.30.1.21
ansible_user=centos

[prod]
1.2.3.4

Windows:

Install winrm module:

> pip install pywinrm

Add to inventory:

ansible_user=Administrator
ansible_password=12345
ansible_port=5985
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

Enable wnrm on the host:

$admin = [adsi]("WinNT://./administrator, user")
$admin.PSBase.Invoke("SetPassword", "12345")
Invoke-Expression ((New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1'))

Test connection:

> ansible all -i ~/.ansible/hosts -m win_ping