ebook img

Ansible for DevOps PDF

2020·9.12 MB·english
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Ansible for DevOps

Ansible for DevOps Server and configuration management for humans Jeff Geerling Thisbookisforsaleathttp://leanpub.com/ansible-for-devops Thisversionwaspublishedon2019-09-06 ISBN978-0-9863934-0-2 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLean Publishingprocess.LeanPublishingistheactofpublishinganin-progressebook usinglightweighttoolsandmanyiterationstogetreaderfeedback,pivotuntilyou havetherightbookandbuildtractiononceyoudo. ©2014-2019JeffGeerling Tweet This Book! PleasehelpJeffGeerlingbyspreadingthewordaboutthisbookonTwitter! Thesuggestedtweetforthisbookis: Ijustpurchased@Ansible4DevOpsby@geerlingguyon@leanpub- https://leanpub.com/ansible-for-devops#ansible Thesuggestedhashtagforthisbookis#ansible. Findoutwhatotherpeoplearesayingaboutthebookbyclickingonthislinkto searchforthishashtagonTwitter: #ansible Thisbookisdedicatedtomywife,Natalie,andmychildren. EditingbyMargieNewmanandKatherineGeerling. Coverphotographandillustration©2011JeffGeerling. AnsibleisasoftwareproductdistributedundertheGNUGPLv3opensourcelicense. Contents Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Whoisthisbookfor? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv Typographicconventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv Pleasehelpimprovethisbook! . . . . . . . . . . . . . . . . . . . . . . . . . . . v CurrentPublishedBookVersionInformation . . . . . . . . . . . . . . . vi AbouttheAuthor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Inthebeginning,thereweresysadmins . . . . . . . . . . . . . . . . . . . . . vii Moderninfrastructuremanagement . . . . . . . . . . . . . . . . . . . . . . . vii AnsibleandRedHat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii AnsibleExamples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x Otherresources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x Chapter1-GettingStartedwithAnsible . . . . . . . . . . . . . . . . . . . . . . 1 AnsibleandInfrastructureManagement . . . . . . . . . . . . . . . . . . . . . 1 Onsnowflakesandshellscripts . . . . . . . . . . . . . . . . . . . . . . . 1 Configurationmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . 2 InstallingAnsible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Creatingabasicinventoryfile . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 RunningyourfirstAd-HocAnsiblecommand . . . . . . . . . . . . . . . . . 7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Chapter2-LocalInfrastructureDevelopment:AnsibleandVagrant . . . . 9 Prototypingandtestingwithlocalvirtualmachines. . . . . . . . . . . . . . 9 Yourfirstlocalserver:SettingupVagrant . . . . . . . . . . . . . . . . . . . . 10 CONTENTS UsingAnsiblewithVagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 YourfirstAnsibleplaybook. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 CleaningUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Chapter3-Ad-HocCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Conductinganorchestra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 BuildinfrastructurewithVagrantfortesting . . . . . . . . . . . . . . . . . . 18 Inventoryfileformultipleservers . . . . . . . . . . . . . . . . . . . . . . . . . 20 Yourfirstad-hoccommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 DiscoverAnsible’sparallelnature . . . . . . . . . . . . . . . . . . . . . . 22 Learningaboutyourenvironment . . . . . . . . . . . . . . . . . . . . . . 24 MakechangesusingAnsiblemodules . . . . . . . . . . . . . . . . . . . 27 Configuregroupsofservers,orindividualservers . . . . . . . . . . . . . . . 28 ConfiguretheApplicationservers . . . . . . . . . . . . . . . . . . . . . . 29 ConfiguretheDatabaseservers . . . . . . . . . . . . . . . . . . . . . . . 30 Makechangestojustoneserver . . . . . . . . . . . . . . . . . . . . . . . 31 Manageusersandgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Managepackages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Managefilesanddirectories . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Getinformationaboutafile . . . . . . . . . . . . . . . . . . . . . . . . . 34 Copyafiletotheservers . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Retrieveafilefromtheservers . . . . . . . . . . . . . . . . . . . . . . . . 35 Createdirectoriesandfiles . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Deletedirectoriesandfiles . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Runoperationsinthebackground . . . . . . . . . . . . . . . . . . . . . . . . 36 Updateserversasynchronouslywithasynchronousjobs . . . . . . . . 37 Checklogfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Managecronjobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Deployaversion-controlledapplication . . . . . . . . . . . . . . . . . . . . . 41 Ansible’sSSHconnectionhistory . . . . . . . . . . . . . . . . . . . . . . . . . 42 Paramiko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 OpenSSH(default) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 FasterOpenSSHwithPipelining . . . . . . . . . . . . . . . . . . . . . . . 43 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 CONTENTS Chapter4-AnsiblePlaybooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Powerplays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 RunningPlaybookswithansible-playbook . . . . . . . . . . . . . . . . . . 50 Limitingplaybookstoparticularhostsandgroups . . . . . . . . . . . . 50 Settinguserandsudooptionswithansible-playbook . . . . . . . . . 51 Otheroptionsforansible-playbook . . . . . . . . . . . . . . . . . . . . 52 Real-worldplaybook:CentOSNode.jsappserver . . . . . . . . . . . . . . . 53 Addextrarepositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 DeployaNode.jsapp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 LaunchaNode.jsapp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Node.jsappserversummary . . . . . . . . . . . . . . . . . . . . . . . . . 61 Real-worldplaybook:UbuntuLAMPserverwithDrupal. . . . . . . . . . . 62 Includeavariablesfile,anddiscoverpre_tasksandhandlers. . . . . 62 BasicLAMPserversetup . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 ConfigureApache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 ConfigurePHPwithlineinfile. . . . . . . . . . . . . . . . . . . . . . . 68 ConfigureMySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 InstallComposerandDrush . . . . . . . . . . . . . . . . . . . . . . . . . 70 InstallDrupalwithGitandDrush . . . . . . . . . . . . . . . . . . . . . . 73 DrupalLAMPserversummary. . . . . . . . . . . . . . . . . . . . . . . . 75 Real-worldplaybook:UbuntuserverwithSolr . . . . . . . . . . . . . . . . . 76 Includeavariablesfile,andmorepre_tasksandhandlers . . . . . . 76 InstallJava8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 InstallApacheSolr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 ApacheSolrserversummary . . . . . . . . . . . . . . . . . . . . . . . . . 81 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Chapter5-AnsiblePlaybooks-BeyondtheBasics . . . . . . . . . . . . . . . 83 Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Environmentvariables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Per-playenvironmentvariables . . . . . . . . . . . . . . . . . . . . . . . 86 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 PlaybookVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Inventoryvariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 RegisteredVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 AccessingVariables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 CONTENTS HostandGroupvariables . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Automatically-loadedgroup_varsandhost_vars . . . . . . . . . 95 Magicvariableswithhostandgroupvariablesandinformation . 96 Facts(Variablesderivedfromsysteminformation) . . . . . . . . . . . . 97 LocalFacts(Facts.d) . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 AnsibleVault-Keepingsecretssecret . . . . . . . . . . . . . . . . . . . 100 VariablePrecedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 If/then/when-Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Jinja2Expressions,Pythonbuilt-ins,andLogic . . . . . . . . . . . . . . 105 register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 when . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 changed_whenandfailed_when . . . . . . . . . . . . . . . . . . . . . . . 110 ignore_errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Delegation,LocalActions,andPauses . . . . . . . . . . . . . . . . . . . . . . 111 Pausingplaybookexecutionwithwait_for . . . . . . . . . . . . . . . . 112 Runninganentireplaybooklocally . . . . . . . . . . . . . . . . . . . . . 113 Prompts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Chapter6-PlaybookOrganization-Roles,Includes,andImports . . . . . 121 Imports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Includes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Dynamicincludes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Handlerimportsandincludes . . . . . . . . . . . . . . . . . . . . . . . . 125 Playbookimports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Completeincludesexample . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Rolescaffolding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Buildingyourfirstrole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Moreflexibilitywithrolevarsanddefaults . . . . . . . . . . . . . . . . 132 Otherroleparts:handlers,files,andtemplates . . . . . . . . . . . . . . 135 Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 FilesandTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Organizingmorecomplexandcross-platformroles . . . . . . . . . . . 136 CONTENTS AnsibleGalaxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 GettingrolesfromGalaxy . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Usingrolerequirementsfilestomanagedependencies . . . . . . 140 ALAMPserverinninelinesofYAML . . . . . . . . . . . . . . . . . . . 141 ASolrserverinsevenlinesofYAML . . . . . . . . . . . . . . . . . . . . 143 HelpfulGalaxycommands . . . . . . . . . . . . . . . . . . . . . . . . . . 144 ContributingtoAnsibleGalaxy . . . . . . . . . . . . . . . . . . . . . . . 144 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Chapter7-Inventories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Areal-worldwebapplicationserverinventory . . . . . . . . . . . . . . . . . 147 Non-prodenvironments,separateinventoryfiles . . . . . . . . . . . . 151 Inventoryvariables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 host_vars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 group_vars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Ephemeralinfrastructure:Dynamicinventory . . . . . . . . . . . . . . . . . 156 DynamicinventorywithDigitalOcean . . . . . . . . . . . . . . . . . . . 157 DigitalOceanaccountprerequisites . . . . . . . . . . . . . . . . . . 157 ConnectingtoyourDigitalOceanaccount . . . . . . . . . . . . . . 158 CreatingadropletwithAnsible . . . . . . . . . . . . . . . . . . . . 158 DigitalOceandynamicinventorywithdigital_ocean.py . . . . 164 DynamicinventorywithAWS . . . . . . . . . . . . . . . . . . . . . . . . 165 Inventoryon-the-fly:add_hostandgroup_by . . . . . . . . . . . . . . . 166 Multipleinventorysources-mixingstaticanddynamicinventories . 167 Creatingcustomdynamicinventories . . . . . . . . . . . . . . . . . . . 167 BuildingaCustomDynamicInventoryinPython . . . . . . . . . 169 BuildingaCustomDynamicInventoryinPHP . . . . . . . . . . . 174 ManagingaPaaSwithaCustomDynamicInventory . . . . . . . 177 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Chapter8-AnsibleCookbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Highly-AvailableInfrastructurewithAnsible . . . . . . . . . . . . . . . . . . 179 DirectoryStructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 IndividualServerPlaybooks . . . . . . . . . . . . . . . . . . . . . . . . . 181 MainPlaybookforConfiguringAllServers . . . . . . . . . . . . . . . . 193 Gettingtherequiredroles . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 CONTENTS VagrantfileforLocalInfrastructureviaVirtualBox. . . . . . . . . . . . 194 ProvisionerConfiguration:DigitalOcean. . . . . . . . . . . . . . . . . . 199 ProvisionerConfiguration:AmazonWebServices(EC2) . . . . . . . . 204 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 ELKLoggingwithAnsible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 ELKPlaybook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 ForwardingLogsfromOtherServers . . . . . . . . . . . . . . . . . . . . 217 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 GlusterFSDistributedFileSystemConfigurationwithAnsible . . . . . . . 224 ConfiguringGluster-BasicOverview . . . . . . . . . . . . . . . . . . . 225 ConfiguringGlusterwithAnsible . . . . . . . . . . . . . . . . . . . . . . 226 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 MacProvisioningwithAnsibleandHomebrew . . . . . . . . . . . . . . . . 233 RunningAnsibleplaybookslocally . . . . . . . . . . . . . . . . . . . . . 234 AutomatingHomebrewpackageandappmanagement . . . . . . . . . 234 ConfiguringMacOSXthroughdotfiles . . . . . . . . . . . . . . . . . . 236 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Chapter9-DeploymentswithAnsible . . . . . . . . . . . . . . . . . . . . . . . 239 Deploymentstrategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Simplesingle-serverdeployments . . . . . . . . . . . . . . . . . . . . . . . . . 240 ProvisioningaRubyonRailsserver . . . . . . . . . . . . . . . . . . . . . 241 DeployingaRailsapptotheserver . . . . . . . . . . . . . . . . . . . . . 244 ProvisioningandDeployingtheRailsApp . . . . . . . . . . . . . . . . . 249 Deployingapplicationupdates . . . . . . . . . . . . . . . . . . . . . . . . 251 Zero-downtimemulti-serverdeployments . . . . . . . . . . . . . . . . . . . 254 Ensuringzerodowntimewithserialandintegrationtests . . . . . . 263 Deployingtoappserversbehindaloadbalancer . . . . . . . . . . . . . 265 Capistrano-styleandblue-greendeployments . . . . . . . . . . . . . . . . . 272 AdditionalDeploymentFeatures . . . . . . . . . . . . . . . . . . . . . . . . . 274 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Chapter10-ServerSecurityandAnsible. . . . . . . . . . . . . . . . . . . . . . 276 AbriefhistoryofSSHandremoteaccess . . . . . . . . . . . . . . . . . . . . 276 Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 rlogin,rshandrcp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.