zoukankan      html  css  js  c++  java
  • ansible-palybook剧本

     

    1 ansible基础知识部分补充

    1.1 ansible软件特点:

    · 可以实现批量管理

    · 可以实现批量部署

    · ad-hoc(批量执行命令)---针对临时性的操作

        ansible clsn -m command -a "hostname"   <- 批量执行命令举例

    · 编写剧本-脚本(playbook)---针对重复性的操作

    1.2 ansible核心功能:

    pyYAML-----用于ansible编写剧本所使用的语言格式(saltstack---python) 

    rsync-ini语法  sersync-xml语法  ansible-pyYAML语法

    paramiko---远程连接与数据传输  

    Jinja2-----用于编写ansible的模板信息 

            

    2 ansible剧本编写规则说明

    2.1 pyYAML语法规则:

       规则一:缩进

        yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键

        注意:编写yaml文件,就忘记键盘有tab

           

        规则二:冒号

        CMD="echo"

        yaml:

        mykey:

        每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

       

        规则三:短横线

        想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

        核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab

    3 剧本书写格式

    ### 剧本的开头,可以不写
    - hosts: all         <- 处理所有服务器,找到所有服务器;  -(空格)hosts:(空格)all
    tasks:             <- 剧本所要干的事情;                (空格)(空格)task:
    - command: echo hello clsn linux.  
      (空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能
    ansible all -m command -a "echo hello clsn linux"     

        剧本编写内容扩展:剧本任务定义名称

    - hosts: 172.16.1.7  <- 处理指定服务器                   -(空格)hosts:(空格)all
    task:                <- 剧本所要干的事情;                (空格)(空格)task:
    - name:
    command: echo hello clsn linux.                   
    (空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能

    3.1 剧本格式示例

    [root@m01 ansible-playbook]# vim rsync_sever.yml
    - hosts: 172.16.1.41
      tasks:
        - name: install rsync
          yum: name=rsync state=installed

    4 剧本编写后检查方法

    01:ansible-playbook --syntax-check 01.yml 

            --- 进行剧本配置信息语法检查

    02:ansible-playbook -C 01.yml             

               --- 模拟剧本执行(彩排)

    4.1 语法检查

    [root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml
    playbook: 01.yml

    4.2 模拟剧本执行

    [root@m01 ansible-playbook]# ansible-playbook -C 01.yml
    PLAY [all] ****************************************************************
    
    TASK [Gathering Facts] ****************************************************
    ok: [172.16.1.41]
    ok: [172.16.1.8]
    ok: [172.16.1.31]
    
    TASK [cron] ***************************************************************
    ok: [172.16.1.8]
    ok: [172.16.1.41]
    ok: [172.16.1.31]
    
    PLAY RECAP ****************************************************************
    172.16.1.31                : ok=2    changed=0    unreachable=0    failed=0
    172.16.1.41                : ok=2    changed=0    unreachable=0    failed=0
    172.16.1.8                 : ok=2    changed=0    unreachable=0    failed=0

    5 剧本示例

    5.1 剧本编写内容扩展:剧本任务编写多个任务

    - hosts: all
      tasks:
        - name: restart-network
          cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
        - name: sync time
          cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

    5.2 剧本编写内容扩展:剧本任务编写多个主机

    - hosts: 172.16.1.7
      tasks:
        - name: restart-network
          cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
        - name: sync time
          cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
    - hosts: 172.16.1.31
      tasks:
        - name: show ip addr to file
          shell: echo $(hostname -i) >> /tmp/ip.txt

    6 剧本编写方式

    01 多主机单任务编写方式

    02 多主机多任务编写方式

    03 不同主机多任务编写方式

    常见错误

    1 ansible编写剧本排错思路

    1. ansible-playbook编写完,检査语法和模拟测试运行

    2. 打开剧本,定位异常问題原因,将剧本中的内容转换命令执行一次

    1
    2
    cron: name=clsn64 minute=ee hour=03 job='/bin/sh /server/scripts/test.sh &>/dev/null'
    ansible clsn -m cron -a "name=clsn64 minute=00 hour=03 job='/bin/sh /server/scripts/test.sh &>/dev/null
     

    3. 将参数中的脚本文件推送到远程屎务器,在远程服务器本地执行脚本 sh -x test.sh

    说明:ansible执行时,加1上-vvvv显示ansible详细执行过程,也可以定位异常原因!

    1.1 排错逻辑

    01. 剧本执行中的错误

    02. 把剧本中的内容转换为ansible命令执行

        ansible clsn -m yum -a "name=rsync state=installed"

    03. 把ansible服务器上执行的命令放在被管理主机上执行

        yum install -y rsync

    2 ansible 无法正常使用

    2.1 在被控端上 root@notty 进程一直存在

    [root@backup ~]# ps -ef|grep sshd
    root      35274      1  0 15:25 ?        00:00:00 /usr/sbin/sshd
    root      37004  35274  0 16:23 ?        00:00:00 sshd: root@pts/2 
    root      37062  35274  0 16:55 ?        00:00:00 sshd: root@notty 
    root      37154  37006  0 16:55 pts/2    00:00:00 grep --color=auto sshd

    2.2 解决办法

    首先,将该进程干掉

    kill pid

    2.3 然后使用ansible的 -vvvv 参数查看执行的错误信息

    Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc
    META: ran handlers
    Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
    <172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
    <172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
    ……

    找到在哪里出错。

    2.4 可能的错误

    在 /etc/ssh/sshd_config 文件中的第132行为空,导致sftp 无法连接,出错~

    1
    133 Subsystem       sftp    /usr/libexec/openssh/sftp-server

    3 常见问题二:  

    1
    2
    3
    [root@m01 ~]# ansible  -k 172.16.1.51 -m ping
    SSH password:
    [WARNING]: No hosts matched, nothing to do

    原因分析:

    在ansible的hosts文件中,没有配置相应主机地址信息

    3.1 常见问题三:       

    1
    2
    3
    4
    5
    6
    # ansible -k 172.16.1.51 -m ping
    SSH password:
    172.16.1.51|FAILED! => {
    "failed"true,
    "msg""Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
    }

    原因分析:

    因为没有受控端的指纹信息,在known_hosts文件中

    转载博文链接:https://www.cnblogs.com/clsn/p/7743792.html#auto_id_69

  • 相关阅读:
    美团面试准备
    SSM实战项目——Java高并发秒杀API
    接口和抽象类有什么区别
    Java中static、final、static final的区别
    多线程面试题
    idea新建maven项目没有src目录
    聊聊MyBatis缓存机制
    Java 8系列之重新认识HashMap
    数据库SQL实战练习
    牛客网刷题(一)
  • 原文地址:https://www.cnblogs.com/cpw6/p/10569888.html
Copyright © 2011-2022 走看看