1.目录说明:
[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 /etc/ansible/roles]# tree
.
├── init #角色名称
│ ├── files #存放需要copy的文件
│ ├── handlers #触发任务剧本
│ ├── tasks #具体任务剧本
│ ├── templates #模版文件
│ └── vars #存放变量文件
1.编写init初始化角色剧本
01.创建对应目录
[root@m01 /etc/ansible/roles]# mkdir init/{vars,tasks,templates,handlers,files} -p
02.编写任务剧本
#配置ssh配置文件
- name: 0-ssh
template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
#配置selinux
- name: 01-selinux
selinux:
state: disabled
#配置firewalld防火墙
- name: 02-firewalld
service:
name: firewalld
state: stopped
enabled: yes
#安装CentOS-Base.repo和epel.repo源
- name: 03-yum
copy:
src: "/etc/yum.repos.d/{{ item.src }}"
dest: /opt/
loop:
- {src: 'CentOS-Base.repo'}
- {src: 'epel.repo'}
#安装常用软件
- name: 04-yum-Software
yum:
name: "{{ item }}"
state: latest
loop:
- tree
- nmap
- sysstat
- lrzsz
- dos2unix
- telnet
- bash-completion
- bash-completion-extras
- lsof
- net-tools
- ntpdate
tags: 04-yum
#创建统一用户组
- name: 05-create-group
group:
name: www
gid: 666
#创建统一用户
- name: 06-create-user
user:
name: www
create_home: no
shell: /sbin/nologin
group: www
uid: 666
#创建统一目录
- name: 07-create-dir
file:
path: "{{ item }}"
state: directory
owner: www
group: www
loop:
- /data
- /backup
03.编写jinja模版文件
[root@m01 /etc/ansible/roles/init/templates]# cp /etc/ssh/sshd_config .
[root@m01 /etc/ansible/roles/init/templates]# mv sshd_config sshd_config.j2
04.编写变量文件
######内置变量
05.编写handlers文件
#######没用handlers
06.编写主任务文件
[root@m01 /etc/ansible/roles]# vim init.yml
- hosts: init
roles:
- init
07.查看最终目录文件
[root@m01 /etc/ansible/roles/init]# tree
.
├── files
├── handlers
├── tasks
│ └── main.yml
├── templates
│ └── sshd_config.j2
└── vars
2.编写nginx_server角色剧本
01.创建对应目录
[root@m01 /etc/ansible/roles]# mkdir nginx_server/{vars,tasks,templates,handlers,files} -p
02.编写任务剧本
[root@m01 /etc/ansible/roles/nginx_server/tasks]# vim main.yml
#拷贝nginx新源配置文件
- name: 01-templates-file
template:
src: nginx.repo.j2
dest: /etc/yum.repos.d/
notify:
- restart nginx
#安装1.16.1-nginx
- name: 02-yum-install
yum:
name: nginx
state: latest
#启动nginx服务
- name: 03-serivce
service:
name: nginx
state: started
03.编写jinja模版文件
[root@m01 /etc/ansible/roles/nginx_server/templates]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[root@m01 /etc/ansible/roles/nginx_server/templates]# mv nginx.repo nginx.repo.j2
04.编写变量文件
###########没用变量
05.编写handlers文件
[root@m01 /etc/ansible/roles/nginx_server/handlers]# vim main.yml
#重启nginx服务
- name: restart nginx
service:
name: nginx
state: restarted
06.编写主任务文件
[root@m01 /etc/ansible/roles]# vim nginx_server.yml
- hosts: web
roles:
- nginx_server
07.查看最终目录文件
[root@m01 /etc/ansible/roles/nginx_server]# tree
.
├── files
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── nginx.repo.j2
└── vars
3.编写php-fpm角色剧本
01.创建对应目录
[root@m01 /etc/ansible/roles]# mkdir php-fpm/{vars,tasks,templates,handlers,files} -p
02.编写任务剧本
[root@m01 /etc/ansible/roles/php-fpm/tasks]# vim main.yml
#安装php-fpm
- name: 01-yum-install
yum:
name: "{{ item }}"
state: latest
loop:
- php71w
- php71w-cli
- php71w-common
- php71w-devel
- php71w-embedded
- php71w-gd
- php71w-mcrypt
- php71w-mbstring
- php71w-pdo
- php71w-xml
- php71w-fpm
- php71w-mysqlnd
- php71w-opcache
#拷贝php-fpm配置文件
- name: 02-temlate
copy:
src: www.conf
dest: /etc/php-fpm.d/
notify:
- restart php-fpm
#启动php-fpm服务
- name: 03-start-php-fpm
service:
name: php-fpm
state: started
03.编写files文件
[root@m01 /etc/ansible/roles/php-fpm/files]# cp /root/www.conf .
04.编写变量文件
#######没有var文件
05.编写handlers文件
#######没有handlers文件
06.编写主任务文件
[root@m01 /etc/ansible/roles]# vim nfs_client.yml
- hosts: web
roles:
- php-fpm
07.查看最终目录文件
[root@m01 /etc/ansible/roles/nfs_client]# tree
.
├── files
│ └── www.conf
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
4.编写MySQL角色剧本
01.创建对应目录
[root@m01 /etc/ansible/roles]# mkdir mysql/{vars,tasks,templates,handlers,files} -p
02.编写任务剧本
[root@m01 /etc/ansible/roles/mysql/tasks]# vim main.yml
#安装数据库
- name: 01-install
yum:
name:
- mariadb
- mariadb-server
- MySQL-python
state: latest
notify:
- 02set_root_password
- 03drop_test
- 04drop_user
- 05create_remote_user
- 06copy_sql
- 07import_sql
#启动mariadb服务
- name: 02-start
service:
name: mariadb
state: started
#拷贝mysql配置文件
- name: 03-copy_conf
template:
src: my.cnf.j2
dest: /etc/my.cnf
notify: 01restart_mysql
03.编写jinja模版文件
[root@m01 /etc/ansible/roles/mysql/templates]# cp /root/my.cnf .
[root@m01 /etc/ansible/roles/mysql/templates]# mv my.cnf my.cnf.j2
04.编写files文件
[root@m01 /etc/ansible/roles/mysql/files]# cp /root/mysql.sql . #拷贝倒出数据库的文件
05.编写handlers文件
[root@m01 /etc/ansible/roles/mysql/handlers]# vim main.yml
#重启mariadb服务
- name: 01restart_mysql
service:
name: mariadb
state: restarted
#登录mysql
- name: 02set_root_password
mysql_user:
name: root
password: '123456'
#mysql中创建test库
- name: 03drop_test
mysql_db:
login_user: root
login_password: '123456'
name: test
state: absent
#mysql创建 '' 库
- name: 04drop_user
mysql_user:
login_user: root
login_password: '123456'
name: ''
host_all: yes
state: absent
#创建远程登录用户所有172.16.1.0/24网段都可以
- name: 05create_remote_user
mysql_user:
login_user: root
login_password: '123456'
name: web
password: '123456'
priv: '*.*:ALL'
host: '172.16.1.%'
state: present
#拷贝导出来的mysql文件
- name: 06copy_sql
copy:
src: mysql.sql
dest: /opt/
#登录数据库导入到下面的路径
- name: 07import_sql
mysql_db:
login_user: root
login_password: '123456'
name: wordpress
state: import
target: /opt/mysql.sql
06.编写主任务文件
[root@m01 /etc/ansible/roles]# vim mysql.yml
- hosts: mysql
roles:
- mysql
07.查看最终目录文件
[root@m01 /etc/ansible/roles/mysql]# tree
.
├── files
│ └── mysql.sql
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── my.cnf.j2
└── vars
网友评论