Update Files
This commit is contained in:
84
Ansible/1-Inventory.md
Normal file
84
Ansible/1-Inventory.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# **Ansible Configuration Guide**
|
||||
|
||||
Ansible is a powerful automation tool used to manage and configure servers. This guide provides examples of how to structure your inventory files, which are essential for defining the servers and groups that Ansible will manage. Additionally, it covers common Ansible commands for interacting with your servers.
|
||||
|
||||
|
||||
## **Inventory File Examples**
|
||||
|
||||
### **INI Format**
|
||||
|
||||
The INI format is one of the simplest ways to define your inventory. Below are two examples showcasing different use cases.
|
||||
|
||||
#### **Example 1: Single Group Inventory**
|
||||
|
||||
In this example, all servers are grouped under a single `[all]` group. Each server is defined with specific connection details:
|
||||
|
||||
```ini
|
||||
[all]
|
||||
<server-name> ansible_host=<server-ip> ansible_ssh_pass=<password> ansible_port=<ssh-port> ansible_connection=<connection-type>
|
||||
```
|
||||
|
||||
- **`<server-name>`**: A label or hostname for your server.
|
||||
- **`<server-ip>`**: The IP address of the server.
|
||||
- **`ansible_ssh_pass`**: The SSH password for connecting to the server.
|
||||
- **`ansible_port`**: The port used for SSH connections.
|
||||
- **`ansible_connection`**: The connection type (e.g., ssh, winrm).
|
||||
|
||||
#### **Example 2: Grouped Inventory with Variables**
|
||||
|
||||
This example demonstrates grouping servers by roles (e.g., `web`, `db`, `bk`). Group-specific variables are defined under `[all:vars]`:
|
||||
|
||||
```ini
|
||||
[all]
|
||||
<server1-name> ansible_host=<server1-ip>
|
||||
<server2-name> ansible_host=<server2-ip>
|
||||
<server3-name> ansible_host=<server3-ip>
|
||||
|
||||
[web]
|
||||
<server1-name>
|
||||
|
||||
[db]
|
||||
<server2-name>
|
||||
|
||||
[bk]
|
||||
<server3-name>
|
||||
|
||||
[all:vars]
|
||||
ansible_user=<username>
|
||||
ansible_port=<ssh-port>
|
||||
```
|
||||
|
||||
- **Groups**: Servers are organized into different groups (`web`, `db`, `bk`).
|
||||
- **`[all:vars]`**: Common variables for all groups.
|
||||
|
||||
### **YAML Format**
|
||||
|
||||
The YAML format provides a more structured and readable way to define your inventory, especially useful for larger or more complex environments.
|
||||
|
||||
#### **Example: Grouped Inventory with Host-Specific Variables**
|
||||
|
||||
This example illustrates how to define an inventory with nested groups and host-specific variables:
|
||||
|
||||
```yaml
|
||||
all:
|
||||
children:
|
||||
webservers:
|
||||
hosts:
|
||||
192.168.1.100:
|
||||
ansible_port: 22
|
||||
192.168.1.110:
|
||||
ansible_port: 1357
|
||||
vars:
|
||||
http_port: 8080
|
||||
dbserver:
|
||||
hosts:
|
||||
db.main.local:
|
||||
db_user: admin
|
||||
db_pass: secret
|
||||
```
|
||||
|
||||
- **`children`**: Groups within the `all` group, such as `webservers` and `dbserver`.
|
||||
- **`hosts`**: List of servers under each group, with their specific variables.
|
||||
- **`vars`**: Group-specific variables, such as `http_port` for `webservers`.
|
||||
|
||||
|
||||
106
Ansible/2-Commands.md
Normal file
106
Ansible/2-Commands.md
Normal file
@@ -0,0 +1,106 @@
|
||||
|
||||
# **Ansible Commands**
|
||||
|
||||
Below are some frequently used Ansible commands for managing your servers.
|
||||
|
||||
### **Listing Hosts**
|
||||
|
||||
List all hosts defined in the inventory file:
|
||||
|
||||
```bash
|
||||
ansible --list-hosts all -i servers.ini
|
||||
# or for YAML format
|
||||
ansible --list-hosts all -i servers.yaml
|
||||
```
|
||||
|
||||
### **Ping All Servers**
|
||||
|
||||
Check the connectivity of all servers:
|
||||
|
||||
```bash
|
||||
ansible -m ping all -i server.ini
|
||||
```
|
||||
|
||||
### **Execute Commands**
|
||||
|
||||
Run a command (e.g., `uptime`) on all servers:
|
||||
|
||||
```bash
|
||||
ansible -m command -a "uptime" all -i server.ini
|
||||
```
|
||||
|
||||
### **Copy Files to Servers**
|
||||
|
||||
Copy a file from the Ansible server to all target servers:
|
||||
|
||||
```bash
|
||||
ansible -m copy -a "src=<file-location-on-ansible-server> dest=<destination-location-on-server>" all -i server.ini
|
||||
```
|
||||
|
||||
### **Run Commands with Sudo**
|
||||
|
||||
Execute a command with elevated privileges (sudo) as the root user:
|
||||
|
||||
```bash
|
||||
ansible -m command -a "uptime" all -i server.ini --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
### **Install a Package**
|
||||
|
||||
Install the `nginx` package on all servers:
|
||||
|
||||
```bash
|
||||
ansible -m apt -a "name=nginx state=present" --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
### **Uninstall a Package**
|
||||
|
||||
Remove the `nginx` package from all servers:
|
||||
|
||||
```bash
|
||||
ansible -m apt -a "name=nginx state=absent" --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
### **Update and Upgrade Packages**
|
||||
|
||||
Update the package list and upgrade all packages:
|
||||
|
||||
```bash
|
||||
ansible -m apt -a "upgrade=yes update_cache=yes" --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Advanced Usage and Notes**
|
||||
|
||||
### **Special Considerations**
|
||||
|
||||
- **Module Limitations**: The `command` module does not support special characters or shell features. For commands requiring shell features (like pipes or redirection), use the `shell` module.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
ansible -m shell -a "cat /etc/passwd | grep -l" all -i server.ini --become
|
||||
```
|
||||
|
||||
- **Raw Module**: Use the `raw` module for devices that do not have Python installed. It allows you to execute raw SSH commands directly.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
ansible -m raw -a "hostnamectl" all -i server.ini --become
|
||||
```
|
||||
|
||||
### **Gathering System Facts**
|
||||
|
||||
Use the `setup` module to gather system facts from all servers:
|
||||
|
||||
```bash
|
||||
ansible -m setup --become all -i server.ini
|
||||
```
|
||||
|
||||
You can filter specific facts:
|
||||
|
||||
```bash
|
||||
ansible -m setup -a "filter=ansible_memory" --become all -i server.ini
|
||||
ansible -m setup -a "filter=ansible_distribution" --become all -i server.ini
|
||||
```
|
||||
|
||||
@@ -1,192 +0,0 @@
|
||||
# Ansible Configuration Guide
|
||||
|
||||
Ansible is a powerful automation tool used to manage and configure servers. This guide provides examples of how to structure your inventory files, essential for defining the servers and groups that Ansible will manage. Additionally, it covers common Ansible commands for interacting with your servers.
|
||||
|
||||
## Inventory File Examples
|
||||
|
||||
### INI Format
|
||||
|
||||
The INI format is one of the simplest ways to define your inventory. Below are two examples showcasing different use cases.
|
||||
|
||||
#### Example 1: Single Group Inventory
|
||||
|
||||
In this example, all servers are grouped under a single `[all]` group. Each server is defined with specific connection details:
|
||||
|
||||
```ini
|
||||
[all]
|
||||
<server-name> ansible_host=<server-ip> ansible_ssh_pass=<password> ansible_port=<ssh-port> ansible_connection=<connection-type>
|
||||
```
|
||||
|
||||
- **`<server-name>`**: A label or hostname for your server.
|
||||
- **`<server-ip>`**: The IP address of the server.
|
||||
- **`ansible_ssh_pass`**: The SSH password for connecting to the server.
|
||||
- **`ansible_port`**: The port used for SSH connections.
|
||||
- **`ansible_connection`**: The connection type (e.g., ssh, winrm).
|
||||
|
||||
#### Example 2: Grouped Inventory with Variables
|
||||
|
||||
This example demonstrates grouping servers by roles (e.g., `web`, `db`, `bk`). Group-specific variables are defined under `[all:vars]`:
|
||||
|
||||
```ini
|
||||
[all]
|
||||
<server1-name> ansible_host=<server1-ip>
|
||||
<server2-name> ansible_host=<server2-ip>
|
||||
<server3-name> ansible_host=<server3-ip>
|
||||
|
||||
[web]
|
||||
<server1-name>
|
||||
|
||||
[db]
|
||||
<server2-name>
|
||||
|
||||
[bk]
|
||||
<server3-name>
|
||||
|
||||
[all:vars]
|
||||
ansible_user=<username>
|
||||
ansible_port=<ssh-port>
|
||||
```
|
||||
|
||||
- **Groups**: Servers are organized into different groups (`web`, `db`, `bk`).
|
||||
- **`[all:vars]`**: Common variables for all groups.
|
||||
|
||||
### YAML Format
|
||||
|
||||
The YAML format provides a more structured and readable way to define your inventory, especially useful for larger or more complex environments.
|
||||
|
||||
#### Example: Grouped Inventory with Host-Specific Variables
|
||||
|
||||
This example illustrates how to define an inventory with nested groups and host-specific variables:
|
||||
|
||||
```yaml
|
||||
all:
|
||||
children:
|
||||
webservers:
|
||||
hosts:
|
||||
192.168.1.100:
|
||||
ansible_port: 22
|
||||
192.168.1.110:
|
||||
ansible_port: 1357
|
||||
vars:
|
||||
http_port: 8080
|
||||
dbserver:
|
||||
hosts:
|
||||
db.main.local:
|
||||
db_user: admin
|
||||
db_pass: secret
|
||||
```
|
||||
|
||||
- **`children`**: Groups within the `all` group, such as `webservers` and `dbserver`.
|
||||
- **`hosts`**: List of servers under each group, with their specific variables.
|
||||
- **`vars`**: Group-specific variables, such as `http_port` for `webservers`.
|
||||
|
||||
## Common Ansible Commands
|
||||
|
||||
Below are some frequently used Ansible commands for managing your servers.
|
||||
|
||||
### Listing Hosts
|
||||
|
||||
List all hosts defined in the inventory file:
|
||||
|
||||
```bash
|
||||
ansible --list-hosts all -i servers.ini
|
||||
# or for YAML format
|
||||
ansible --list-hosts all -i servers.yaml
|
||||
```
|
||||
|
||||
### Ping All Servers
|
||||
|
||||
Check the connectivity of all servers:
|
||||
|
||||
```bash
|
||||
ansible -m ping all -i server.ini
|
||||
```
|
||||
|
||||
### Execute Commands
|
||||
|
||||
Run a command (e.g., `uptime`) on all servers:
|
||||
|
||||
```bash
|
||||
ansible -m command -a "uptime" all -i server.ini
|
||||
```
|
||||
|
||||
### Copy Files to Servers
|
||||
|
||||
Copy a file from the Ansible server to all target servers:
|
||||
|
||||
```bash
|
||||
ansible -m copy -a "src=<file-location-on-ansible-server> dest=<destination-location-on-server>" all -i server.ini
|
||||
```
|
||||
|
||||
### Run Commands with Sudo
|
||||
|
||||
Execute a command with elevated privileges (sudo) as the root user:
|
||||
|
||||
```bash
|
||||
ansible -m command -a "uptime" all -i server.ini --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
### Install a Package
|
||||
|
||||
Install the `nginx` package on all servers:
|
||||
|
||||
```bash
|
||||
ansible -m apt -a "name=nginx state=present" --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
### Uninstall a Package
|
||||
|
||||
Remove the `nginx` package from all servers:
|
||||
|
||||
```bash
|
||||
ansible -m apt -a "name=nginx state=absent" --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
### Update and Upgrade Packages
|
||||
|
||||
Update the package list and upgrade all packages:
|
||||
|
||||
```bash
|
||||
ansible -m apt -a "upgrade=yes update_cache=yes" --become --become-user root --become-method sudo
|
||||
```
|
||||
|
||||
## Advanced Usage and Notes
|
||||
|
||||
### Special Considerations
|
||||
|
||||
- **Module Limitations**: The `command` module does not support special characters or shell features. For commands requiring shell features (like pipes or redirection), use the `shell` module.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
ansible -m shell -a "cat /etc/passwd | grep -l" all -i server.ini --become
|
||||
```
|
||||
|
||||
- **Raw Module**: Use the `raw` module for devices that do not have Python installed. It allows you to execute raw SSH commands directly.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
ansible -m raw -a "hostnamectl" all -i server.ini --become
|
||||
```
|
||||
|
||||
### Gathering System Facts
|
||||
|
||||
Use the `setup` module to gather system facts from all servers:
|
||||
|
||||
```bash
|
||||
ansible -m setup --become all -i server.ini
|
||||
```
|
||||
|
||||
You can filter specific facts:
|
||||
|
||||
```bash
|
||||
ansible -m setup -a "filter=ansible_memory" --become all -i server.ini
|
||||
ansible -m setup -a "filter=ansible_distribution" --become all -i server.ini
|
||||
```
|
||||
|
||||
### Installing Ansible Galaxy Collections
|
||||
|
||||
To install the `ansible.posix` collection, use:
|
||||
|
||||
```bash
|
||||
ansible-galaxy collection install ansible.posix
|
||||
```
|
||||
Reference in New Issue
Block a user