复盘内容:链接指南
查看ansible命令文档
shansible-doc -s systemd
遇到复制VIM丢失bug------文章参考
产生原因:vi/vim中没有进入编辑模式,所以复制文本的时候,遇到o,i等进入编辑模式的字母时,之后的文本才会复制进去,所以之前的文本就看不到了。
解决方案:粘贴的时候,先进入编辑模式
一、剧本
何为剧本:
playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量
剧本yaml格式,yaml格式的文件:空格,冒号.
剧本未来我们批量管理,运维必会的内容.
ans剧本 | ans ad-hoc | |
---|---|---|
共同点 | 批量管理,使用模块 | 批量管理,使用模块 |
区别 | 重复调用 | 不是很方便,不容易重复 |
应用建议(应用场景) | 部署服务,多个步骤的任务 | 测试模块,临时性任务 |
案例:脚本书写格式
yaml
---
- hosts: all
tasks:
- name: 01 打开冰箱门
shell: echo 1 >>/tmp/bingxiang.log
- name: 02 把大象放入冰箱
shell: echo 2 >>/tmp/bingxiang.log
- name: 03 关上冰箱的门
shell: echo 3 >>/tmp/bingxiang.log
sh
#书写剧本 注意以.yml或.yamt结尾 01.show.yml
#执行脚本
mv /etc/ansible/hosts .
#-i 指定主机清单文件,如果不写默认调用/etc/ansible/hosts
ansible-playbook -i hosts 01.show.yml
执行的时候有奶牛:
可以删除软件或修改ansible.cfg配置进行关闭 #nocows =1去掉注释即可
书写Ans playbook注意事项:
- 同一个层级的内容对齐的0
- 不同层级的通过2个空格对齐
- 不能使用tab键
二、剧本案例
1、案例01: 创建目录并分发文件
创建目录/server/files/etc/hosts文件并且发送过去/server/files
yaml
---
- hosts: all
tasks:
- name: 01 创建目录/server/files
file:
path=/server/files
state=directory
- name: 02 分发文件
copy:
src=/etc/hosts
dest=/server/files
2、案例02:分发软件包,安装软件包,启动服务
zabbix-agent软件包(下载)---》 安装软件包---》配置(略)---》启动开机自启动
yaml
---
- hosts: all
takes:
- name: 01 软件包下载
get_url:
url: https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm
dest: /tmp/
validate_certs: no
- name: 02 安装软件包
yum:
name:/tmp/zabbix-agent-6.0.13-release1.el7.x86_64.rpm
state=insatlled
- name: 03 配置
debug:
msg: "进行配置zabbix-agent"
- name: 04 启动
systemd:
name: zabbix-agent
enabled: yes
state: started
sh
ansible all -m shell -a 'ps -ef | grep zabbix'
不能使用-m command
。在 Ansible 的命令模块中,你需要以单个字符串的形式指定要执行的命令,而不能使用管道符号 |
。
3、案例03:nfs服务
- nfs服务端:在backup上部署nfs服务,共享/backup-nfs目录,all_squash,匿名用户:nfsnobody
- nfs客户端:web挂载 /ans-upload目录挂载nfs服务端共亭的/backup-nfs(永久挂载)
写剧本必备-列出流程
服务端流程:
- 部署nfs-utils,rpcbind
- 修改配置文件
- 创建共享目录并改所有者
- 启动服务rpcbind,nfs(注意顺序)
客户端流程:
- 安装nfs-utils2.
- 挂载与永久挂载
yaml
---
- hosts: nfs
tasks:
- name: 01 部署nfs-utils,rpcbind
yum:
name: nfs-utils
state: installed
- name: 02 修改配置文件
lineinfile:
path: /etc/exports
line: "/backup-nfs/ 111.229.205.0/24(rw)"
create: true
- name: 03 创建共享目录并且修改权限
file:
path: /backup-nfs/
state: directory
owner: nfsnobody
group: nfsnobody
- name: 04-1 依次启动服务rpc
systemd:
name: rpcbind
enabled: yes
state: started
- name: 04-2 依次启动服务nfs
systemd:
name: nfs
enabled: yes
state: started
- hosts: web
tasks:
- name: 01 部署nfs-utils,rpcbind
yum:
name: nfs-utils
state: installed
- name: 02 永久挂载
mount:
src: 43.137.51.152:/backup-nfs/
path: /data/
fstype: nfs
state: mounted
三、Ansible中的变量
变量无处不在,在ans中大部分地方都可以定义变量.
比较常用的创建变量的地方:剧本中,类似于功能,共用的变量文件.
可以定义变量的地方 | 说明 |
---|---|
在剧本文件中定义 | 比较常用。仅仅限于当前的play使用, |
register变量(注册变量) | ip= hostname -I ,实现脚本中反引号的功能,可以获取命令结果 |
变量文件,根据主机清单分分组进行定义变量 | 如果多个剧本,使用相同的变量,大型的剧本roles |
inventory主机清单中定义变量 | 未来可以用于批量修改主机使用,其他很少用了 |
命令号中 | 几乎不用 |
facts变量 | 一般用于获取主机基本信息:ip,主机名,系统(centos/ubuntu)如果不需要可以关闭,用于加速剧本的执行 |
3.1、剧本中的变量
在剧本play中定义变量应用:
- 仅仅在当前play生效.
- 一般用来存放路径,用户名,ip地址,类似于之前使用的脚本.
- 注意引号使用.
使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号.
yaml
#dir就是变量,变量的内容:右边的内容
- hosts: all
vars:
dir: /oldboy/lidao/upload/
tasks:
- name: mkdir
file:
path: "{{ dir }}"
state: directory
面试常问:使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号.
3.2、共用变量-变量文件
yaml
[root@m01 /server/scripts/playbook]# cat 05.vars.yml
- hosts: all
vars_files: ./vars.yml
tasks:
- name: file
file:
path: "{{ dir }}/{{ user }}-{{ file }}"
state: touch
3.3、共用变量-根据主机组使用变量
group_vars根据主机清单的分组去匹配
yaml
group_vars/
lb/vars.yml #存放lb组的变量
web/vars.yml #存放web组的变量
data/vars.yml #存放xxx组的变量
all/vars.yml #所有主机共用的变量
未来一般使用all分组即可,把所有变量存放在一起,供剧本使用
yaml
user: www
nfs_dir: /nfs_backup
web_mount_dir: /web_nfs
nfs_server: 172.16.1.41
rsync_pass: 1
3.4、facts变量
运行剧本的时候ans会收集每个主机的本信息,这些信息形成的变量叫做facts变量,
facts变量setup模块获取
3.5、register变量注册变量
本质上就是用来实现脚本中的反引号功能
用户通过命令获取的内容都存放到Register变量
yaml
- hosts: all
tasks:
- name: get date
shell: date +%F
register: result
- name: print result 变量内容
debug:
msg: "register变量的全部内容是:{{result.stderr }}"
"register变量的精确的内容是:"{{result.stdout}}"
json形式数据.------》key: value
register变量result.
result.stdout==std standard output 标准输出.