网站集群批量管理-Ansible剧本与变量

复盘内容:链接指南

查看ansible命令文档

sh 复制代码
ansible-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中定义变量应用:

  1. 仅仅在当前play生效.
  2. 一般用来存放路径,用户名,ip地址,类似于之前使用的脚本.
  3. 注意引号使用.

使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号.

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 标准输出.

相关推荐
小黑爱编程几秒前
【LInux】HTTPS是如何实现安全传输的
linux·安全·https
BeyondESH5 分钟前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++
hanniuniu138 分钟前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
鱼饼6号21 分钟前
Prometheus 上手指南
linux·运维·centos·prometheus
Asher Gu27 分钟前
Linux系统编程入门 | 模拟实现 ls -l 命令
linux
c无序44 分钟前
【Linux进程控制】进程程序替换
linux
m0_609000422 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记3 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
CoolTiger、6 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
m0_741768857 小时前
使用docker的小例子
运维·docker·容器