我是靠谱客的博主 寒冷铃铛,最近开发中收集的这篇文章主要介绍Ansible剧本使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

剧本语言

剧本使用的yaml语言

yaml文件的后缀为.yml或者.yaml
使用空格做为缩进
相同层级的元素左侧对齐即可
缩进时不允许使用 Tab 键,只允许使用空格

创建剧本

直接编辑不存在会自动创建这个文件,先用touch新建也行

vim juben.yml

编写剧本
hosts:指定的需要操作的主机
vars:指定的是变量(非必须)
tasks: 具体要执行的任务
name:任务名称
shell:shell模块

- hosts: all
  tasks:
    - name: 在所有主机上新建monster.yml
      shell: touch /data/monster/monster.yml

剧本执行

执行前可以加"–check"或"-C"检查剧本格式是否有错误

[root@monster1 ~]# ansible-playbook juben.yml -C

PLAY [all] ********************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [192.168.71.137]

TASK [在所有主机上新建monster.yml] ****************************************************************************************************************************
skipping: [192.168.71.137]

PLAY RECAP ********************************************************************************************************************************************
192.168.71.137             : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

[root@monster1 ~]#

没有问题再把-C去掉正式执行,中间有个告警直接无视掉,它建议新建文件使用file模块,我们剧本里面使用的shell模块

[root@monster1 ~]# ansible-playbook juben.yml

PLAY [all] ********************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [192.168.71.137]

TASK [在所有主机上新建monster.yml] ****************************************************************************************************************************
 [WARNING]: Consider using the file module with state=touch rather than running 'touch'.  If you need to use command because file is insufficient you
can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.

changed: [192.168.71.137]

PLAY RECAP ********************************************************************************************************************************************
192.168.71.137             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@monster1 ~]# 

趣味风格cowsay

执行过程中输出一大堆信息,你觉得比较乏味可以安装cowsay
安装cowsay后默认将你的过程输出信息显示奶牛图案

yum install -y cowsay

安装好后,再执行脚本看效果

[root@monster1 ~]# ansible-playbook juben.yml
 ____________
< PLAY [all] >
 ------------
           ^__^
           (oo)_______
            (__)       )/
                ||----w |
                ||     ||

 ________________________
< TASK [Gathering Facts] >
 ------------------------
           ^__^
           (oo)_______
            (__)       )/
                ||----w |
                ||     ||

ok: [192.168.71.137]
 ____________________________
< TASK [在所有主机上新建monster.yml] >
 ----------------------------
           ^__^
           (oo)_______
            (__)       )/
                ||----w |
                ||     ||

 [WARNING]: Consider using the file module with state=touch rather than running 'touch'.  If you need to use command because file is insufficient you
can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.

changed: [192.168.71.137]
 ____________
< PLAY RECAP >
 ------------
           ^__^
           (oo)_______
            (__)       )/
                ||----w |
                ||     ||

192.168.71.137             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@monster1 ~]# 

更换图案

前面说了奶牛是默认图案,可以使用cowsay -l显示所有可以选择的图案。比如龙,执行cowsay -f 图案 内容可以看到预览效果。

[root@monster1 ~]# cowsay -l
Cow files in /usr/share/cowsay:
beavis.zen blowfish bong bud-frogs bunny cheese cower default dragon
dragon-and-cow elephant elephant-in-snake eyes flaming-sheep ghostbusters
head-in hellokitty kiss kitty koala kosh luke-koala mech-and-cow meow milk
moofasa moose mutilated ren satanic sheep skeleton small sodomized
stegosaurus stimpy supermilker surgery telebears three-eyes turkey turtle
tux udder vader vader-koala www
[root@monster1 ~]# cowsay -f dragon 火龙喷死你!!!
 __________
< 火龙喷死你!!! >
 ----------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~
[root@monster1 ~]# 

效果知道想要哪个了,怎么更改默认输出自己想要的表情图案呢
编辑ansible.cfg文件

vim /etc/ansible/ansible.cfg 

在223行,复制一行出来修改成自己要修改的图案,不复制直接修改default也行

在这里插入图片描述
执行剧本查看效果

在这里插入图片描述

剧本任务案例

1.在所有主机/data/下创建monster目录
2.在monster下创建monster.log文件
3.docker安装redis
4.编写定时任务每分钟记录一下docker所有容器性能状态日志到monster.log

编写案例剧本

vim anli.yml
- hosts: all
  tasks:
    - name: 任务1、创建monster目录
      file: path=/data/monster state=directory
    - name: 任务2、创建monster.log
      file: path=/data/monster/monster.log state=touch
    - name: 任务3、安装redis
      shell: |
           docker pull redis
           docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -d redis
    - name: 任务4、docker所有容器性能监控写入monster.log
      cron: name=dockerlog minute=*/1 job="docker stats --no-stream | awk '{if(NR > 1){print $0}}'  >> /data/monster/monster.log" state=present

检查有无问题

[@monster1 ~]# ansible-playbook anli.yml -C
 ____________
< PLAY [all] >
 ------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

 ________________________
< TASK [Gathering Facts] >
 ------------------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

ok: [192.168.71.137]
 ________________________
< TASK [任务1、创建monster目录] >
 ------------------------
                          /   //
           |___/|      /   //  \
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

changed: [192.168.71.137]
 __________________________
< TASK [任务2、创建monster.log] >
 --------------------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

ok: [192.168.71.137]
 ____________________
< TASK [任务3、安装redis] >
 --------------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

skipping: [192.168.71.137]
 ________________________________________
< TASK [任务4、docker所有容器性能监控写入monster.log] >
 ----------------------------------------
                          /   //
           |___/|      /   //  \
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

skipping: [192.168.71.137]
 ____________
< PLAY RECAP >
 ------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

192.168.71.137             : ok=3    changed=1    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   

执行剧本

[root@monster1 ~]# ansible-playbook anli.yml 
 ____________
< PLAY [all] >
 ------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

 ________________________
< TASK [Gathering Facts] >
 ------------------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

ok: [192.168.71.137]
 ________________________
< TASK [任务1、创建monster目录] >
 ------------------------
                          /   //
           |___/|      /   //  \
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

ok: [192.168.71.137]
 __________________________
< TASK [任务2、创建monster.log] >
 --------------------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

changed: [192.168.71.137]
 ____________________
< TASK [任务3、安装redis] >
 --------------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

changed: [192.168.71.137]
 ________________________________________
< TASK [任务4、docker所有容器性能监控写入monster.log] >
 ----------------------------------------
                          /   //
           |___/|      /   //  \
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

changed: [192.168.71.137]
 ____________
< PLAY RECAP >
 ------------
                          /   //
           |___/|      /   //  
            /0  0  __  /    //  |      
           /     /  /_/    //   |      
           @_^_@'/   /_   //    |       
           //_^_/     /_ //     |        
        ( //) |        ///      |          
      ( / /) _|_ /   )  //       |           _
    ( // /) '/,_ _ _/  ( ; -.    |    _ _.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/      /                 ~-. _ .-~      .-~^-.  
 (( /// ))      `.   {            }                   /        
  (( / ))     .----~-.        -'                 .~           `. ^-.
             ///.----..>                     _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

192.168.71.137             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@monster1 ~]# 

到被分发的服务器验证,目录创建了,查看monster.log,里面也在记录,查看定时任务里面的内容正是我们剧本里面编辑好的

在这里插入图片描述

最后

以上就是寒冷铃铛为你收集整理的Ansible剧本使用的全部内容,希望文章能够帮你解决Ansible剧本使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部