342 lines
5.1 KiB
Markdown
342 lines
5.1 KiB
Markdown
# Ansible Modules Reference
|
|
|
|
## File Operations
|
|
|
|
### copy
|
|
|
|
```yaml
|
|
- name: Copy file
|
|
ansible.builtin.copy:
|
|
src: files/config.conf
|
|
dest: /etc/app/config.conf
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
backup: true
|
|
```
|
|
|
|
### template
|
|
|
|
```yaml
|
|
- name: Template config
|
|
ansible.builtin.template:
|
|
src: templates/config.j2
|
|
dest: /etc/app/config.conf
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
notify: Restart app
|
|
```
|
|
|
|
### file
|
|
|
|
```yaml
|
|
# Create directory
|
|
- name: Create directory
|
|
ansible.builtin.file:
|
|
path: /opt/app
|
|
state: directory
|
|
owner: app
|
|
group: app
|
|
mode: '0755'
|
|
|
|
# Create symlink
|
|
- name: Create symlink
|
|
ansible.builtin.file:
|
|
src: /opt/app/current
|
|
dest: /opt/app/release
|
|
state: link
|
|
|
|
# Delete file
|
|
- name: Remove file
|
|
ansible.builtin.file:
|
|
path: /tmp/old-file
|
|
state: absent
|
|
```
|
|
|
|
### lineinfile
|
|
|
|
```yaml
|
|
- name: Ensure line in file
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/hosts
|
|
line: "192.168.1.10 myhost"
|
|
state: present
|
|
|
|
- name: Replace line
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/config
|
|
regexp: '^PORT='
|
|
line: 'PORT=8080'
|
|
```
|
|
|
|
## Package Management
|
|
|
|
### apt (Debian/Ubuntu)
|
|
|
|
```yaml
|
|
- name: Install package
|
|
ansible.builtin.apt:
|
|
name: nginx
|
|
state: present
|
|
update_cache: true
|
|
|
|
- name: Install multiple
|
|
ansible.builtin.apt:
|
|
name:
|
|
- nginx
|
|
- python3
|
|
state: present
|
|
|
|
- name: Remove package
|
|
ansible.builtin.apt:
|
|
name: nginx
|
|
state: absent
|
|
```
|
|
|
|
### package (Generic)
|
|
|
|
```yaml
|
|
- name: Install package
|
|
ansible.builtin.package:
|
|
name: httpd
|
|
state: present
|
|
```
|
|
|
|
## Service Management
|
|
|
|
### service
|
|
|
|
```yaml
|
|
- name: Start and enable
|
|
ansible.builtin.service:
|
|
name: nginx
|
|
state: started
|
|
enabled: true
|
|
|
|
- name: Restart
|
|
ansible.builtin.service:
|
|
name: nginx
|
|
state: restarted
|
|
|
|
- name: Reload
|
|
ansible.builtin.service:
|
|
name: nginx
|
|
state: reloaded
|
|
```
|
|
|
|
### systemd
|
|
|
|
```yaml
|
|
- name: Daemon reload
|
|
ansible.builtin.systemd:
|
|
daemon_reload: true
|
|
|
|
- name: Enable and start
|
|
ansible.builtin.systemd:
|
|
name: myapp
|
|
state: started
|
|
enabled: true
|
|
```
|
|
|
|
## Command Execution
|
|
|
|
### command
|
|
|
|
```yaml
|
|
- name: Run command
|
|
ansible.builtin.command: /bin/mycommand arg1 arg2
|
|
register: result
|
|
changed_when: "'changed' in result.stdout"
|
|
```
|
|
|
|
### shell
|
|
|
|
```yaml
|
|
- name: Run shell command
|
|
ansible.builtin.shell: |
|
|
cd /opt/app
|
|
./setup.sh && ./configure.sh
|
|
args:
|
|
executable: /bin/bash
|
|
```
|
|
|
|
### script
|
|
|
|
```yaml
|
|
- name: Run local script on remote
|
|
ansible.builtin.script: scripts/setup.sh
|
|
args:
|
|
creates: /opt/app/.installed
|
|
```
|
|
|
|
## User Management
|
|
|
|
### user
|
|
|
|
```yaml
|
|
- name: Create user
|
|
ansible.builtin.user:
|
|
name: appuser
|
|
groups: docker,sudo
|
|
shell: /bin/bash
|
|
create_home: true
|
|
state: present
|
|
|
|
- name: Remove user
|
|
ansible.builtin.user:
|
|
name: olduser
|
|
state: absent
|
|
remove: true
|
|
```
|
|
|
|
### group
|
|
|
|
```yaml
|
|
- name: Create group
|
|
ansible.builtin.group:
|
|
name: appgroup
|
|
state: present
|
|
```
|
|
|
|
## Docker (community.docker)
|
|
|
|
### docker_container
|
|
|
|
```yaml
|
|
- name: Run container
|
|
community.docker.docker_container:
|
|
name: myapp
|
|
image: myapp:latest
|
|
state: started
|
|
restart_policy: unless-stopped
|
|
ports:
|
|
- "8080:80"
|
|
volumes:
|
|
- /data:/app/data
|
|
env:
|
|
DB_HOST: database
|
|
```
|
|
|
|
### docker_compose_v2
|
|
|
|
```yaml
|
|
- name: Deploy with compose
|
|
community.docker.docker_compose_v2:
|
|
project_src: /opt/app
|
|
project_name: myapp
|
|
state: present
|
|
pull: always
|
|
env_files:
|
|
- /opt/app/.env
|
|
```
|
|
|
|
### docker_image
|
|
|
|
```yaml
|
|
- name: Pull image
|
|
community.docker.docker_image:
|
|
name: nginx
|
|
tag: "1.25"
|
|
source: pull
|
|
```
|
|
|
|
## Networking
|
|
|
|
### uri
|
|
|
|
```yaml
|
|
- name: API call
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:8080/api/health"
|
|
method: GET
|
|
return_content: true
|
|
register: response
|
|
|
|
- name: POST request
|
|
ansible.builtin.uri:
|
|
url: "http://api.example.com/data"
|
|
method: POST
|
|
body_format: json
|
|
body:
|
|
key: value
|
|
```
|
|
|
|
### wait_for
|
|
|
|
```yaml
|
|
- name: Wait for port
|
|
ansible.builtin.wait_for:
|
|
host: localhost
|
|
port: 8080
|
|
timeout: 300
|
|
|
|
- name: Wait for file
|
|
ansible.builtin.wait_for:
|
|
path: /var/log/app.log
|
|
search_regex: "Server started"
|
|
```
|
|
|
|
## Debug/Assert
|
|
|
|
### debug
|
|
|
|
```yaml
|
|
- name: Print variable
|
|
ansible.builtin.debug:
|
|
msg: "Value: {{ my_var }}"
|
|
|
|
- name: Print var directly
|
|
ansible.builtin.debug:
|
|
var: my_var
|
|
```
|
|
|
|
### assert
|
|
|
|
```yaml
|
|
- name: Validate conditions
|
|
ansible.builtin.assert:
|
|
that:
|
|
- my_var is defined
|
|
- my_var | length > 0
|
|
fail_msg: "my_var must be defined and non-empty"
|
|
success_msg: "Validation passed"
|
|
```
|
|
|
|
### fail
|
|
|
|
```yaml
|
|
- name: Fail with message
|
|
ansible.builtin.fail:
|
|
msg: "Required condition not met"
|
|
when: condition
|
|
```
|
|
|
|
## Misc
|
|
|
|
### pause
|
|
|
|
```yaml
|
|
- name: Wait 10 seconds
|
|
ansible.builtin.pause:
|
|
seconds: 10
|
|
|
|
- name: Wait for user
|
|
ansible.builtin.pause:
|
|
prompt: "Press enter to continue"
|
|
```
|
|
|
|
### stat
|
|
|
|
```yaml
|
|
- name: Check file exists
|
|
ansible.builtin.stat:
|
|
path: /etc/config
|
|
register: config_file
|
|
|
|
- name: Use result
|
|
ansible.builtin.debug:
|
|
msg: "File exists"
|
|
when: config_file.stat.exists
|
|
```
|