自动化运维ansible(ansible-playbook)

一、ansible-playbook的构成

bash 复制代码
Inventory:主机列表,表示剧本中的任务要应用在哪些主机上;
Tasks:具体任务,即调用哪些模块完成操作,可以配置多个任务;
Variables:变量,包含内置变量和自定义变量;
Templates:模板,即使用模板语法来灵活变更配置文件;
Handlers与notify:触发器,由某事件触发执行的操作,比如修改配置文件后自动重启服务;

二、语法要求

bash 复制代码
(1)playbook本质是包含了一个或多个play的YAML配置文件,通常以.yaml或者.yml结尾;
(2)在单一的playbook文件中,使用连续的三个中横线(---)作为每个play的区分;
(3)缩进必须统一,不能空格和tab混合使用,缩进级别需要一致,同样的缩进代表同样的级别;
(4)冒号:冒号后面需要空格,除非以冒号结尾;
(5)短横杠:列表项,后面跟空格;
(6)缩进两个字符,默认的tab键是四个字符,所以要使用tab键,需要修改.vimrc;
[root@ansible ~]# vim /root/.vimrc
set tabstop=2

三、参数说明

bash 复制代码
--check | -C:只检测可能会发生的改变,但不真正执行操作;
--list-hosts:列出运行任务的主机;
--list-tags:列出playbook文件中定义的所有tags;
--list-tasks:列出playbook文件中定义的所有任务;
--syntax-check:语法检查
--limit:主机列表,只针对主机列表中的某个主机或者某个组执行;
-f:指定并发数,默认为5个;
-t:指定tags运行,运行某一个或者多个tags,前提是playbook中有定义tags;

四、示例

bash 复制代码
[root@192 ansible]# cat playbook01.yml
---                       #固定格式
- hosts: harbor      #定义需要执行的主机或主机组
  remote_user: root       #远程用户
  vars:                   #定义变量
    http_port: 8088       #变量
  tasks:                  #定义一个任务
    - name: create new file          #定义任务的名称
      file: name=/tmp/playtest.txt state=touch   #调用模块,具体要做的事情
    - name: install package
      yum: name=httpd
    - name: config httpd
      template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify:   #触发器,当条件触发后需要做的操作,配合handlers使用
        - restart apache  #需要引用的handlers的名字
    - name: copy index.html
      copy: src=/var/www/html/index.html dest=/var/www/html/index.html
    - name: start httpd
      service: name=httpd state=started
  handlers:   #notify定义的触发执行相应的处理动作
    - name: restart apache                     #要与notify定义的内容相同
      service: name=httpd state=restarted      #触发要执行的动作

巡检示例:

bash 复制代码
[root@192 ansible]# cat os.yml
- hosts: harbor
  gather_facts: no
  tasks:
    - name: 'tongji'
      shell: |-
        echo "cpu型号: `cat /proc/cpuinfo | grep  name |uniq |awk '{print $6,$7}'`"
        echo "cpu个数:`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`"
        echo "cpu总核数: `grep -c 'model name' /proc/cpuinfo`"
        echo "物理内存总量:`free -h | grep Mem | awk '{print $2}'`"
        echo "已使用内存总量(操作系统):`free -h | grep Mem | awk '{print $3}'`"
        echo "剩余内存总量(操作系统):`free -h | grep Mem | awk '{print $7}'`"
        echo "操作系统磁盘总量:`df -Th |grep -E /yn$ | awk '{ print $3}'`"
        echo "操作系统磁盘可用量:`df -Th |grep -E /yn$ | awk '{ print $5}'`"
      register: taskResult
    - name: 'check resoult'
      debug: var=taskResult.stdout
相关推荐
f***24112 小时前
高效自动化管理临时文件的技术方案
运维·自动化
m0_738120722 小时前
应急响应——知攻善防靶场Linux-1详细应急过程
linux·运维·服务器·网络·web安全·ssh
obboda2 小时前
磁盘管理(MBR、LVM)
运维·5g
kylezhao20192 小时前
S7-1200 CPU 与 S7-200 SMART S7通信(S7-1200 作为服务器)
运维·服务器
摸鱼仙人~3 小时前
大模型文章生成的风格个性化与多文体写作:一套可落地的方法论
linux·运维·服务器
xybDIY3 小时前
亚马逊云 Organizations 组织 Link 账号关联与解绑自动化解决方案
运维·自动化·云计算·aws
慕容雪_3 小时前
运维笔记-网络【属性】-【共享】中没有【家庭网络连接(H)】的选项
运维·网络·共享
北京耐用通信3 小时前
耐达讯自动化赋能:Canopen转Profibus网关水泵连接新范式
人工智能·科技·物联网·自动化·信息与通信
AC赳赳老秦3 小时前
Shell 脚本批量生成:DeepSeek 辅助编写服务器运维自动化指令
运维·服务器·前端·vue.js·数据分析·自动化·deepseek
学Linux的语莫4 小时前
linux的root目录缓存清理
linux·运维·服务器