SlideShare a Scribd company logo
1 of 54
Infrastructure Automation or how
you can stop worrying and
love Ansible
I am Arthur Freyman
You can find me at golovast@gmail.com
http://www.mindend.com
Intro
◉5-6 engineers on the team
◉70+ roles
◉50+ playbooks
◉Few thousand servers
◉Diverse ecosystem of apps
Intro
Context
◉TMTOWTDI - There is more than one way to
do it
◉Figure out what works for your team
Goals
◉Quality
◉Rapid Iteration - move fast
◉Safe – move fast and break things
Goals
◉No hands – infrastructure as code
◉Team can work together on a shared
codebase
Style Guide
◉Helps with code reviews
◉Helps the team work together
◉Testable (sometimes)
◉Convention over configuration
Style Guide
◉Role & Playbook namespacing
• All roles are - r-RoleName
• All playbooks are - pb-PlaybookName
• Playbook Name == App Repo Name
Style Guide
◉ All variables are prefixed with the role
name*
◉ Default variables go into vars/ and are all
UPPERCASE
◉ Overridable variables go into default/main
and are all lower case
* Avoids collisions
Style Guide
◉ Prefer to leave overridable role variables
unset. “Explicit is better than implicit”
◉ Clear examples in comments/readme or a
sample file
Style Guide
◉ Minimize or eliminate hard coded values
• Users
• Paths
• etc
Style Guide
◉ Avoid giant tasks files
◉ Split them along some function
Style Guide
◉ Lots of comments – especially when doing
weird things
◉ Use tags liberally and explain in the readme
Style Guide
◉ Logical boundaries
◉ Don’t bundle things together, use separate
roles
Style Guide
◉ All roles are started with ansible-galaxy init
◉ test.yml in test/ must be runnable
Special cases aren’t
special enough to break
the rules
Follow Zen of Python (PEP 20)
Although practicality
beats purity
Versioning and dependencies
◉ All roles and playbooks in separate repos
• Helps with versioning
• Helps with feature branch development
• Enables strong version locks
Versioning and dependencies
◉ Two places to do versioning
• requirements.yml
• Role metadata
• Git submodules might be interesting to explore
◉Decided to handle dependency at playbook
level
Versioning and dependencies
◉ Ansible-galaxy install –r requirements.yml
# from github installing to a relative path
- src: git+ssh://git@github.com/Company/r-role
path: roles/
version: 0.0.1
name: r-role
Roles
◉ Pick and choose how much work to put in a
role
◉ Some are real simple – generics
◉ Others can be complex with edge cases
Roles
◉ Unix philosophy – do one thing and do it
well
◉ DRY
◉ Keep things modular
Roles
◉ Some java app
• Bad: single role for configuring system, installing pre-
reqs and pushing the app
• Good:
• Role/jvm
• Role/tomcat
• Role/users
• Role/sys_config
• Role/code_deploy
Roles
◉ Roles from Ansible Galaxy
Roles
◉ Ansible Galaxy
• Hit or miss
• Sometimes a decent start
• Usually need work
Roles
◉ Template logic
• Sometimes necessary
• Try to avoid very complex things
• Debugging is a PITA
Roles
◉ Template logic
{% for k,v in item.server.locations.items() %}
{% for x in v %}
{% for d, e in x.items() %}
{% if d == 'path' %}
location {{ e }} {
{% else %}
{{ d }} {{ e }};
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
Playbooks
◉ Add task timings
• Build-in in ansible 2.0 (callback_whitelist =
profile_tasks)
• https://github.com/jlafon/ansible-profile
Playbooks
◉ Have a task to dump all variables
https://coderwall.com/p/13lh6w/dump-all-variables
Playbooks
◉ Have a task to dump all variables
{{ vars | to_nice_json }}
{{ environment | to_nice_json }}
{{ group_names | to_nice_json }}
{{ groups | to_nice_json }}
{{ hostvars | to_nice_json }}
Deployments
◉ Capistrano became Ansistrano
◉ Started with deploying the entire playbook
per app
Deployments
◉ Capistrano became Ansistrano
◉ Started with deploying the entire playbook
per app – dynamic inventory
Deployments
◉ Evolved to a deploy tag method
◉ Optimized for speed
◉ Added functionality like rollback
Deployments
◉ Eventually moved to an AMI-style deploy
◉ Ansible still configured images
◉Used a layer-style method
AMI Deploys
Testing
◉ Roles are tested like app code
◉ Use a build system (Jenkins)
Testing
◉Syntax check
- Ansible-playbook --syntax-check --list tasks
◉Ansible-lint
(https://github.com/willthames/ansible-lint)
Testing
◉Assert module
◉Serverspec, inspec, rolespec, testinfra,
goss, ansible_spec, test-kitchen
◉Test playbooks
Testing
◉Auto test roles on repo push
◉Bumpversion
(https://github.com/peritus/bumpversion)
Testing
◉Test your expectations
• Files
• Services
• Packages
• Users
• Multiple variations (different sets of variables)
Testing
◉Use native tools for template validations
vars:
- validate_conf: /usr/sbin/named-checkconf
tasks:
- name: install named.conf
action: template src=named.conf.j2 dest=/etc/named.conf
validate = ‘{{ validate_conf }} %s’
Testing
◉Other validators
• /usr/bin/nginx –t –c nginx.conf
• apachectl configtest
• /usr/sbin/sshd –t
• /usr/sbin/squid –k check
• /usr/libexec/mysqld --defaults-file=test-my.cnf –verbose
–help 1 >/dev/null
• syslogd –f /etc/rsyslog.testing.conf -d
Testing with Testinfra
def nginx_present(Package):
nginx = Package(“nginx”)
assert nginx.is_installed
def nginx_running_enabled(Service):
nginx = Service(“nginx”)
assert nginx.is_running
assert nginx.is_enabled
Testing with Serverspec
describe user(‘nginx’) do
it { should exist }
it { should belong_to_group ‘nginx’}
end
describe process(‘nginx’) do
it { should be_running }
its(:user) { should eq ‘nginx’ }
end
describe port (80) do
it { should be_listening }
end
Testing with Serverspec (cont)
describe “Server Configuration” do
it ‘should response with right status code’ do
uri = URI(‘http://localhost’)
http = Net::HTTP.new(uri.host)
request = Net::HTTP::Get.new(uri)
response = http.request(request)
expect(response.code).to eq(‘200’)
end
end
Testing with Goss
◉New tool – written in go
◉Builds yaml files (sort of automatically)
◉`goss autoadd nginx`
Testing with Goss
package:
nginx:
installed: true
versions:
- 1.4.1-3ubuntu1.3
nginx = Package(“nginx”)
assert nginx.is_installed
service:
nginx:
enabled:true
running:false
Tips & Tricks
Some things I’d do differently & cons
Tips & Tricks
◉Tests weren’t always there or awesome
◉Testing on prod:
Tips & Tricks
◉Careful with variable registration. This
doesn’t work:
- shell: /usr/bin/foo
register: foo_result
- shell: /usr/bin/bar
when: foo_result
Tips & Tricks
◉Beware of loops – not very powerful
◉Two sided coin with:
• with_items
• with_nested
• with_dict
• with_indexed_items (gets array position)
Tips & Tricks
◉Lookup plugin – awesome (Ansible 2.0)
• ini
• csv
• dns
Tips & Tricks
◉Versioning slows down workflow
◉Maybe should have versioned Playbooks
too
Tips & Tricks
◉Clusters will make you break rules
Any questions ?
The end

More Related Content

What's hot

Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansibleKhizer Naeem
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleCoreStack
 
Ansible for beginners ...?
Ansible for beginners ...?Ansible for beginners ...?
Ansible for beginners ...?shirou wakayama
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to AnsibleCédric Delgehier
 
Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Alex S
 
Hacking ansible
Hacking ansibleHacking ansible
Hacking ansiblebcoca
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationJohn Lynch
 
Jenkins and ansible reference
Jenkins and ansible referenceJenkins and ansible reference
Jenkins and ansible referencelaonap166
 
Ansible tips & tricks
Ansible tips & tricksAnsible tips & tricks
Ansible tips & tricksbcoca
 
Network Automation: Ansible 102
Network Automation: Ansible 102Network Automation: Ansible 102
Network Automation: Ansible 102APNIC
 
Ansible Meetup Hamburg / Quickstart
Ansible Meetup Hamburg / QuickstartAnsible Meetup Hamburg / Quickstart
Ansible Meetup Hamburg / QuickstartHenry Stamerjohann
 
More tips n tricks
More tips n tricksMore tips n tricks
More tips n tricksbcoca
 
Getting Started with Ansible
Getting Started with AnsibleGetting Started with Ansible
Getting Started with AnsibleAhmed AbouZaid
 
Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2Brian Schott
 
Ansible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife OrchestrationAnsible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife Orchestrationbcoca
 
Getting started with Ansible
Getting started with AnsibleGetting started with Ansible
Getting started with AnsibleIvan Serdyuk
 
Ansible basics workshop
Ansible basics workshopAnsible basics workshop
Ansible basics workshopDavid Karban
 

What's hot (20)

Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansible
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Ansible for beginners ...?
Ansible for beginners ...?Ansible for beginners ...?
Ansible for beginners ...?
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible
 
Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015
 
Hacking ansible
Hacking ansibleHacking ansible
Hacking ansible
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Jenkins and ansible reference
Jenkins and ansible referenceJenkins and ansible reference
Jenkins and ansible reference
 
Ansible tips & tricks
Ansible tips & tricksAnsible tips & tricks
Ansible tips & tricks
 
Network Automation: Ansible 102
Network Automation: Ansible 102Network Automation: Ansible 102
Network Automation: Ansible 102
 
Ansible intro
Ansible introAnsible intro
Ansible intro
 
Configuration Management in Ansible
Configuration Management in Ansible Configuration Management in Ansible
Configuration Management in Ansible
 
Introducing Ansible
Introducing AnsibleIntroducing Ansible
Introducing Ansible
 
Ansible Meetup Hamburg / Quickstart
Ansible Meetup Hamburg / QuickstartAnsible Meetup Hamburg / Quickstart
Ansible Meetup Hamburg / Quickstart
 
More tips n tricks
More tips n tricksMore tips n tricks
More tips n tricks
 
Getting Started with Ansible
Getting Started with AnsibleGetting Started with Ansible
Getting Started with Ansible
 
Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2
 
Ansible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife OrchestrationAnsible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife Orchestration
 
Getting started with Ansible
Getting started with AnsibleGetting started with Ansible
Getting started with Ansible
 
Ansible basics workshop
Ansible basics workshopAnsible basics workshop
Ansible basics workshop
 

Viewers also liked

Puppet module anti patterns
Puppet module anti patternsPuppet module anti patterns
Puppet module anti patternsPeter Souter
 
Little Puppet Tools To Make Your Life Better
Little Puppet Tools To Make Your Life BetterLittle Puppet Tools To Make Your Life Better
Little Puppet Tools To Make Your Life BetterPeter Souter
 
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...Peter Souter
 
CI/CD Using Ansible and Jenkins for Infrastructure
CI/CD Using Ansible and Jenkins for InfrastructureCI/CD Using Ansible and Jenkins for Infrastructure
CI/CD Using Ansible and Jenkins for InfrastructureFaisal Shaikh
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationSuresh Kumar
 
Knee deep in the undef - Tales from refactoring old Puppet codebases
Knee deep in the undef  - Tales from refactoring old Puppet codebasesKnee deep in the undef  - Tales from refactoring old Puppet codebases
Knee deep in the undef - Tales from refactoring old Puppet codebasesPeter Souter
 
Testing servers like software
Testing servers like softwareTesting servers like software
Testing servers like softwarePeter Souter
 
Compliance and auditing with Puppet
Compliance and auditing with PuppetCompliance and auditing with Puppet
Compliance and auditing with PuppetPeter Souter
 
梯田上的音符 哈尼
梯田上的音符 哈尼梯田上的音符 哈尼
梯田上的音符 哈尼honan4108
 
Первая помощь
Первая помощьПервая помощь
Первая помощьelasyschool
 
Xkr072015-myjurnal.ru
Xkr072015-myjurnal.ruXkr072015-myjurnal.ru
Xkr072015-myjurnal.ruVasya Pupkin
 
九個月的紐西蘭
九個月的紐西蘭九個月的紐西蘭
九個月的紐西蘭honan4108
 
Experience Design + The Digital Agency (Phizzpop version)
Experience Design + The Digital Agency (Phizzpop version)Experience Design + The Digital Agency (Phizzpop version)
Experience Design + The Digital Agency (Phizzpop version)David Armano
 
Je Suis Charlie
Je Suis CharlieJe Suis Charlie
Je Suis Charlieguimera
 
7 Tips for Design Teams Collaborating Remotely
7 Tips for Design Teams Collaborating Remotely7 Tips for Design Teams Collaborating Remotely
7 Tips for Design Teams Collaborating RemotelyFramebench
 

Viewers also liked (20)

Puppet module anti patterns
Puppet module anti patternsPuppet module anti patterns
Puppet module anti patterns
 
Little Puppet Tools To Make Your Life Better
Little Puppet Tools To Make Your Life BetterLittle Puppet Tools To Make Your Life Better
Little Puppet Tools To Make Your Life Better
 
Lock it down
Lock it downLock it down
Lock it down
 
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
 
Ansible et Jenkins
Ansible et JenkinsAnsible et Jenkins
Ansible et Jenkins
 
CI/CD Using Ansible and Jenkins for Infrastructure
CI/CD Using Ansible and Jenkins for InfrastructureCI/CD Using Ansible and Jenkins for Infrastructure
CI/CD Using Ansible and Jenkins for Infrastructure
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Knee deep in the undef - Tales from refactoring old Puppet codebases
Knee deep in the undef  - Tales from refactoring old Puppet codebasesKnee deep in the undef  - Tales from refactoring old Puppet codebases
Knee deep in the undef - Tales from refactoring old Puppet codebases
 
Testing servers like software
Testing servers like softwareTesting servers like software
Testing servers like software
 
Compliance and auditing with Puppet
Compliance and auditing with PuppetCompliance and auditing with Puppet
Compliance and auditing with Puppet
 
梯田上的音符 哈尼
梯田上的音符 哈尼梯田上的音符 哈尼
梯田上的音符 哈尼
 
EPA DROE Email 6.30.03
EPA DROE Email 6.30.03EPA DROE Email 6.30.03
EPA DROE Email 6.30.03
 
Первая помощь
Первая помощьПервая помощь
Первая помощь
 
Xkr072015-myjurnal.ru
Xkr072015-myjurnal.ruXkr072015-myjurnal.ru
Xkr072015-myjurnal.ru
 
九個月的紐西蘭
九個月的紐西蘭九個月的紐西蘭
九個月的紐西蘭
 
Experience Design + The Digital Agency (Phizzpop version)
Experience Design + The Digital Agency (Phizzpop version)Experience Design + The Digital Agency (Phizzpop version)
Experience Design + The Digital Agency (Phizzpop version)
 
Je Suis Charlie
Je Suis CharlieJe Suis Charlie
Je Suis Charlie
 
Zaragoza turismo 237
Zaragoza turismo 237Zaragoza turismo 237
Zaragoza turismo 237
 
7 Tips for Design Teams Collaborating Remotely
7 Tips for Design Teams Collaborating Remotely7 Tips for Design Teams Collaborating Remotely
7 Tips for Design Teams Collaborating Remotely
 
Zaragoza turismo 211
Zaragoza turismo 211Zaragoza turismo 211
Zaragoza turismo 211
 

Similar to Ansible presentation

Automated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. AnsibleAutomated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. AnsibleAlberto Molina Coballes
 
Buildr - build like you code
Buildr -  build like you codeBuildr -  build like you code
Buildr - build like you codeIzzet Mustafaiev
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)DECK36
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoveragemlilley
 
Unit testing presentation
Unit testing presentationUnit testing presentation
Unit testing presentationArthur Freyman
 
Introduction to Puppet Scripting
Introduction to Puppet ScriptingIntroduction to Puppet Scripting
Introduction to Puppet ScriptingAchieve Internet
 
Adobe Source 2016 - Styleguides and AEM
Adobe Source 2016 - Styleguides and AEMAdobe Source 2016 - Styleguides and AEM
Adobe Source 2016 - Styleguides and AEMMichael Leroy
 
Java - A broad introduction
Java - A broad introductionJava - A broad introduction
Java - A broad introductionBirol Efe
 
DCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityDCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityGeoff Harcourt
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...SQALab
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsGR8Conf
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesHiroshi SHIBATA
 
Beginning Java for .NET developers
Beginning Java for .NET developersBeginning Java for .NET developers
Beginning Java for .NET developersAndrei Rinea
 
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014Miguel Zuniga
 
Power on, Powershell
Power on, PowershellPower on, Powershell
Power on, PowershellRoo7break
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
Puppetizing Your Organization
Puppetizing Your OrganizationPuppetizing Your Organization
Puppetizing Your OrganizationRobert Nelson
 
Giving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSGiving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSMadhava Jay
 

Similar to Ansible presentation (20)

Automated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. AnsibleAutomated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. Ansible
 
Buildr - build like you code
Buildr -  build like you codeBuildr -  build like you code
Buildr - build like you code
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
 
Unit testing presentation
Unit testing presentationUnit testing presentation
Unit testing presentation
 
Introduction to Puppet Scripting
Introduction to Puppet ScriptingIntroduction to Puppet Scripting
Introduction to Puppet Scripting
 
Adobe Source 2016 - Styleguides and AEM
Adobe Source 2016 - Styleguides and AEMAdobe Source 2016 - Styleguides and AEM
Adobe Source 2016 - Styleguides and AEM
 
Java - A broad introduction
Java - A broad introductionJava - A broad introduction
Java - A broad introduction
 
DCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production ParityDCRUG: Achieving Development-Production Parity
DCRUG: Achieving Development-Production Parity
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 Minutes
 
Ansible - A 'crowd' introduction
Ansible - A 'crowd' introductionAnsible - A 'crowd' introduction
Ansible - A 'crowd' introduction
 
Beginning Java for .NET developers
Beginning Java for .NET developersBeginning Java for .NET developers
Beginning Java for .NET developers
 
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
 
Power on, Powershell
Power on, PowershellPower on, Powershell
Power on, Powershell
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Puppetizing Your Organization
Puppetizing Your OrganizationPuppetizing Your Organization
Puppetizing Your Organization
 
Giving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSGiving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOS
 
Continuous feature-development
Continuous feature-developmentContinuous feature-development
Continuous feature-development
 

Recently uploaded

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Recently uploaded (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

Ansible presentation

Editor's Notes

  1. Talk about background. Worked with chef and was burned by it. Some work with puppet, go as far back as shell scripts. We all know that they sucks. Mention that this is not an introduction talk. Assumes that you already know a bunch about ansible.
  2. Mention GumGum’s approach. This is a different one. Talk about how the size of the team will impact your choices.
  3. Mention GumGum’s approach. This is a different one. Talk about how the size of the team will impact your choices.
  4. Mention GumGum’s approach. This is a different one. Talk about how the size of the team will impact your choices.
  5. Easier to debug the roles. Helps someone pick up the role and just work on it when they know what to expect.
  6. This isn’t that important. But helps perhaps with other tooling that you might have around. Easy discoverability for glue code.
  7. Easier to debug the roles. Helps someone pick up the role and just work on it when they know what to expect.
  8. This is somewhat debatable. Wanted to be explicit about what you set at the playbook level and remove surprises. Depends on the audience and what you expect them to control and the level of abstraction you’re providing.
  9. Split them up by function. Easier to troubleshoot and read.
  10. You get proliferation of roles and sometimes it’s tempting, but it will help prevent mistakes later. Unless something has no reason to exist by itself, try not to bundle it together. Example might be passenger and RVM, java and say elastic search.
  11. You get proliferation of roles and sometimes it’s tempting, but it will help prevent mistakes later. Unless something has no reason to exist by itself, try not to bundle it together. Example might be passenger and RVM, java and say elastic search.
  12. Sometimes things just won’t fit the style guide. Don’t try to fit a square peg into a round hole. Keep in mind that a style guide is a living document. Though try to keep it additive rather than wholesale changes. It only exists to help you.
  13. Talk about this in detail. One of the better decisions we’ve made. When you lock to a particular role version, you know that it’s set. Especially when you have multiple dudes working on the same repo.
  14. Subject of much debate. Burned by chef. No perfect answer there. Explicit readme in the role and checks for pre-reqs to protect the user.
  15. Subject of much debate. Burned by chef.
  16. Can handle complicated scenarios in some roles. Generics are fine. Maybe it’s just a placeholder for something later. You could just be installing a package and doing a handful of things.
  17. Can handle complicated scenarios in some roles. Generics are fine. Maybe it’s just a placeholder for something later. You could just be installing a package and doing a handful of things.
  18. Can handle complicated scenarios in some roles. Generics are fine. Maybe it’s just a placeholder for something later. You could just be installing a package and doing a handful of things.
  19. This is generally the most powerful tool you have in ansible, short of writing modules. Pain in the ass to debug
  20. This is generally the most powerful tool you have in ansible, short of writing modules. Pain in the ass to debug
  21. I don't want to to necessarily get too much into it. It's a bit orthogonal to ansible, plus this could be a whole topic in itself. 
  22. I don't want to to necessarily get too much into it. It's a bit orthogonal to ansible, plus this could be a whole topic in itself. That wasn't efficient in a lot of ways, but at least made sure things are indempotent. 
  23. worked pretty well. 
  24. worked pretty well. 
  25. worked pretty well. 
  26. Larger team and if complex system, it allows to work on the project together in an easier way. I may not know what the other guy is doing or maybe he left. I can feel more comfortable modifying something if there is a good test for it. We all forget shit. It helps to modify things later. Be considerate of future us who will have to maintain and debug this code months or even years down the line. Somewhat impress the developer organizations. Show that you follow similar practices and pay attention to code quality.
  27. Linter is great. You can add your own rules there to comply with the style guide.
  28. Many different ways of doing it. Lint is a form of a unit/functional test. Syntax checking is always helpful. Writing test playbooks is a good thing.
  29. Sometimes I wished we enforced that better. But tradeoffs have to be made.
  30. Sometimes I wished we enforced that better. But tradeoffs have to be made.
  31. They aren’t that powerful.
  32. They aren’t that powerful.
  33. Takes a little while to get used to it. When multiple people are working on a role. Doesn’t happen too frequently, but enough times to make it annoying. More or less typical of the feature branch workflow.