准备工作
创建roles目录
# mkdir -pv /data/apps/ansible/roles/nginx/{tasks,handlers,templates,vars}
hosts
[ubuntu]
172.16.18.31 ansible_ssh_port=22 ansible_ssh_user=ubuntu hostname=app-01
测试连通性
# ansible ubuntu -m ping
172.16.18.247 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
创建角色相关文件
tasks/main.yml
- include: user.yml
- include: install_deps.yml
- include: unarchive.yml
- include: conf.yml
- include: service.yml
tasks/user.yml
- name: create nginx group
group:
name: "{{ user }}"
state: present
gid: "{{ uid }}"
- name: create nginx user
user:
name: "{{ user }}"
group: "{{ user }}"
shell: /bin/false
system: yes
comment: Nginx Server
uid: "{{ uid }}"
home: /data/apps/nginx
tasks/install_deps.yml
- name: install nginx for ubuntu22.04
apt: name=libssl-dev,zlib1g-dev,libgd-dev,libgeoip-dev,libpcre3-dev
when: ansible_distribution_version=="22.04"
tasks/unarchive.yml
- name: Create a directory if it does not exist
ansible.builtin.file:
path: /data/apps/nginx
state: directory
mode: '0755'
owner: "{{ user }}"
group: "{{ user }}"
- name: copy tar to remote nginx ubuntu22.04
unarchive:
src: nginx-1.22.1.tar.gz
dest: /data/apps/nginx/
owner: "{{ user }}"
group: "{{ user }}"
when: ansible_distribution_version=="22.04"
- name: link nginx
file:
src: /data/apps/nginx/nginx-1.22.1
dest: /usr/local/nginx
state: link
tasks/conf.yml
- name: config file
template: src=nginx.conf.j2 dest=/usr/local/nginx/conf/nginx.conf
notify: restart nginx
tasks/service.yml
- name: service nginx script
copy:
src: nginx.service
dest: /lib/systemd/system/nginx.service
- name: start nginx service
systemd:
name: nginx
state: started
enabled: yes
handlers/main.yml
- name: restart nginx
systemd:
name: nginx.service
state: restarted
daemon_reload: true
templates/nginx.conf.j2
user {{ user }};
worker_processes auto;
.....
查看相关文件
# tree /data/apps/ansible/roles/nginx/
/data/apps/ansible/roles/nginx/
├── files
│ ├── nginx-1.22.1.tar.gz
│ └── nginx.service
├── handlers
│ └── main.yml
├── tasks
│ ├── conf.yml
│ ├── install_deps.yml
│ ├── main.yml
│ ├── service.yml
│ ├── unarchive.yml
│ └── user.yml
├── templates
│ └── nginx.conf.j2
└── vars
5 directories, 10 files
playbook调用角色
nginx_roles.yml
- hosts: ubuntu
remote_user: ubuntu
become: yes
roles:
- role: nginx
user: nginx
uid: 113
运行playbook
# ansible-playbook nginx_roles.yml
查看执行结果
nginx
# ls -l /usr/local/nginx
lrwxrwxrwx 1 root root 29 Mar 31 15:14 /usr/local/nginx -> /data/apps/nginx/nginx-1.22.1
# ls -l /data/apps/nginx/
total 4
drwxr-xr-x 11 nginx nginx 4096 Mar 31 16:46 nginx-1.22.1