running ansible at scale atl slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) jinja2...

56
Running Ansible at Scale Ajay Chenampara Sr. Specialist Solutions Architect North American Public Sector Sam Doran Senior Software Engineer Ansible Core

Upload: others

Post on 16-Jul-2020

29 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Running Ansible at ScaleAjay ChenamparaSr. Specialist Solutions ArchitectNorth American Public Sector

Sam DoranSenior Software EngineerAnsible Core

Page 2: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Agenda● How Ansible grows

● Workflow and content

● Scaling Ansible Core

● Scaling further with Ansible Tower

Page 3: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

How Ansible Grows🌱

Page 4: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)
Page 5: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

ansible (2.7.13)boto3 (1.9.202)pycrypto (2.6.1)Jinja2 (2.9.6)

ansible (2.8.0)boto3 (1.9.202)pycrypto (2.6.1)Jinja2 (2.3)

ansible (2.8.5)boto3 (1.2.4)Jinja2 (2.3)

Page 6: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)
Page 7: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

FreeImages.com/therysma

Page 8: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Workflow and Content

Page 9: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Git

Production

Test

Master

Feature/Bug Fix

Page 10: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

Page 11: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

} Play Group VarsWork consistently between command line and Ansible Tower

Page 12: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

Static, dynamic, or both

Page 13: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

Custom modules available across all roles

Page 14: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

Roles from external repositories}

Page 15: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

# Example requirements.yml- samdoran.java- samdoran.redhat_subscription

- src: ssh://[email protected]:8989/ansible-role-apache.git name: apache scm: git version: develop

- src: ssh://[email protected]:8989/ansible-role-users.git name: users scm: git

Page 16: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

Ignore roles and other files

Page 17: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

*.retry.vagrant*.zip

# Ignore everything in roles/ except requirements.ymlroles/*!roles/requirements.yml

Page 18: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

Main Ansible configuration

Page 19: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Repository Structure

ansible├── group_vars│ ├── all.yml│ ├── dev.yml│ ├── prod.yml│ └── web.yml├── inventory├── library├── roles│ └── requirements.yml├── .gitignore├── ansible.cfg├── apache.yml├── deploy-app.yml└── install-updates.yml

PlaybooksAdjacent to group_vars and library}

Page 20: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Another Repository Structure├── inventory├── library├── playbooks│ ├── group_vars│ │ ├── all.yml│ │ ├── dev.yml│ │ ├── prod.yml│ │ └── web.yml│ ├── library -> ../library│ ├── roles -> ../roles│ ├── apache.yml│ ├── deploy-app.yml│ └── install-updates.yml├── roles│ └── requirements.yml├── .gitignore└── ansible.cfg

Page 21: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Another Repository Structure├── inventory├── library├── playbooks│ ├── group_vars│ │ ├── all.yml│ │ ├── dev.yml│ │ ├── prod.yml│ │ └── web.yml│ ├── library -> ../library│ ├── roles -> ../roles│ ├── apache.yml│ ├── deploy-app.yml│ └── install-updates.yml├── roles│ └── requirements.yml├── .gitignore└── ansible.cfg

Symlinks keep library and roles adjacent to playbooks}

Page 22: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Another Repository Structure├── inventory├── library├── playbooks│ ├── group_vars│ │ ├── all.yml│ │ ├── dev.yml│ │ ├── prod.yml│ │ └── web.yml│ ├── library -> ../library│ ├── roles -> ../roles│ ├── apache.yml│ ├── deploy-app.yml│ └── install-updates.yml├── roles│ └── requirements.yml├── .gitignore└── ansible.cfg

Page 23: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Scaling Ansible Core

Page 24: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

How Ansible Works

NETWORKINGDEVICES

LINUX/WINDOWSHOSTS

Module code is copied to the managed node, executed, then removed

Module code is executed locally on the control node

Page 25: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

2.6: memory ballooning (#35921)

2.7: deepdish copy (#44337) 🍕

2.8: consolidate handler tracking (#49338)

2.9: Perfy McPerfton (#58400)

Use the Latest Version

Page 26: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Facts

Page 27: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

"Smart" gathering means only gather facts if needed

Gathering all facts can consume a lot of memory and cause CPU contention with a higher fork count — use min

Several cache plugins available:

Just the Facts

● jsonfile● memcached● mongodb

● pickle● redis● yaml

Page 28: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Just the Facts

[default]gathering = smartgather_subset = minfact_caching = jsonfilefact_caching_connection = ~/.ansible/cachefact_caching_timeout = 3600

Page 29: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Forks🍴

Page 30: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Forks

Default is 5 (very conservative)

More forks means more parallel connections to hosts

Too many forks will overburden your system due to context switching and large number of facts in memory

Page 31: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Forks

General guidelines:

● 5-25 forks on a developer workstation or laptop

● 25-50 on a dedicated server

Page 32: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

[default]gathering = smartgather_subset = minfact_caching = jsonfilefact_caching_connection = ~/.ansible/cachefact_caching_timeout = 3600forks = 30

Forks

Page 33: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Connection

Page 34: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Connection

Enable pipelining (!requiretty needed on hosts)

Increase ControlPersist timeout (default 60s)

Use scp (default is sftp)

Page 35: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Connection

[default]gathering = smartgather_subset = minfact_caching = jsonfilefact_caching_connection = ~/.ansible/cachefact_caching_timeout = 3600forks = 50

[ssh_connection]pipelining = Truescp_if_ssh = Truessh_args = -C -o ControlMaster=auto -o ControlPersist=15m

Page 36: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Grab Bag

Python 3 performs better that Python 2

Bastion hosts will slow things down

Passwordless ssh authentication will speed things up

Remote shell profile can slow things down

Using native Jinja types can speed things up (DEFAULT_JINJA2_NATIVE)

Page 37: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Scaling Further withAnsible Tower

Page 38: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Challenges to scaling Ansible

Secure credential storage

Scheduler

API

Detailed auditing

Page 39: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Challenges to scaling Ansible

Consistent Ansible version

Python libraries and module dependencies

Page 40: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)
Page 41: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Capacity and Jobs

Page 42: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Ansible Tower Capacity Determination

Page 43: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Memory Relative Capacity:

Number of Forks = (total_mem - 2GB)/mem_per_fork

Ansible Tower Capacity Determination

mem_per_fork = 100 by default

Page 44: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

CPU Relative Capacity:

Number of Forks = cpus * forks_per_cpu

Ansible Tower Capacity Determination

forks_per_cpu = 4 by default

Page 45: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Running Jobs

Page 46: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Job Slicing

● Slices inventory into a number of chunks, which are then used to run smaller job slices.

● Ideal for workloads where the tasks run on each host can be run independent of other hosts

Page 47: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Fact Caching

Page 48: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Fact Caching

● Cache once, consume over and over

● Schedule a job to gather facts

Page 49: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Smart Inventory

Page 50: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Clustering

Page 51: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Clustering

Bigger is not always better

Page 52: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Instance Groups: Setup and Use

A set of cluster nodes dedicated for a particular purpose

● Instances are shared among teams, groups, and organizations

● Each instance group has its own job queue, and any node in the group can take jobs off of that queue

● Jobs can be assigned to an instance group inthree ways:○ By the organization○ By the inventory○ By the individual job template

Page 53: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Instance Groups[tower]tower1.happy.companytower2.happy.companytower3.happy.company

[instance_group_network]net1.happy.companynet2.happy.companynet3.happy.companytower1.happy.company

[instance_group_compute]compute1.happy.companytower1.happy.companytower2.happy.companytower3.happy.company

[instance_group_prod]prodtower.happy.companytower1.happy.companytower2.happy.companytower3.happy.company

Page 54: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Isolated Nodes

A headless Ansible Tower node that can be used for local execution capacity, either in a constrained networking environment sor in a remote data center

Only requirement is SSH connectivity to the central Tower cluster

Page 55: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Isolated Nodes: Setup and Use

[isolated_group_fortress]solitude1.fortresssolitude2.fortress

[isolated_group_fortress:vars]controller=tower

[tower]chicago1.home.officechicago2.home.officechicago3.home.office

[isolated_group_nc]cary.remote.office controller=tower

[isolated_group_il]bridgeview.remote.office controller=tower

[isolated_group_nj]piscataway.remote.office controller=tower

[isolated_group_ut]sandy.remote.office controller=tower

Instance group that manages tasks

Page 56: Running Ansible at Scale ATL Slide... · ansible (2.7.13) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.9.6) ansible (2.8.0) boto3 (1.9.202) pycrypto (2.6.1) Jinja2 (2.3) ansible (2.8.5)

Thank youAjay ChenamparaSr. Specialist Solutions ArchitectNorth American Public Sector

Sam DoranSenior Software EngineerAnsible Core