Click here to load reader

Ansible for DevOps - mindg.cn | Python Aws DevOps · PDF fileAnsibleforDevOps Serverandconfigurationmanagementforhumans JeffGeerling Thisbookisforsaleat

  • View
    238

  • Download
    1

Embed Size (px)

Text of Ansible for DevOps - mindg.cn | Python Aws DevOps · PDF fileAnsibleforDevOps...

  • Ansible for DevOpsServer and configuration management for humans

    Jeff Geerling

    This book is for sale at http://leanpub.com/ansible-for-devops

    This version was published on 2015-07-24

    ISBN 978-0-9863934-0-2

    This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishingprocess. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools andmany iterations to get reader feedback, pivot until you have the right book and build traction onceyou do.

    2014 - 2015 Jeff Geerling

    http://leanpub.com/ansible-for-devopshttp://leanpub.comhttp://leanpub.com/manifesto

  • Tweet This Book!Please help Jeff Geerling by spreading the word about this book on Twitter!

    The suggested tweet for this book is:

    I just purchased @Ansible4DevOps by @geerlingguy on @leanpub -https://leanpub.com/ansible-for-devops #ansible

    The suggested hashtag for this book is #ansible.

    Find out what other people are saying about the book by clicking on this link to search for thishashtag on Twitter:

    https://twitter.com/search?q=#ansible

    http://twitter.comhttps://twitter.com/search?q=%23ansiblehttps://twitter.com/search?q=%23ansible

  • To my wife and children, and to the many readers who have helped make this book a reality.

    Cover photograph and illustration 2011 Jeff Geerling

    Ansible is a software product distributed under the GNU GPLv3 open source license.

    Editing by Margie Newman and Katherine Geerling.

  • Contents

    Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iWho is this book for? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iTypographic conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iiPlease help improve this book! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iiiAbout the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii

    Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ivIn the beginning, there were sysadmins . . . . . . . . . . . . . . . . . . . . . . . . . . . . ivModern infrastructure management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ivAnsible and Ansible, Inc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vAnsible Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viOther resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi

    Chapter 1 - Getting Started with Ansible . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Ansible and Infrastructure Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    On snowflakes and shell scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Configuration management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    Installing Ansible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Creating a basic inventory file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Running your first Ad-Hoc Ansible command . . . . . . . . . . . . . . . . . . . . . . . . 5Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    Chapter 2 - Local Infrastructure Development: Ansible and Vagrant . . . . . . . . . . . . 7Prototyping and testing with local virtual machines . . . . . . . . . . . . . . . . . . . . . 7Your first local server: Setting up Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Using Ansible with Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Your first Ansible playbook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    Chapter 3 - Ad-Hoc Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Conducting an orchestra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Build infrastructure with Vagrant for testing . . . . . . . . . . . . . . . . . . . . . . . . . 14Inventory file for multiple servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Your first ad-hoc commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

  • CONTENTS

    Discover Ansibles parallel nature . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Learning about your environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Make changes using Ansible modules . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    Configure groups of servers, or individual servers . . . . . . . . . . . . . . . . . . . . . . 22Configure the Application servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Configure the Database servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Make changes to just one server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    Manage users and groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Manage files and directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    Get information about a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Copy a file to the servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Retrieve a file from the servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Create directories and files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Delete directories and files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    Run operations in the background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Update servers asynchronously, monitoring progress . . . . . . . . . . . . . . . . . . 28Fire-and-forget tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Check log files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Manage cron jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Deploy a version-controlled application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Ansibles SSH connection history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    Paramiko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33OpenSSH (default) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Accelerated Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Faster OpenSSH in Ansible 1.5+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    Chapter 4 - Ansible Playbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Power plays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Running Playbooks with ansible-playbook . . . . . . . . . . . . . . . . . . . . . . . . . 40

    Limiting playbooks to particular hosts and groups . . . . . . . . . . . . . . . . . . . . 40Setting user and sudo options with ansible-playbook . . . . . . . . . . . . . . . . . 41Other options for ansible-playbook . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    Real-world playbook: CentOS Node.js app server . . . . . . . . . . . . . . . . . . . . . . . 42Add extra repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Deploy a Node.js app . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Launch a Node.js app . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Node.js app server summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    Real-world playbook: Ubuntu LAMP server with Drupal . . . . . . . . . . . . . . . . . . . 49Include a variables file, and discover pre_tasks and handlers . . . . . . . . . . . . . 49Basic LAMP server setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Configure Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Configure PHP with lineinfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

  • CONTENTS

    Configure MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Install Composer and Drush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Install Drupal with Git and Drush . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Drupal LAMP server summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    Real-world playbook: Ubuntu Apache Tomcat server with Solr . . . . . . . . . . . . . . . 59Include a variables file, and discover pre_tasks and handlers . . . . . . . . . . . . . 60Install Apache Tomcat 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Install Apache Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Apache Solr server summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    Chapter 5 - Ansible Playbooks - Beyond the Basics . . . . . . . . . . . . . . . . . . . . . . 66Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Environment variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    Per-play environment variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Variabl