项目目录结构
ansible-project/
├── inventory
│ └── hosts
├── roles
│ ├── common
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ └── templates
│ │ └── example.conf.j2
│ └── webserver
│ ├── tasks
│ │ └── main.yml
│ ├── handlers
│ │ └── main.yml
│ └── templates
│ └── nginx.conf.j2
├── playbooks
│ ├── site.yml
│ └── webservers.yml
└── vars
└── main.yml
inventory/hosts 文件内容
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
roles/common/tasks/main.yml
- name: Update apt cache
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 3600
- name: Install common packages
ansible.builtin.apt:
name: "{{ item }}"
state: present
with_items:
- python3-pip
- git
roles/webserver/tasks/main.yml
- name: Install Nginx
ansible.builtin.apt:
name: nginx
state: present
- name: Configure Nginx
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
- restart nginx
- name: Ensure Nginx is running
ansible.builtin.service:
name: nginx
state: started
roles/webserver/handlers/main.yml
- name: restart nginx
ansible.builtin.service:
name: nginx
state: restarted
playbooks/site.yml
- name: Apply common configuration to all hosts
hosts: all
roles:
- common
- name: Configure webservers
hosts: webservers
roles:
- webserver
playbooks/webservers.yml
- name: Configure webservers
hosts: webservers
roles:
- webserver
vars/main.yml
nginx_user: nginx
nginx_worker_processes: 4
roles/webserver/templates/nginx.conf.j2
user {{ nginx_user }};
worker_processes {{ nginx_worker_processes }};
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name _;
location / {
root /var/www/html;
index index.html index.htm;
}
}
}
通过以上代码,我们可以实现一个基本的Ansible自动化运维项目,包括更新系统包、安装Nginx、配置Nginx以及启动Nginx服务。在实际使用中,可以根据具体需求调整角色和任务。