From fcc4114459d681e2570e6249ae942cdca3f0ef04 Mon Sep 17 00:00:00 2001 From: ErdemOzgen Date: Wed, 13 Dec 2023 09:06:34 +0300 Subject: [PATCH] Add Ansible documentation and examples --- content/Devops&DevSecOps/Ansible.md | 228 +++++++++++++++++++++++- content/Pasted image 20231213081951.png | Bin 0 -> 29214 bytes 2 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 content/Pasted image 20231213081951.png diff --git a/content/Devops&DevSecOps/Ansible.md b/content/Devops&DevSecOps/Ansible.md index c58ce2e54..10d2bfe5b 100644 --- a/content/Devops&DevSecOps/Ansible.md +++ b/content/Devops&DevSecOps/Ansible.md @@ -1 +1,227 @@ -[Ansible PDF Link](https://github.com/ErdemOzgen/brain/blob/v4/docs/pdfs/ansible1.pdf) \ No newline at end of file +[Ansible PDF Link](https://github.com/ErdemOzgen/brain/blob/v4/docs/pdfs/ansible1.pdf) + +![[Pasted image 20231213081951.png]] + +Control node + +A system on which Ansible is installed. You run Ansible commands such as `ansible` or `ansible-inventory` on a control node. + +Inventory + +A list of managed nodes that are logically organized. You create an inventory on the control node to describe host deployments to Ansible. + +Managed node + +A remote system, or host, that Ansible controls. + + +```ini +[myhosts] +192.0.2.50 +192.0.2.51 +192.0.2.52 +``` + + +ansible myhosts -m ping -i inventory.ini + +```yaml +myhosts: + hosts: + my_host_01: + ansible_host: 192.0.2.50 + my_host_02: + ansible_host: 192.0.2.51 + my_host_03: + ansible_host: 192.0.2.52 +``` + +```yaml +leafs: + hosts: + leaf01: + ansible_host: 192.0.2.100 + leaf02: + ansible_host: 192.0.2.110 + +spines: + hosts: + spine01: + ansible_host: 192.0.2.120 + spine02: + ansible_host: 192.0.2.130 + +network: + children: + leafs: + spines: + +webservers: + hosts: + webserver01: + ansible_host: 192.0.2.140 + webserver02: + ansible_host: 192.0.2.150 + +datacenter: + children: + network: + webservers: +``` + +# Creating a playbook[](https://docs.ansible.com/ansible/latest/getting_started/get_started_playbook.html#creating-a-playbook "Permalink to this heading") + +Playbook + +A list of plays that define the order in which Ansible performs operations, from top to bottom, to achieve an overall goal. + +Play + +An ordered list of tasks that maps to managed nodes in an inventory. + +Task + +A list of one or more modules that defines the operations that Ansible performs. + +Module + +A unit of code or binary that Ansible runs on managed nodes. Ansible modules are grouped in collections with a [Fully Qualified Collection Name (FQCN)](https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#term-Fully-Qualified-Collection-Name-FQCN) for each module. + +1. Create a file named `playbook.yaml` in your `ansible_quickstart` directory, that you created earlier, with the following content: + +```yaml + - name: My first play + hosts: myhosts + tasks: + - name: Ping my hosts + ansible.builtin.ping: + + - name: Print message + ansible.builtin.debug: + msg: Hello world + +``` +2. Run your playbook. + + ansible-playbook -i inventory.ini playbook.yaml + +#ansible +#inventory + +Inventory in Ansible is a crucial concept, essential for defining and managing the servers, machines, or devices on which Ansible will run tasks. Here's a breakdown of what inventory means in the context of Ansible: + +### Definition +- **Inventory**: An inventory is a collection of hosts (servers, devices, etc.) against which Ansible can execute tasks. It's essentially a list of nodes or machines that Ansible can manage. + +### Format +- **Hosts and Groups**: The inventory can list individual hosts or group them. Groups can have child groups, allowing for complex groupings and hierarchies. +- **File Formats**: The inventory file can be in various formats, including INI-like simple text files or YAML files. Ansible also supports dynamic inventories, where the inventory is generated by an external system or script. + +### Basic Example +- **INI Format**: + ``` + [webserver] + server1.example.com + server2.example.com + + [database] + dbserver.example.com + ``` +- **YAML Format**: + ```yaml + all: + children: + webserver: + hosts: + server1.example.com: + server2.example.com: + database: + hosts: + dbserver.example.com: + ``` + +### Key Features +- **Variables**: Inventory can also define variables for hosts or groups. These variables can be used to customize Ansible's behavior for different hosts. +- **Connection Details**: It can include details like the IP address, domain, or other connection information (SSH port, user, etc.). +- **Dynamic Inventory**: For environments that change frequently (like cloud environments), Ansible can use dynamic inventories that are not static files but scripts or programs returning the inventory. + +### Usage +- **Specifying Inventory**: When running Ansible commands or playbooks, you specify which inventory to use. This can be a path to a file or a script for dynamic inventory. +- **ansible.cfg**: The default inventory file location can be set in Ansible's configuration file, `ansible.cfg`. + +### Importance +- **Orchestration**: Inventory is crucial for orchestrating tasks across multiple servers or environments. It tells Ansible "what" it will be managing or automating. +- **Scalability**: Inventories make managing large numbers of servers feasible, as they can be organized into manageable groups. + +### Best Practices +- **Keep It Simple**: Start with a simple inventory and expand as needed. +- **Version Control**: Keep your inventory files under version control. +- **Security**: Be mindful of sensitive data in inventory files. Use Ansible Vault for encryption if needed. + +In summary, the inventory in Ansible is a foundational element for defining which systems your Ansible playbooks and roles will interact with. It's flexible enough to handle a small number of servers or scale up to a large, dynamic infrastructure. + +Ansible roles are a powerful feature for organizing and reusing code in Ansible. They help in managing complex playbooks by breaking them down into smaller, reusable components. Here’s an overview of what roles are and how they work in Ansible: + +### Definition and Purpose +- **Roles**: A role is a set of related tasks, variables, files, and handlers that are organized in a predefined directory structure. Roles allow you to group content, making it easier to reuse and redistribute. +- **Modularity and Reusability**: Roles promote modularity and reusability. By using roles, you can easily share and use code for common tasks across different playbooks. + +### Directory Structure +A typical role directory structure looks like this: +``` +role_name/ + ├── defaults/ # Default variables for the role + │ └── main.yml + ├── files/ # Files to be transferred to the target system + ├── handlers/ # Handlers, which can be used by this role or even anywhere outside this role + │ └── main.yml + ├── meta/ # Metadata for the role, including dependencies + │ └── main.yml + ├── tasks/ # Main list of tasks that the role executes + │ └── main.yml + ├── templates/ # Templates files, usually using Jinja2 syntax + ├── tests/ # Test code for the role + └── vars/ # Other variables for the role + └── main.yml +``` + +### Key Components +- **Tasks**: The `tasks` directory contains the main list of tasks that the role will execute. +- **Handlers**: In the `handlers` directory, you define handlers, which are tasks that only run when notified. +- **Defaults**: The `defaults` directory stores default variables for the role. +- **Vars**: The `vars` directory contains other variables for the role, usually with higher priority than defaults. +- **Files and Templates**: `files` and `templates` directories contain files and templates that can be deployed to target systems. +- **Meta**: The `meta` directory contains metadata, like role dependencies. + +### Creating a Role +- Use the `ansible-galaxy` command to create a new role with the basic directory structure: + ``` + ansible-galaxy init role_name + ``` + +### Using Roles in Playbooks +- Roles are called within playbooks. Here’s a basic example of how a role is referenced in a playbook: + ```yaml + - hosts: webservers + roles: + - role: nginx + - role: php + php_versions: ['7.4', '8.0'] + ``` + +### Variables and Overriding +- Variables in roles can be overridden by passing them in playbooks or setting them in different variable files. + +### Role Dependencies +- Roles can depend on other roles, and these dependencies are defined in the `meta/main.yml` file of the role. Ansible will automatically include and execute dependent roles. + +### Best Practices +- **Modular Design**: Design roles to be as modular and reusable as possible. +- **Documentation**: Document each role, including its purpose, variables, and dependencies. +- **Version Control**: Keep roles in version control systems for better management. +- **Testing**: Regularly test roles independently to ensure they function as expected in different environments. + +### Sharing and Reuse +- **Ansible Galaxy**: You can share and reuse roles via Ansible Galaxy, a hub for finding, reusing, and sharing Ansible content. + +Roles are essential for scaling and managing larger, more complex Ansible configurations, allowing for cleaner code, easier maintenance, and better organization. \ No newline at end of file diff --git a/content/Pasted image 20231213081951.png b/content/Pasted image 20231213081951.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6d1e4286b137ee38a9d8ebdf6106994bf71146 GIT binary patch literal 29214 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 literal 0 HcmV?d00001