美文网首页
综合架构ansible之playbook

综合架构ansible之playbook

作者: 一只打不死的小强 | 来源:发表于2019-07-26 20:18 被阅读0次

    ansible批量管理剧本概念

    可以将多个批量操作模块功能整合
    简化运维工作复杂度

    ansible

    ansible剧本编写规范

    ymal 语法格式 = python 语法格式

    缩进特点: 两个空格表示一个缩进关系

    不同的级别都要缩进。
    如:主题01
             副标题01
               正文
             副标题02
            正文
           主题02
               副标题01
             #要有一个tasks要进行缩进
    

    (2)冒号用法

    冒号后面需要有空格  
    冒号结尾不需要有空格
           主机信息: 172.16.1.41   --- key - value (键值写法)
           做什么事:
           01备份数据
           02创建目录
    

    (3)列表用法:

    利用短横线加空格构建列表清单
           家务活列表信息: 
           - 扫地
           - 擦桌子
           - 洗床单
    

    ansible剧本内容组成:

    演员信息-主机信息
    hosts: 管理主机信息
    动作信息-任务信息
    tasks:
    copy: xxx
    file: xxx

    ansible剧本语法检查方法

    [root@m01 ansible_playbook]# cat test01.yaml 
        - hosts: 172.16.1.41
          tasks:
            - file: path=/oldboy/ state=directory
            - copy: content=oldboy62 dest=/oldboy/oldboy.txt
    

    命令

    ansible-playbook --syntax-check inotify_server.yaml
    
    ansible-playbook -i /root/hosts test.yaml #指定其他路径的主机配置清单。
    

    ansible剧本执行过程:

    如果系统安装了cowsay运行的时候就会出现小牛的形状。

    解决办法:进入/etc/ansible/vim ansible.cfg这个文件中,
    # don't like cows?  that's unfortunate.
    # set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
    nocows = 1 #执行的过程中,不会出现小牛的状况。
    

    [root@m01 ansible_playbook]# ansible-playbook -C test01.yaml --- 剧本模拟执行

    PLAY [172.16.1.41] ******************************************************************************************************************
    
    TASK [Gathering Facts] **************************************************************************************************************
    ok: [172.16.1.41]
    
    TASK [file] *************************************************************************************************************************
    changed: [172.16.1.41]
    
    TASK [copy] *************************************************************************************************************************
    changed: [172.16.1.41]
    
    PLAY RECAP **************************************************************************************************************************
    172.16.1.41                : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    [root@m01 ansible_playbook]# ansible-playbook  test01.yaml   --- 剧本正式执行
    
    PLAY [172.16.1.41] ******************************************************************************************************************
    
    TASK [Gathering Facts] **************************************************************************************************************
    ok: [172.16.1.41]
    
    TASK [file] *************************************************************************************************************************
    changed: [172.16.1.41]
    
    TASK [copy] *************************************************************************************************************************
    changed: [172.16.1.41]
    
    PLAY RECAP **************************************************************************************************************************
    172.16.1.41                : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0      
    

    题目练习:

    1. 在172.16.1.41主机上操作:
      1) 将定时任务服务停止
      2) 创建一个/etc/目录软连接 在/opt目录中生成
      3) 将本地/etc/hosts文件分发给41主机 保存到/tmp目录中
     - hosts: 172.16.1.41
          tasks:
            - service: name=crond  state=stopped
            - file: src=/etc/ path=/opt/etc_soft_link state=link
            - shell: ln -s /etc/ /opt/etc_soft_link
            - copy: src=/etc/hosts dest=/tmp/
    
    1. 在172.16.1.31主机上操作:
      1) 将防火墙服务开机自动运行
      2) 将主机上安装keepalived软件
     - hosts: 172.16.1.31
       tasks:
           - service: name=firewalld enabled=yes
           - yum: name=keepalived  state=installed
    

    注意事项:
    01. 剧本语法格式 ansible脚本不识别tab空格
    02. 模块书写规范
    03. 剧本逻辑顺序
    04. 尽量少用万能模块 无法重复执行剧本
    shell模块没法判断事情是否干过,其他模块会判断。


    ansible剧本实现服务一键化部署

    rsync服务一键化部署:

    第一个历程: 按照模块方式,完成服务每个步骤部署
    服务端配置:
    01. 安装软件程序
    ansible rsync -m yum -a "name=rsync state=installed"
    02. 编写配置文件
    在管理端准备好服务配置文件
    ansible rsync_server -m copy -a "src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/"
    03. 创建虚拟用户
    ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
    04. 创建密码文件 (授权600)
    ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
    05. 创建备份目录 (授权 属主 属组)
    ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"
    06. 启动程序服务
    ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"
    

    客户端配置:
    01. 创建密钥文件 (授权600)
    ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
    02. 批量测试传输文件
    ansible rsync_client -m shell -a "rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password"
    

    rsync服务一键化还原:

    - hosts: rsync_server
      tasks:
        - name: 01:delete conf file
          file: path=/etc/rsyncd.conf state=absent
        - name: 02:delete rsync user
          user: name=rsync state=absent 
        - name: 03:delete password file
          file: path=/etc/rsync.password state=absent
        - name: 04:delete backup dir
          file: path=/backup/ state=absent
        - name: 05:boot rsync server
          service: name=rsyncd state=stopped enabled=no
    

    客户端一键还原

    - hosts: rsync_client
      tasks:
        - name: 01:delete password file
          file: path=/etc/rsync.password state=absent
    

    nfs服务一键化部署:

    nfs服务一键化部署:(解析)

    第一个历程: 按照模块方式,完成服务每个步骤部署
    服务端配置: 
    01. 安装部署软件程序: rpcbind nfs-utile
    ansible nfs_server -m yum -a "name=rpcbind state=installed"
    ansible nfs_server -m yum -a "name=nfs-utile state=installed"
    02. 编写配置文件:   
    /etc/ansible-playbook/nfs.conf 
    ansible nfs_server -m copy -a "src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/exports"
    03. 创建共享目录:
    ansible nfs_server -m file -a "path=/data/ state=directory owner=nfsnobody group=nfsnobody"
    04. 启动程序服务:
    ansible nfs_server -m service -a "name=rpcbind state=started enabled=yes"
    ansible nfs_server -m service -a "name=nfs state=started enabled=yes"
    

    客户端配置:(分析)

    01. 安装部署软件 
    ansible nfs_client -m yum -a "name=nfs-utile state=installed"
    02. 挂载共享目录
    ansible nfs_client -m mount -a "src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted"
    

    编写NFS服务部署剧本

    - hosts: nfs_server
      tasks:
        - name: 01:install nfs rpcbind
          yum:
            name:
              - rpcbind
              - nfs-utils
            state: installed   //saltstack语言
        - name: 02:copy conf file
          copy: src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/exports
        - name: 03:create data dir
          file: path=/data/ state=directory owner=nfsnobody group=nfsnobody
        - name: 04:boot server rpcbind
          service: name=rpcbind state=started enabled=yes
        - name: 04:boot server nfs
          service: name=nfs state=restarted enabled=yes
    - hosts: nfs_client
      tasks:
        - name: 01:install nfs
          yum: name=nfs-utils state=installed
        - name: 02:mount data dir
          mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted
    

    nfs恢复环境剧本

    - hosts: nfs_server 
      tasks:
        - name: 01:install nfs rpcbind
          yum:
            name:
              - rpcbind
              - nfs-utils
            state: removed
        - name: 02:copy conf file
          shell: echo "" >/etc/exports
        - name: 03:create data dir
          file: path=/data/ state=absent
    - hosts: nfs_client
      tasks:
        - name: 01:install nfs
          yum: name=nfs-utile state=removed
        - name: 02:mount data dir
          mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=unmounted(anbsent自动挂载取消)
    

    04. ansible剧本编写扩展功能

    • a 剧本变量编写功能
    • b 剧本信息通知功能
    • c 剧本信息判断功能
    • d 剧本信息循环功能
    • e 剧本编写忽略错误
    • f 剧本标签设置功能
    • g 剧本忽略采集功能
    • h 剧本信息触发功能

    剧本变量编写功能

    设置变量方法一: 在剧本中设置变量 命令变量>剧本变量>主机清单变量

    - hosts: 172.16.1.41
          vars:
            dir: /etc
            file: rsyncd.conf
          tasks:
            - name: copy file 
              copy: src={{ dir }}/{{ file }} dest={{ dir }}/
    

    设置变量方法二: 在主机清单中设置变量 主机清单变量最不优先

        172.16.1.41 ansible_user=root ansible_password=123456
        172.16.1.31
        [rsync_server:vars]   --- 给指定主机组统一设置变量
        dir=/etc
        file=rsyncd.conf
    

    设置变量方法三: 在剧本执行命令参数中设置变量 命令行最优先

    ansible-playbook -e dir=/etc -e file=rsyncd.conf test_变量功能.yaml
    

    剧本信息通知功能(会将执行的结果输出到屏幕)

    - hosts: 172.16.1.41
      tasks:
        - name: boot server
          service: name=rsyncd state=started
        - name: check server boot
          shell: netstat -lntup|grep 873
          register: oldboy
        - debug: msg={{ oldboy.stdout_lines }} debug: msg{{  }}

    相关文章

      网友评论

          本文标题:综合架构ansible之playbook

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