Ansible 101 - Essentials
Description
Course Overview
Ansible is a powerful IT automation engine used to accelerate DevOps initiatives. It’s an open-source tool that executes repetitive network and system admin tasks. Ansible is used to bring structure and consistency to system deployments, implementations, and changes.
Course Objectives
- Overview of Ansible and critical modules
- AI LLM prompt engineering for generating Ansible solutions
- Ansible collections for content delivery
- Building roles for code reuse
- YAML formatting
- Playbook construction and order of execution
- Jinja2 templating
- Static and Dynamic inventory management
- Credential Management and Encryption with Vault
- Finding solutions on Ansible Galaxy
- Version controlling code with Git
Who Should Attend?
- DevOps Engineers
- System and Cloud Administrators
- Network Engineers and Developers
- Python Developers
Course Prerequisites
There are no prerequisites for this course.
Agenda
Ansible Introduction
- Ansible definition
- Exploring modules
- Building a task
- Places to define Ansible vars
- hosts aka \"Inventory\"
- Creating a A play
- Looking at the “handler”
- Running a playbook
- Introduction to YAML
- Requirements for connecting to remote hosts
Installation
- Configuration requirements on the control machine
- Python requirements on the host
- Using ansible raw to install Python
Ansible Static Inventory
- Defining Hosts and Groups
- Host and Group variables
- Groups of Groups
- Default Groups
Ansible Tower / AWX
- What is Ansible Tower and AWX
- Why you should consider using Jenkins as a replacement for Ansible Tower
- Pushing and pulling playbooks from GitHub
Roles and Ansible Galaxy
- Why we need Ansible Roles
- Role Directory Structure
- Using Roles
- Role default variables
- Converting a Playbook to a Role
- Exploring Ansible Galaxy
- Running a role from Ansible Galaxy
YAML
- YAML Gotchas
- YAML Dictionary
- YAML list
- YAML list of dictionaries
- YAML Alternate format
- Relationship to JSON
Ansible Ad hoc commands
- Ad hoc command syntax
- Parallel Shell commands
- Managing packages
- Managing users and groups
- Gathering facts
- ad hoc cheat sheet
Writing a Simple Playbook
- Elements of a well written playbook
- A well-written Ansible play
- Using include files for tasks
- A well-written ansible variable file
- A well-written ansible inventory file
Ansible config file and directory structure
- ansible.cfg
- Best practices concerning directory structures and organization
- Host Inventory and ansible_vars
- Introduction to roles
Playbook Best Practices
- Directory Layout
- Use Dynamic Inventory With Clouds
- How to Differentiate Staging vs Production
- Group And Host Variables
- Top Level Playbooks Are Separated By Server Type
Ansible config file and directory structure
- ansible.cfg
- Ansible Inventory
- roles
Server Modules to Know
- Modules documentation
- setup / gather_facts
- copy
- apt / yum / pip
- command / shell
- git
- get_url
- debug
- lineinfile
Jinja2
- What is Jinja2?
- Jinja2 variables
- Jinja2 filters
- Jinja2 tests
- How to use templates
- Review of templates
Conditional and Looping Tasks
- Variables and Loops
- Using Complex Variables in Loop
- Variables and Templates
- Using variables in conditions
- Blocks
- Prompts
- Getting variables from the system
- Setting variables in playbooks
- Registered variables
- Getting variables from the command line
- Where is the best source to derive variables values?
Ansible Network Solutions
- Writing Cisco and Juniper playbooks
- Modules for Cisco
- Exploring Juniper solutions
- Built in Juniper modules
- Role based Juniper modules
- Installing a module from Juniper vendor
- Securing credentials
- Latest version of Ansible
Dynamic Inventory Management
- What is Dynamic Inventory?
- A review of static Inventory Practices
- Using JSON as an Inventory Source
- Using YAML as an Inventory Source
- Pulling Inventory from an API
- AWS EC2 Example
- OpenStack Example
OpenStack and AWS
- Overview of OpenStack
- Understanding the OpenStack client
- What is openstack-sdk
- clouds.yaml
- Installing openstack-sdk
- Using openstack-sdk
- OpenStack modules
- os_network
- os_subnet
- os_router
- os_server
- os_server_action
- os_security_group
- What is boto?
- Installing boto for AWS
- AWS modules
- ec2
- aws_s3_bucket_info
- redshift
Variables and Python
- Jinja Filters for variable manipulation
- Using Python within playbooks for variable manipulation
- Best practices for Variables
- Securing credentials with Ansible Vault
- Encrypting Playbooks with Ansible Vault