美文网首页
Linux运维-day44-综合架构-playbook剧本的变量

Linux运维-day44-综合架构-playbook剧本的变量

作者: 文娟_狼剩 | 来源:发表于2019-06-01 12:14 被阅读0次

    环境准备:

    m01管理服务器(外网:10.0.0.61;内网:172.16.1.61)
    backup(外网:10.0.0.41;内网:172.16.1.41)
    nfs01(外网:10.0.0.31;内网:172.16.1.31)

    /etc/ansible/hosts主机清单中的配置为:
    [oldboy]
    172.16.1.41
    172.16.1.31
    

    注:养成良好的编写习惯,编写完剧本一定要先检查剧本剧本的执行情况
    检查剧本执行情况:ansible-playbook -C 剧本名
    执行剧本:ansible-playbook 剧本名

    一、playbook变量

    1.1 普通变量

    1.1.1 #批量在backup服务器和nfs01服务器上创建/oldboy/ip,这里的ip写死为10.0.0.200
    1>使用变量编写剧本

    [root@m01 /server/ansible-playbook]# cat ansible-var01.yml 
    ---
      - hosts: oldboy
        vars:    \\定义变量
          ip: 10.0.0.200
        tasks:
        - name: mkdir dir
          file:
            path: /oldboy/{{ ip }}
            state: directory
    [root@m01 /server/ansible-playbook]# 
    

    2>查询创建的是否有问题

    [root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /oldboy"
    172.16.1.41 | CHANGED | rc=0 >>
    /oldboy
    └── 10.0.0.200
    1 directory, 0 files
    172.16.1.31 | CHANGED | rc=0 >>
    /oldboy
    └── 10.0.0.200
    1 directory, 0 files
    
    [root@m01 /server/ansible-playbook]# 
    

    1.2 #在nfs01、backup中创建/backup/lidao的目录,把/etc/目录打包压缩到/backup/lidao目录下面etc.tar.gz,目录名存放在变量中

    \\编写的剧本内容
    [root@m01 /server/ansible-playbook]# cat ansible-var02.yml 
    ---
       - hosts: oldboy
         vars:
           dirs: /backup/lidao
         tasks:
         - name: make dir
           file:
             path: "{{ dirs }}"
             state: directory
         - name: tar /etc
           archive:
             path: /etc
             dest: "{{ dirs }}/etc.tar.gz"
    
    \\执行剧本之后结果查询
    [root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /backup"
    172.16.1.41 | CHANGED | rc=0 >>
    /backup
    └── lidao
        └── etc.tar.gz
    
    1 directory, 1 file
    
    172.16.1.31 | CHANGED | rc=0 >>
    /backup
    └── lidao
        └── etc.tar.gz
    
    1 directory, 1 file
    
    [root@m01 /server/ansible-playbook]#
    

    1.2 playbook变量注册(register)

    注册变量:register关键字可以存储指定命令的输出结果到一个自定义的变量中
    1.2.1 在nfs01和backup 中创建/backup/lidao/时间的目录,把 /etc/目录打包压缩到/backup/lidao/时间的目录下面 etc.tar.gz

    分析:
    打包压缩 /etc/到时间命名的目录中。
    创建变量存放时间(写死为2019-05-31)
    创建变量存放目录

    \\\--------擦看编写的剧本内容
    [root@m01 /server/ansible-playbook]# cat ansible-var03.yml 
    ---
      - hosts: oldboy
        vars:
          dirs: /backup/lidao/
          times: 2019-05-31
        tasks:
        - name: make dir
          file:
            path: "{{ dirs }}/{{ times }}"
            state: directory
        - name: tar /etc
          archive:
            path: /etc
            dest: "{{ dirs }}/{{ times }}/etc.tar.gz"
    [root@m01 /server/ansible-playbook]# 
    
    \\----------检查剧本的执行结果
    [root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /backup"
    172.16.1.41 | CHANGED | rc=0 >>
    /backup
    └── lidao
        └── 2019-05-31
            └── etc.tar.gz
    2 directories, 1 file
    172.16.1.31 | CHANGED | rc=0 >>
    /backup
    └── lidao
        └── 2019-05-31
            └── etc.tar.gz
    2 directories, 1 file
    [root@m01 /server/ansible-playbook]# 
    

    1.2.2 把/etc/打包备份到/backup/ip地址命名目录/etc-时间.tar.gz

    分析:
    ip是每台机器的内网ip
    时间是当天的日期:年-月-日
    需要用到叫register的内容

    \\\--------------编写的剧本内容
    [root@m01 /server/ansible-playbook]# cat ansible-var04.yml 
    ---
      - hosts: oldboy
        vars: 
          dirs: /backup
        tasks:
        - name: ip var
          shell: hostname -I|awk '{print $NF}'
          register: ipaddr
    
        - name: date var
          shell: date +%F
          register: time
    
        - name: cesgu
          debug: msg={{ ipaddr.stdout }}
       
        - name: make dir
          file:
            path: "{{ dirs }}/{{ ipaddr.stdout }}"
            state: directory
        
        - name: tar /etc
          archive:
            path: /etc
            dest: "{{ dirs }}/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz" 
    
    \\\---------------------执行剧本的结果
    [root@m01 /server/ansible-playbook]# ansible-playbook  ansible-var04.yml 
    
    PLAY [oldboy] ************************************************************************************************************************
    
    TASK [Gathering Facts] ***************************************************************************************************************
    ok: [172.16.1.41]
    ok: [172.16.1.31]
    
    TASK [ip var] ************************************************************************************************************************
    changed: [172.16.1.41]
    changed: [172.16.1.31]
    
    TASK [date var] **********************************************************************************************************************
    changed: [172.16.1.41]
    changed: [172.16.1.31]
    
    TASK [cesgu] *************************************************************************************************************************
    ok: [172.16.1.41] => {
        "msg": "172.16.1.41"
    }
    ok: [172.16.1.31] => {
        "msg": "172.16.1.31"
    }
    
    TASK [make dir] **********************************************************************************************************************
    changed: [172.16.1.31]
    changed: [172.16.1.41]
    
    TASK [tar /etc] **********************************************************************************************************************
    changed: [172.16.1.31]
    changed: [172.16.1.41]
    
    PLAY RECAP ***************************************************************************************************************************
    172.16.1.31                : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    172.16.1.41                : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    [root@m01 /server/ansible-playbook]# 
    

    1.3 playbook内置变量

    ****常用的ansible内置变量

    含义 内置变量(未精简) 内置变量(精简之后)
    查询主机名 ansible_facts.hostname ansible_hostname
    查询所有的IP ansible_facts.all_ipv4_addresses ansible_all_ipv4_addresses
    查询第一块网卡的IP地址 ansible_facts.eth0.ipv4.address ansible_eth0.ipv4.addresses
    查询系统发行版,如CentOS本 ansible_facts.distribution ansible_facts_distribution
    \\\\-------在剧本中查询所有的内置变量
    - hosts: oldboy
        tasks:
          - debug: msg={{ansible_facts}}
    

    二、playbook条件语句

    playbook中条件判断语句使用when;when与ansible内置变量搭配

    2.1 #在nfs01和backup服务器上的/backup下创建以自己主机名命名的文件,其他服务器不创建

    \\\----------------------查看剧本内容
    [root@m01 /server/ansible-playbook]# cat ansible-var06.yml 
    ---
      - hosts: all
        tasks:
          - name: create file
            file: path=/backup/{{ ansible_hostname }}.txt state=touch
            when: (ansible_hostname =="nfs01") or (ansible_hostname =="backup")
    [root@m01 /server/ansible-playbook]# 
    
    \\\------------剧本的执行
    [root@m01 /server/ansible-playbook]# ansible-playbook  ansible-var06.yml 
    
    PLAY [all] ***************************************************************************************************************************
    TASK [Gathering Facts] ***************************************************************************************************************
    ok: [172.16.1.31]
    ok: [172.16.1.7]
    ok: [172.16.1.8]
    ok: [172.16.1.41]
    
    TASK [create file] *******************************************************************************************************************
    skipping: [172.16.1.7]
    skipping: [172.16.1.8]
    changed: [172.16.1.41]
    changed: [172.16.1.31]
    
    PLAY RECAP ***************************************************************************************************************************
    172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    172.16.1.7                 : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
    172.16.1.8                 : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0 
    
    \\\--------------------查看剧本的执行之后是否创建成功
    [root@m01 /server/ansible-playbook]# ansible all -a "ls -l /backup/"
    172.16.1.31 | CHANGED | rc=0 >>
    total 0
    -rw-r--r-- 1 root root 0 Jun  1 12:10 nfs01.txt
    
    172.16.1.41 | CHANGED | rc=0 >>
    total 0
    -rw-r--r-- 1 root root 0 Jun  1 12:10 backup.txt
    
    172.16.1.7 | FAILED | rc=2 >>
    ls: cannot access /backup/: No such file or directorynon-zero return code
    
    172.16.1.8 | FAILED | rc=2 >>
    ls: cannot access /backup/: No such file or directorynon-zero return code
    
    [root@m01 /server/ansible-playbook]# 
    

    三、playbook循环语句

    3.1 #批量创建安装软件

    \\\--------没安装之前
    [root@m01 ~]# ansible oldboy -a "rpm -qa nfs*  tree lrzsz"
    172.16.1.31 | CHANGED | rc=0 >>
    172.16.1.41 | CHANGED | rc=0 >>
    [root@m01 ~]# 
    
    \\\-------查看编写的剧本内容
    [root@m01 ~]# cat /server/ansible-playbook/ansible-var05.yml 
    ---
      - hosts: oldboy
        tasks:
        - name: install ruanjiain
          yum: name={{ item }} state=present
          with_items:
            - tree  
            - lrzsz
            - nfs-utils
    [root@m01 ~]# 
    
    //--------------------执行剧本
    [root@m01 /server/ansible-playbook]# ansible-playbook ansible-var05.yml 
    
    PLAY [oldboy] ************************************************************************************************************************
    
    TASK [Gathering Facts] ***************************************************************************************************************
    ok: [172.16.1.31]
    ok: [172.16.1.41]
    
    TASK [install ruanjiain] *************************************************************************************************************
    
    changed: [172.16.1.41] => (item=[u'tree', u'lrzsz', u'nfs-utils'])
    changed: [172.16.1.31] => (item=[u'tree', u'lrzsz', u'nfs-utils'])
    
    PLAY RECAP ***************************************************************************************************************************
    172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    [root@m01 /server/ansible-playbook]# 
    
    \\\-------------------执行剧本之后的查询结果
    [root@m01 ~]# ansible oldboy -a "rpm -qa nfs*  tree lrzsz"
     [WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
    zypper 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.
    
    172.16.1.31 | CHANGED | rc=0 >>
    lrzsz-0.12.20-36.el7.x86_64
    tree-1.6.0-10.el7.x86_64
    nfs-utils-1.3.0-0.61.el7.x86_64
    
    172.16.1.41 | CHANGED | rc=0 >>
    lrzsz-0.12.20-36.el7.x86_64
    tree-1.6.0-10.el7.x86_64
    nfs-utils-1.3.0-0.61.el7.x86_64
    
    [root@m01 ~]# 
    

    3.2 #批量创建文件并指定所有者、所有属组及权限

     11     - name: batch create file
     12       file:
     13         path: "{{ item.path }}"
     14         state: touch
     15         mode: "{{item.mode }}"
     16         owner: "{{ item.owner }}"
     17         group: "{{item.group }}"
     18       with_items:
     19         - {path: /backup/aaa.txt, mode: "600", owner: oldboy, group: oldboy }
     20         - {path: /backup/bbb.txt, mode: "644", owner: nfsnobody, group: nfsnobody }
     21         - {path: /backup/ccc.txt, mode: "777", owner: root, group: root }
    ~    
    
    \\\--------------------执行结果
    [root@m01 /server/ansible-playbook]# ansible-playbook  ansible-var05.yml --start-at-task='batch create file'
    
    PLAY [oldboy] ************************************************************************************************************************
    
    TASK [Gathering Facts] ***************************************************************************************************************
    ok: [172.16.1.41]
    ok: [172.16.1.31]
    
    TASK [batch create file] *************************************************************************************************************
    changed: [172.16.1.31] => (item={u'owner': u'oldboy', u'path': u'/backup/aaa.txt', u'group': u'oldboy', u'mode': u'600'})
    changed: [172.16.1.41] => (item={u'owner': u'oldboy', u'path': u'/backup/aaa.txt', u'group': u'oldboy', u'mode': u'600'})
    changed: [172.16.1.31] => (item={u'owner': u'nfsnobody', u'path': u'/backup/bbb.txt', u'group': u'nfsnobody', u'mode': u'644'})
    changed: [172.16.1.41] => (item={u'owner': u'nfsnobody', u'path': u'/backup/bbb.txt', u'group': u'nfsnobody', u'mode': u'644'})
    changed: [172.16.1.41] => (item={u'owner': u'root', u'path': u'/backup/ccc.txt', u'group': u'root', u'mode': u'777'})
    changed: [172.16.1.31] => (item={u'owner': u'root', u'path': u'/backup/ccc.txt', u'group': u'root', u'mode': u'777'})
    
    PLAY RECAP ***************************************************************************************************************************
    172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    [root@m01 /server/ansible-playbook]#    
    
    \\\---------------执行之后的结果查询
    [root@m01 /server/ansible-playbook]# ansible oldboy -a "ls -l /backup/aaa.txt /backup/bbb.txt /backup/ccc.txt"
    172.16.1.31 | CHANGED | rc=0 >>
    -rw------- 1 oldboy    oldboy    0 Jun  1 11:32 /backup/aaa.txt
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Jun  1 11:32 /backup/bbb.txt
    -rwxrwxrwx 1 root      root      0 Jun  1 11:32 /backup/ccc.txt
    
    172.16.1.41 | CHANGED | rc=0 >>
    -rw------- 1 oldboy    oldboy    0 Jun  1 11:32 /backup/aaa.txt
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Jun  1 11:32 /backup/bbb.txt
    -rwxrwxrwx 1 root      root      0 Jun  1 11:32 /backup/ccc.txt
    
    [root@m01 /server/ansible-playbook]#                                                                         
    

    作业:
    shell的面试题
    m01使用ansible
    部署
    rsync
    nfs
    sersync
    全网备份
    尝试云服务器部署服务
    预习:HTTP协议 Nginx
    待补充……

    相关文章

      网友评论

          本文标题:Linux运维-day44-综合架构-playbook剧本的变量

          本文链接:https://www.haomeiwen.com/subject/srzwtctx.html