1、实现 Httpd 角色
# 创建角色相关的目录
[root@ansible roles]# ansible-galaxy role init httpd
- Role httpd was created successfully
[root@ansible roles]# ll
total 0
drwxr-xr-x 10 root root 154 Dec 15 08:52 httpd
[root@ansible roles]# tree
.
└── httpd
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
9 directories, 8 files
# main.yml 是task的入口文件
[root@ansible httpd]# vim tasks/main.yml
---
# tasks file for httpd
- include: group.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
[root@ansible httpd]# vim tasks/group.yml
- name: create apache group
group:
name: apache
system: yes
gid: 80
[root@ansible httpd]# vim tasks/user.yml
- name: create apache user
user:
name: apache
system: yes
shell: /sbin/nologin
home: /var/www/
uid: 80
group: apache
[root@ansible httpd]# vim tasks/install.yml
- name: install httpd package
yum:
name: httpd
# 文件是放在files目录下,但src的路径无需写files目录名
[root@ansible httpd]# vim tasks/config.yml
- name: config file
copy:
src: httpd.conf
dest: /etc/httpd/conf/
backup: yes
notify: restart
[root@ansible httpd]# vim tasks/index.yml
- name: index.html
copy:
src: index.html
dest: /var/www/html/
[root@ansible httpd]# vim tasks/service.yml
- name: start service
service:
name: httpd
state: started
enabled: yes
[root@ansible httpd]# vim handlers/main.yml
---
# handlers file for httpd
- name: restart
service:
name: httpd
state: restarted
# 在files目录下准备两个文件
[root@ansible httpd]# vim files/index.html
Hello Ansible Roles
# 准备一份httpd配置文件
[root@ansible ansible]# cp /etc/httpd/conf/httpd.conf /root/roles/httpd/files/
# 查看httpd角色下文件
[root@ansible roles]# tree
.
└── httpd
├── defaults
│ └── main.yml
├── files
│ ├── httpd.conf
│ └── index.html
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── config.yml
│ ├── group.yml
│ ├── index.yml
│ ├── install.yml
│ ├── main.yml
│ ├── service.yml
│ └── user.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
# 在playbook中调用角色
[root@ansible ~]# vim httpd_role.yml
---
# httpd role
- hosts: webservers
remote_user: root
roles:
- httpd
[root@ansible ~]# ansible-playbook httpd_role.yml
PLAY [webservers] *****************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.13]
ok: [192.168.1.12]
TASK [httpd : create apache group] ************************************************************************************************
changed: [192.168.1.12]
changed: [192.168.1.13]
TASK [httpd : create apache user] *************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
TASK [install httpd package] ******************************************************************************************************
changed: [192.168.1.12]
changed: [192.168.1.13]
TASK [httpd : config file] ********************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
TASK [httpd : index.html] *********************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
TASK [httpd : start service] ******************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
RUNNING HANDLER [httpd : restart] *************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
PLAY RECAP ************************************************************************************************************************
192.168.1.12 : ok=8 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.13 : ok=8 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# 验证
[root@ansible ~]# curl http://192.168.1.12:8080
Hello Ansible Roles
[root@ansible ~]# curl http://192.168.1.13:8080
Hello Ansible Roles
2、实现 Nginx 角色
[root@ansible roles]# ansible-galaxy role init nginx
- Role nginx was created successfully
[root@ansible roles]# tree nginx
nginx
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
[root@ansible nginx]# vim tasks/main.yml
---
# tasks file for nginx
- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
[root@ansible nginx]# vim tasks/install.yml
- name: install
yum:
name: nginx
[root@ansible nginx]# vim tasks/config.yml
- name: config file for centos7
template:
src: nginx7.conf.j2
dest: /etc/nginx/nginx.conf
when: ansible_distribution_major_version=="7"
notify: restart
- name: config file for centos8
template:
src: nginx8.conf.j2
dest: /etc/nginx/nginx.conf
when: ansible_distribution_major_version=="8"
notify: restart
# 跨角色调用文件
[root@ansible nginx]# vim tasks/index.yml
- name: index.html
copy:
src: roles/httpd/files/index.html
dest: /usr/share/nginx/html/
[root@ansible nginx]# vim tasks/service.yml
- name: start service
service:
name: nginx
state: started
enabled: yes
# 创建handler文件
[root@ansible nginx]# vim handlers/main.yml
---
# handlers file for nginx
- name: restart
service:
name: nginx
state: restarted
# 创建两个template文件
[root@ansible nginx]# vim templates/nginx7.conf.j2
...省略...
user {{user}};
worker_processes {{ansible_processor_vcpus+3}}; #修改此行
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
...省略...
[root@ansible nginx]# vim templates/nginx8.conf.j2
...省略...
user {{user}};
worker_processes {{ansible_processor_vcpus**3}}; #修改此行
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
...省略...
# 创建变量文件
[root@ansible nginx]# vim vars/main.yml
---
# vars file for nginx
user: daemon
[root@ansible nginx]# tree
.
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── config.yml
│ ├── index.yml
│ ├── install.yml
│ ├── main.yml
│ └── service.yml
├── templates
│ ├── nginx7.conf.j2
│ └── nginx8.conf.j2
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
# 在playbook中调用角色
[root@ansible ~]# vim nginx_role.yml
---
#nginx role
- hosts: webservers
roles:
- role: nginx
[root@ansible ~]# ansible-playbook nginx_role.yml
PLAY [webservers] *****************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.13]
ok: [192.168.1.12]
TASK [nginx : install] ************************************************************************************************************
changed: [192.168.1.12]
changed: [192.168.1.13]
TASK [nginx : config file for centos7] ********************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
TASK [nginx : config file for centos8] ********************************************************************************************
skipping: [192.168.1.13]
skipping: [192.168.1.12]
TASK [nginx : index.html] *********************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
TASK [nginx : start service] ******************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
RUNNING HANDLER [nginx : restart] *************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]
PLAY RECAP ************************************************************************************************************************
192.168.1.12 : ok=6 changed=5 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
192.168.1.13 : ok=6 changed=5 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
[root@ansible ~]# curl http://192.168.1.12
Hello Ansible Roles
[root@ansible ~]# curl http://192.168.1.13
Hello Ansible Roles
3、实现 Memcached 角色
[root@ansible roles]# ansible-galaxy role init memcached
- Role memcached was created successfully
[root@ansible roles]# tree memcached
memcached
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
[root@ansible memcached]# vim tasks/main.yml
---
# tasks file for memcached
- include: install.yml
- include: config.yml
- include: service.yml
[root@ansible memcached]# vim tasks/install.yml
- name: install
yum:
name: memcached
[root@ansible memcached]# vim tasks/config.yml
- name: config file
template:
src: memcached.j2
dest: /etc/sysconfig/memcached
[root@ansible memcached]# vim tasks/service.yml
- name: service
service:
name: memcached
state: started
enabled: yes
[root@ansible memcached]# vim templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ansible_memtotal_mb//4}}"
OPTIONS=""
[root@ansible memcached]# tree
.
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── config.yml
│ ├── install.yml
│ ├── main.yml
│ └── service.yml
├── templates
│ └── memcached.j2
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
[root@ansible ~]# vim memcached_role.yml
---
- hosts: dbservers
roles:
- role: memcached
[root@ansible ~]# ansible-playbook memcached_role.yml
PLAY [dbservers] ******************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.21]
TASK [memcached : install] ********************************************************************************************************
changed: [192.168.1.21]
TASK [memcached : config file] ****************************************************************************************************
changed: [192.168.1.21]
TASK [memcached : service] ********************************************************************************************************
changed: [192.168.1.21]
PLAY RECAP ************************************************************************************************************************
192.168.1.21 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@mem ~]# ps -ef | grep memcache
memcach+ 27582 1 0 09:50 ? 00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 942 -c 1024
root 27605 1441 0 09:51 pts/0 00:00:00 grep --color=auto memcache
4、实现 MySQL5.7 或 8.0 的角色
[root@ansible roles]# ansible-galaxy role init mysql8
- Role mysql8 was created successfully
[root@ansible roles]# tree mysql8
mysql8
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
[root@ansible mysql8]# vim files/my.cnf
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
[root@ansible mysql8]# vim vars/main.yml
---
# vars file for mysql8
mysql_version: 8.0.28
mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz
mysql_root_password: 123456
[root@ansible mysql8]# vim tasks/main.yml
---
# tasks file for mysql8
- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: linkfile.yml
- include: data.yml
- include: config.yml
- include: script.yml
- include: path.yml
- include: service.yml
- include: secure.yml
[root@ansible mysql8]# vim tasks/install.yml
- name: install packages
yum:
name:
- libaio
- numactl-libs
- name: create directory
file:
path: /data/mysql
state: directory
[root@ansible mysql8]# vim tasks/group.yml
- name: create mysql group
group:
name: mysql
gid: 306
[root@ansible mysql8]# vim tasks/user.yml
- name: create mysql user
user:
name: mysql
uid: 306
group: mysql
shell: /sbin/nologin
system: yes
create_home: no
home: /data/mysql
[root@ansible mysql8]# vim tasks/unarchive.yml
- name: copy tar to remote host and file mode
unarchive:
src: "{{ mysql_file }}"
dest: /usr/local/
owner: root
group: root
[root@ansible mysql8]# vim tasks/linkfile.yml
- name: create linkfile /usr/local/mysql
file:
src: /usr/local/mysql-{{ mysql_version }}-linux-glibc2.12-x86_64
dest: /usr/local/mysql
state: link
[root@ansible mysql8]# vim tasks/config.yml
- name: config my.cnf
copy:
src: my.cnf
dest: /etc/my.cnf
[root@ansible mysql8]# vim tasks/script.yml
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@ansible mysql8]# vim tasks/path.yml
- name: PATH variable
copy:
content: 'PATH=/usr/local/mysql/bin:$PATH'
dest: /etc/profile.d/mysql.sh
[root@ansible mysql8]# vim tasks/service.yml
- name: enable service
shell: chkconfig --add mysqld;/etc/init.d/mysqld start
tags: service
[root@ansible mysql8]# vim tasks/secure.yml
- name: change password
shell: /usr/local/mysql/bin/mysqladmin -uroot password {{mysql_root_password}}
[root@ansible ~]# vim mysql8_role.yml
---
- hosts: dbservers
remote_user: root
gather_facts: no
roles:
- mysql8
[root@ansible ~]# ansible-playbook mysql8_role.yml
PLAY [dbservers] ******************************************************************************************************************
TASK [mysql8 : install packages] **************************************************************************************************
ok: [192.168.1.21]
TASK [mysql8 : create directory] **************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : create mysql group] ************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : create mysql user] *************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : copy tar to remote host and file mode] *****************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : create linkfile /usr/local/mysql] **********************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : data dir] **********************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : config my.cnf] *****************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : service script] ****************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : PATH variable] *****************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : enable service] ****************************************************************************************************
changed: [192.168.1.21]
TASK [mysql8 : change password] ***************************************************************************************************
changed: [192.168.1.21]
PLAY RECAP ************************************************************************************************************************
192.168.1.21 : ok=12 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
5、实现 MySQL 5.6 的角色
[root@ansible roles]# ansible-galaxy role init mysql5.6
- Role mysql5.6 was created successfully
[root@ansible roles]# tree mysql5.6/
mysql5.6/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
[root@ansible mysql5.6]# vim files/my.cnf
[mysqld]
socket=/tmp/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
log-bin
pid-file=/data/mysql/mysqld.pid
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
[root@ansible mysql5.6]# vim files/secure_mysql.sh
#!/bin/bash
/usr/local/mysql/bin/mysql_secure_installation <<EOF
y
123456
123456
y
y
y
y
EOF
[root@ansible mysql5.6]# ll files/
total 333608
-rw-r--r-- 1 root root 232 Dec 15 13:45 my.cnf
-rw-r--r-- 1 root root 341603885 Nov 15 09:21 mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
-rwxr-xr-x 1 root root 94 Dec 15 13:46 secure_mysql.sh
[root@ansible mysql5.6]# vim vars/main.yml
---
# vars file for mysql5.6
mysql_version: mysql-5.6.51-linux-glibc2.12-x86_64
mysql_file: {{mysql_version}}.tar.gz
[root@ansible mysql5.6]# vim tasks/main.yml
---
# tasks file for mysql5.6
- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: link.yml
- include: data.yml
- include: config.yml
- include: service.yml
- include: path.yml
- include: secure.yml
[root@ansible mysql5.6]# vim tasks/install.yml
- name: install packages
yum:
name:
- libaio
- perl-Data-Dumper
- perl-Getopt-Long
- name: create directory
file:
path: /data/mysql
state: directory
[root@ansible mysql5.6]# vim tasks/group.yml
- name: create mysql group
group:
name: mysql
gid: 306
[root@ansible mysql5.6]# vim tasks/user.yml
- name: create mysql user
user:
name: mysql
uid: 306
group =mysql
shell: /sbin/nologin
system: yes
create_home: no
home: /data/mysql
[root@ansible mysql5.6]# vim tasks/unarchive.yml
- name: copy tar to remote host and file mode
unarchive:
src: "{{ mysql_file }}"
dest: /usr/local/
owner: root
group: root
[root@ansible mysql5.6]# vim tasks/link.yml
- name: mkdir /usr/local/mysql
file:
src: /usr/local/{{mysql_version}}
dest: /usr/local/mysql
state: link
[root@ansible mysql5.6]# vim tasks/data.yml
- name: data dir
shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[root@ansible mysql5.6]# vim tasks/config.yml
- name: config my.cnf
copy:
src: my.cnf
dest: /etc/my.cnf
[root@ansible mysql5.6]# vim tasks/service.yml
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld;chkconfig --add mysqld;chkconfig mysqld on;/etc/init.d/mysqld start
[root@ansible mysql5.6]# vim tasks/path.yml
- name: PATH variable
copy:
content: 'PATH=/usr/local/mysql/bin:$PATH'
dest: /etc/profile.d/mysql.sh
[root@ansible mysql5.6]# vim tasks/secure.yml
- name: secure script
script: secure_mysql.sh
[root@ansible mysql5.6]# tree
.
├── defaults
│ └── main.yml
├── files
│ ├── my.cnf
│ ├── mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
│ └── secure_mysql.sh
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── config.yml
│ ├── data.yml
│ ├── group.yml
│ ├── install.yml
│ ├── link.yml
│ ├── main.yml
│ ├── path.yml
│ ├── secure.yml
│ ├── service.yml
│ ├── unarchive.yml
│ └── user.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
[root@ansible ~]# vim mysql5.6_role.yml
- hosts: dbservers
remote_user: root
roles:
- mysql5.6
[root@ansible ~]# ansible-playbook mysql5.6_role.yml
PLAY [dbservers] ******************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.21]
TASK [mysql5.6 : install packages] ************************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : create directory] ************************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : create mysql group] **********************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : create mysql user] ***********************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : copy tar to remote host and file mode] ***************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : mkdir /usr/local/mysql] ******************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : data dir] ********************************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : config my.cnf] ***************************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : service script] **************************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : PATH variable] ***************************************************************************************************
changed: [192.168.1.21]
TASK [mysql5.6 : secure script] ***************************************************************************************************
changed: [192.168.1.21]
PLAY RECAP ************************************************************************************************************************
192.168.1.21 : ok=12 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END