Skip to content

IaC-Unleashed/Intro-to-Ansible

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Intro to Ansible

Imgur

Overview

This project will be an introduction to configuration management with Ansible. We will first create a cloud server using Terraform, then we will configure that VM to be a webserver. This project assumes you have already followed the instructions detailed in Intro to DigitalOcean and Terraform, except do not destroy the virtual machine at the end. If you have, simply spin up another one!


The inventory File

Before you can run the playbook, you must first set up the inventory file so that Ansible knows on which host to operate. The inventory file is protected by version control, so it is not checked into the repo. This INI file should be named inventory, exist in the ansible directory, and contain the following code:

[droplets]
iac-test-server ansible_host=<public_ip_server> ansible_connection=ssh ansible_user=root 

The value, <public_ip_server> is the IP address of the DigitalOcean droplet you created with Terraform in Intro-to-DigitalOcean. Once the inventory is in place, you can run the following command from within the ansible directory to make sure it aligns with what is expected:

ansible-inventory -i inventory --list

The output should look like the following:

{
    "_meta": {
        "hostvars": {
            "iac-test-server": {
                "ansible_connection": "ssh",
                "ansible_host": "<public_ip_server>",
                "ansible_user": "root"
            }
        }
    },
    "all": {
        "children": [
            "ungrouped",
            "droplets"
        ]
    },
    "droplets": {
        "hosts": [
            "iac-test-server"
        ]
    }
}

You can also ping the hosts in the inventory by running the following command from within the ansible directory:

$ ansible -i inventory -m ping all

An expected output should look like the following:

iac-test-server | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Running the Playbook

Provisioning the server is accomplished by running the following command from within the ansible directory:

$ ansible-playbook -i inventory playbook.yml

This provisioning runs the following tasks on the remote machine:

  • Set up passwordless sudo
  • Create a new user with sudo privileges
  • Copy over local public ssh key for remote access
  • Disable password authentication for root
  • Update apt cache and install Nginx
  • Enable the site
  • Restart Nginx service

About

Introduction to configuration management with Ansible

Topics

Resources

License

Stars

Watchers

Forks