Roles of Ansible: Roles are a robust feature of Ansible that facilitates reuse and further promotes the modularization of the configuration, but the roles of Ansible are often overlooked instead of simple. The good news is that the roles of Ansible They are easy to configure and allow complexity when necessary. Join me as I go through the basics of how to set up and deploy a role Simple of Ansible.
Roles of Ansible
The anatomy of a paper Ansible
The concept of roles of ansible is simple; is a group of variables, tasks, files and controllers that are stored in a standardized file structure.
The most complicated part of a role is to remember the structure of the directory, but there is help. The built-in ansible -galaxy command has a subcommand that will create our role skeleton for us.
Simply use ansible -galaxy init <ROLE_NAME> to create a new role in your current working directory. You will see here that several directories and files are created within the new role:
The number of files and directories may seem intimidating, but they are quite simple. Most directories contain a main.yml record ; Ansible use each of these files as an entry point to read the contents of the directory (except files, templates and proof). You have the freedom to divide your tasks and variables into other files within each directory. But when you do this, you should use the include directive in a directory of main.yml to have your files used as part of the function. We will examine this more closely after a brief summary of the purpose of each directory.
The defaults directory is designated for the default values of variables that have the lowest priority. Put another way: if a variable is not defined anywhere else, the definition given in predetermined values / main.yml It will be used.
the records Y templates The directories have a similar purpose. They contain affiliate files and templates Ansible (respectively) that are used within therole. The nice part of these directories is that Ansible You do not need a route for the resources stored in them when you work in the role. Ansible check first. You can still use the full path if you want to reference files outside the role, however, best practices suggest that you keep all the components of the role together.
The directory of controllers It is used to store controllers Ansible. If you are not familiar, the handlers Ansible they are simply tasks that can be markedduring a play so that they are executed at the end of the execution. You may have as many or as few handlers as are necessary for your function.
The goal directory contains authoring information that is useful if you choose to publish your role in galaxy.ansible.com . The directory goal it can also be used to define role dependencies. As you may suspect, a role dependency allows you to request that other roles be installed before the role in question.
the README.md file is simply a README file in markdown format. This file is essential for the roles published in galaxy.ansible.com and, honestly, the file should include a general description of how your role works, even if you do not make it available to the public.
the homework directory is where most of your paper will be written. This directory includes all the tasks that your role will perform. Ideally, each set of logically related tasks would be established in their own files, and will simply be included through main.yml file in the Chores directory.
the test directory contains a sample inventory and a test.yml Playbook This can be useful if you have an automated test process based on your function. It can also be useful while building your role, but its use is not mandatory.
The last directory created is the vars directory. This is where you create the variable files that define the variables needed for your role. The variables defined in this directory are for internal use only. It is a good idea to make a name space in the names of the role variables, to avoid possible name conflicts with variables outside of their role. For example, if you need a variable called configuration file In your reference playbook, you may want to name your variable baseline_config_ file , to avoid conflicts with another possible configuration file variable defined elsewhere.
Creating a simple role of ansible
As mentioned above, the roles of Ansible They can be as complex or simple as you need them. Sometimes, it is useful to start in a simple way and iterate towards more complex role as it underpins the basic functionality. Let’s try that, and let’s define a role called base_httpd that install httpd with a simple configuration and a very simple website.
To begin with, we will need to create our role. We could create each directory and file by hand, but it’s much easier to let ansible -galaxy Do the hard work for us by simply running ansible- galaxy init base_ httpd :
Next, we can create our simple web page in the file directory. For our academic purposes, we can create a file called index.html that contains a tried and true sample text:
We will create a template for our httpd.conf file by copying an existing one from a new installation of httpd . Let’s take this opportunity to define a couple of predetermined variables in our role. We will make a default listening port of 80 and a LogLevel which by default will warn. We can do this by adding an entry to default / main.yml :
You will notice here that the template file has the .j2 extension as personalized, and I’ve used grep to highlight where we have customized the template by replacing the default values in httpd.conf with Variables ansibles . Then I show where the variables are defined in default / main.yml . Here we prefer the use defaults instead of vars , since it allows a later personalization without having to change the real role.
Now that we have our website and simple configuration, we will need to create the tasks to give life to our web server. As an example, isolate configuration httpd to your own archive yaml in chores / httpd.yml and then include that file in the chores / main.yml :
We use the yum, template, copy and service modules to install, configure and start our web server. It is worth noting here that I refer to the httpd.yml , httpd.conf.j2 , Y index.html Files without complete routes, since they are stored inside the function.
Unfolding the roles of Ansible
Most of the hard work was completed when we built the paper itself. The deployment of the function, in comparison, is easy. We just need to set up a simple playbook and select the function using the appropriate keyword:
We could easily add typical tasks after implementation of the role, or we could also implement additional roles simply adding them to the list. In addition, we can override the default variables that we configure using the same variable names as shown below:
The functions ansible provide a robust way to organize the artifacts and tasks of implementation in order to reuse and share them. The tooling provided in ansible -galaxy Makes configuring a new role as simple as ever. Anyone with a knowledge basic how game writing books Ansible can create a role of Ansible with the same ease .