We will also be looking at the Ansible installation process for Mac OS X, Python PyPI, and how to install it from the source. We will cover cloud usage and containerized Ansible. If you have a choice, we recommend using the default package manager for Red Hat, CentOS, Debian, Ubuntu, and Mac OS X. Zip programs are installed after a download, requiring an Ansible task to replace manual clicks and data entry. WARNING: Each program added uses up more disk space. WARNING: This may make obsolete documentation based on default Mac settings. Ansible configurations are “idempotent”, which means that if you run it again, the result is the same. How to provision AWS EC2 instances using ansible playbook. Create, launch, start, stop and terminate instances using tags and instance id with ec2 module. If you are a new customer, register now for access to product evaluations and purchasing capabilities. Need access to an account? If your company has an existing Red Hat account, your organization administrator can grant you access.
Topics
- Installing content
- Roles
This topic describes how to download and install Ansible content from Galaxy.
Use the ansible-galaxy
command to download roles from the Galaxy server.For example, the following downloads the debops.apt role:
When Ansible is first installed, it defaults to installing content in /etc/ansible/roles, which requiresroot privileges.
The first way to override the default behavior is to use the –roles-path option on the command line, asdemonstrated by the following example:
Override the default behavior by setting the environment variable ANSIBLE_ROLES_PATH
. When set, theANSIBLE_ROLES_PATH variable is used during playbook execution to locate installed roles, and by ansible-galaxy
to determine where to install roles. It can be set to a single directory path, or to a list of paths(e.g., /etc/ansible/roles:~/.ansible/roles). If set to a list, ansible-galaxy
will install roles tothe first writable path.
Ansible also supports a configuration file,where roles_path
can be set. Setting the value of roles_path
behaves the same as setting theANSIBLE_ROLES_PATH environment variable.
When the Galaxy server imports a role, it imports any git tags matching the Semantic Version format asversions. In turn, a specific version of a role can be downloaded by specifying one of the imported tags.
To see the available versions, locate the role on the search page, and click on the name to view more details. Youcan also navigate directly to the role using the /<namespace>/<role name>. For example, to view therole geerlingguy.apache, go to https://galaxy.ansible.com/geerlingguy/apache.
Install a specific version of a role by appending a comma and a version tag. For example, the following installs v1.0.0 of therole.
It’s also possible to point directly to the git repository and specify a branch name or commit hash as the version.For example, the following installs a specific commit:
You can use the ansible-galaxylist
command to list all the roles and role versions you have installed.
Multiple roles can be installed by listing them in a requirements.yml file. The format of the file isYAML, and the file extension must be either .yml or .yaml.
Use the following command to install roles included in requirements.yml:
Each role in the file will have one or more of the following attributes:
- src
- The source of the role, and a required attribute. Specify a role from Galaxy by using the formatnamespace.role_name, or provide a URL to a repository within a git based SCM.
- scm
- If the src is a URL, specify the SCM. Only git or hg are supported. Defaults to git.
- version:
- The version of the role to download. Provide a tag value, commit hash, or branch name.Defaults to master.
- name:
- Download the role to a specific name. Defaults to the Galaxy name when downloading from Galaxy,or the name of the repository, when src is a URL.
The following example provides a guide for listing roles in a requirements.yml file:
Using the include directive, additional YAML files can be included into a single requirements.ymlfile. For large projects, this provides the ability to split a large file into multiple smaller files.
For example, a project may have a requirements.yml file, and a webserver.yml file. The followingshows the contents of the requirements.yml file:
Below are the contents of the webserver.yml file:
To install all the roles from both files, pass the root file, in this case requirements.yml on thecommand line, as demonstrated by the following:
Roles can be dependent on roles, and when a role is installed, any dependencies are automatically installedas well.
Dependencies are listed in a role’s meta/main.yml
file, using the top-level dependencies keyword.The following shows an example meta/main.yml
file with dependent roles:
If the source of a role is Galaxy, specify the role in the format namespace.role_name, as shown in theabove example. The more complex format used in requirements.yml is also supported, as demonstrated bythe following:
To understand how dependencies are handled during playbook execution, view the Role Dependencies topic atthe Ansible doc site.
Note
Galaxy expects all role dependencies to exist in Galaxy, and therefore dependencies to be specifiedusing the namespace.role_name format.
See Installing collections in the Ansible documentation for detailed information about installing and using collections from Galaxy.
I speak to a lot of people at a lot of user groups, Meetups (like the Melbourne PowerShell Meetup) or conferences and a lot of them seem to not have heard of Ansible yet. To be fair, Ansible is still very new to the Microsoft ecosystem and Microsoft is still quite new to the whole Configuration Management thing.
These people are instantly interested in what Ansible can do and usually ask me “so, how do I start?”
This obviously always depends on what type of person you are and how you learn. I for example need to actually use technology, otherwise I won’t understand it properly. Just reading about it doesn’t cut it for me.
This article will show you how to stand up an Ansible test lab in under 30 minutes.
I have already written about what Ansible is, so if you haven’t seen that article, find it here: Ansible - Windows Configuration Management from Linux
You will also find a link to Trond Hindenes’s website where he explains how to get started with Ansible.
Trond’s article is great to get you started, but it also takes quite a while to get everything setup and installed. This blog is all about automation, so it just makes sense to even automate the deployment of your next Ansible test lab, right?
The main idea about test labs that are mainly used for testing/validating code that you have just written is to spin them up easily and quickly and after having run all your tests you destroy it again.
Vagrant (https://www.vagrantup.com) is perfect for this scenario. Vagrant lets you, with only one line of code on the command line (PowerShell or Mac Terminal) deploy a whole test environment. Vagrant is available for download on Windows and Mac OS and supports all sorts of Hypervisors like Hyper-V, Virtualbox and Docker. There are also plugins available that add support to provision environments on AWS or Azure.
If you’re not sure why to use Vagrant, read this article: https://www.vagrantup.com/docs/why-vagrant/
The great thing about Vagrant is that you describe your environment in just one file. Granted, it’s a ruby script, so you do need to make sure that syntax is right and maybe read a bit of the (by the way excellent) Vagrant documentation.
Because I am a nice guy I have already prepared a Vagrantfile that includes a Shell script that will install Ansible into the newly provisioned “box”.
Prerequisites
- Internet connection
- Virtualbox installed
- Vagrant installed
- optional: git client installed
Make it so
The following code will clone my Github repository hosting the two needed files to do the installation and then execute the provisioning.
If you don’t have a git client installed on your machine (why wouldn’t you???) then download the sources manually.
These four lines will create a new Linux server and will get Ansible and its prereqs installed onto the new server. The whole process will take approx. 10mins, depending on your internet connection.
vagrant ssh ansible will connect you to the new server via SSH (if you have SSH available on your machine or have configured Vagrant to use Putty (Windows)).
We are installing Ansible from source, so we need to run one more command to get Ansible working.
Mac Install Ansible
source ansible/hacking/env-setup
Now you can start using Ansible. You will probably want to start adding more machines into your Vagrantfile to make sure that you will actually have an environment to test in. This is really easy. My test environment consists of the Ansible master server, an Ubuntu Ansible node and a Windows Server 2012 R2 Ansible node.
When I’m done I just call the following code and my environment is gone. No worries, because all my config and code is in source control anyways and gets automatically pulled in into each new environment I provision with Vagrant.
Mac Ansible Config
vagrant destroy
Ansible Check Os
Enjoy your new toy!