Ansible-playbook
playbook由一个或多个play组成,一个play可以包含多个task任务(使用多个不同的模块完成同一件事情)
playbook书写格式
缩进:YAML使用固定的缩进风格表示层级关系,每个缩进由两个空格组成(不能使用tabs)
冒号:所有冒号后面都需要有空格(除了使用冒号结尾的情况外)
短横线:表示列表项,使用一个短横线加一个空格,多个项使用同样的缩进级别作为同一列表
安装ansible
yum install ansible -y
验证安装版本
ansible --version
为项目单独创建配置文件(调整配置文件优先级)
ansible.cfg(复制默认的配置文件到指定项目的配置文件中)
关键配置:
#inventory = ./hosts(路径重新定义,进入该项目目录时读取当前目录的ansible.cfg)
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 (调整并行主机的数量)
#host_key_checking = False
#roles_path = /etc/ansible/roles
定义host主机清单
[root@manager ~]# vim /etc/ansible/hosts
检查定义的模块中有多少台主机
[root@manager ~]# ansible webservers --list-hosts
主机生成密钥
ssh-keygen -t rsa -b 2048
推送密钥给目标主机
方法一:[root@manager cluster]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.192
方法二:[root@manager ~]# ssh-keyscan -H 172.16.1.51 172.16.1.41 >> ~/.ssh/known_hosts
测试ping命令是否能通
[root@manager ~]# ansible dbservers -m ping
编写ansible-playbook(nginx剧本)
[root@manager ~]# vim project/test_p1.yml
模拟测试剧本(测试不一定成功)
[root@manager ~]# ansible-playbook -C project/test_p1.yml
真实执行
[root@manager ~]# ansible-playbook project/test_p1.yml
playbook编写nfs服务端
安装nfs
yum install nfs-utils -y
编写ansible剧本
1、安装(yum模块)
- hosts: webservers
tasks:
- name: install nfs
yum:
name: nfs-utils
state: present
2、配置(copy模块)
- name: cfg nfs
copy:
src: ./exports.j2
dest: /etc/exports
notify: Restart NFS
3、初始化(file/group/user模块)
- name: init group
group:
name: zzz
gid: 7777
- name: init user
user:
name: zzz
uid: 7777
group: zzz
shell: /sbin/nologin
create_home: no
- name: init creat directory
file:
path: /ansible_test
state: directory
owner: zzz
group: zzz
mode: "0755"
4、启动(systemd模块)
- name: start nfs
systemd:
name: nfs
state: started
enabled: yes
5、触发器(当copy模块中的文件内容发生变化时执行触发器 )
handlers:
- name: Restart NFS
systemd:
name: nfs
state: restarted
完整ansible剧本文件(nfs服务)
[root@manager project]# cat nfs.yml
- hosts: webservers(目标主机的hosts组别)
tasks:
- name: install nfs
yum:(管理软件包)
name: nfs-utils(需要安装的包名)
state: present(确保资源存在,不存在则安装,存在则保持或更新)
- name: cfg nfs
copy:(从ansible主控端复制文件到被控端)
src: ./exports.j2(复制当前目录的文件到远程服务器)
dest: /etc/exports(目标主机存放文件的路径)
notify: Restart NFS(若文件发生改变,则递交给触发器)
- name: init group
group:(管理被控端用户组)
name: zzz(创建的组名)
gid: 7777(指定组的gid)
- name: init user
user:(创建或删除用户名)
name: zzz(创建的用户名)
uid: 7777(设置创建的用户的uid)
group: zzz(给创建的用户设置组)
shell: /sbin/nologin(为用户设置登陆时的shell,禁止该用户登录主机)
create_home: no(不为该用户创建家目录)
- name: init creat directory
file:(为被控端创建文件或目录,设定权限)
path: /ansible_test(指定被控端的文件路径)
state: directory(检查目录是否存在,没有则创建)
owner: zzz(设定目录属主)
group: zzz(设定目录属组)
mode: "0755"(设定目录权限)
- name: start nfs
systemd:(管理服务的启动、停止、重启)
name: nfs(服务的名称)
state: started(指定服务状态)
enabled: yes(允许开机自启)
handlers:(触发器)
- name: Restart NFS(要匹配之前设定的notify名称)
systemd:(管理服务的启动、停止、重启)
name: nfs(指定服务名称)
state: restarted(指定重启操作)