Linux批量管理之ansible

rsync剧本编写
  • vim rsync_server.yaml #创建剧本
- hosts:172.1.1.1
    tasks:
      - name: 01-install rsync
        yum: name=rsync state=installed
      - name:02-push conf file
        copy:src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/     #此处如果是修改了文件,需要重启的时候出现的问题
      - name:03-create user
        user: name=rsync create_home=no shell=/sbin/nologin
        shell: useradd rsync -M -s /sbin/nologin
      - name:04-create backup directory
        file:path/backup state=directory owner=rsync group=rsync
      - name:05-create password directory
        copy: content=rsync_backup:demo123 dest=/etc/password mode=600
      - name: 06-start service
        service: name=rsyncd state=started enabled=yes
        
- hosts: 172.1.1.2      #如果是多台客户端,怎么启动
  tasks:
    - name: 01-installed software
       yum:name=rsync state=installed
    - name: 02 -create password file
       copy:content=demo123 dest=/etc/rsync.password mode=600
    - name: 03 test data backup
        file:dest=/tmp/test.txt state=touch
    - name:04 start test
        shell:rsync -avz /tmp/test.txt [email protected]::backup --password-file=/etc/rsync.password
        
        
        
 ansible-playbook --syntax-check rsync_server.yaml      
剧本常见错误
1、剧本语法规范是否符合(空格、冒号、短横线)

2、剧本中的模块使用是否正确

3、剧本中的一个name标识下面只可以写一个任务信息

配置主机清单的方式?
PS:配置文件中可以管理少数几台服务器,如果服务器的量升高之后,管理就会变得异常复杂繁琐。

主机清单配置模式一:
    1、分组管理
    [web]
        172.1.1.1
        172.1.1.2
     [data]
        172.1.1.3
        172.1.1.4
  ansible web -a "hostname"      #查看某一组的主机
  
    2、主机名符号配置
         [web]
            172.1.1.[7:9]
     
    3、支持非标准端口配置
         [web]
            web01:1122
            此方式的目标终端的端口可以变更,不需要指定默认的端口,批量管理服务器自行配置好目的主机的服务端口,即可连接 
     
    4、支持主机的特殊变量
         [web]
            172.1.1.1 ansible_ssh_host=123.1.1.1 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123
           没有分发公钥的情况下,也可以操作主机
           
    5、主机嵌入式配置
        [rsync:children]
            rsync_client
            rsync_server
        [rsync_server]
            121.1.1.1
        [rsync_client]
            123.1.1.1
        [web:vars]    #嵌入式变量
            a=111        

剧本的扩展功能

1、剧本中设置变量信息
    vars:
        backupdir:/backup
        passfile:/rsync.password
     {{backupdir}}      #在需要用到的位置调用变量
     
     a、在直接在剧本文件中编写
     b、在命令行中进行指定   ansible-playbook --extra-vars=demo=data
     c、在主机清单文件编写
        
     三种变量的调用方式都使用了,三种方式的优先级??  #配置不同的变量,执行剧本,查看一下,在client哪一项先出现,即可确定优先级
     行变量>剧本变量>主机清单变量
     如何设置全局变量?   roles  剧本整合
     
2、剧本中设置注册信息
    执行剧本时,显示输出命令结果信息
    需要模块:
            register、debug
    
3、剧本中设置判断信息
    指定判断条件
        (ansible_hostname == "nfs")
         setup模块中显示被管理主机的详细信息
         
         
         
4、剧本中设置循环信息(自行百度)

5、剧本中设置错误标签
    模块:ignore_errors:yes
    
6、剧本中设置标签信息——只运行标签标记的行,其它已经运行的就不在运行了
    模块:tags:dir[不要使用数字]
    
7、剧本中设置触发信息(触发器)
    notify:restart rsync
    handler:
        -name:restart rsync
8、剧本中进行剧本整合

编写NFS剧本

1、创建目录
    mkdir -r ansible/nfs-file/{nfs-server,nfs-client}    tree nfs-file
    
2、编写剧本信息
    -hosts:nfs
     tasks:
      -name:01-install nfs server
        yum:
          name;['nfs-utils' , 'rpcbind']
          state:installed
    -hosts:nfs_server
     vars:
        data_dir:/data
     tasks:
        gather_facts:no   #不要让ansible收集信息
        -name:01-copy conf file
         copy:src=/etc/ansible/ansible-playbook/nfs-file/nfs-server/exports/ dest=/etc
         notify:restart nfs server
        -name:02-create directory
         file:path=/{{data_dir}} state=directory owner=nfsnobody group=nfsnobody
        -name:03-start service
         #service:name=nfs state=started enabled=yes
         #service:name=rpcbind state=started enabled=yes
         services:name={{ item }} state=started enabled=yes
         with_items:
            -rpcbind
            -nfs
    -hosts:nfs_client
    
     tasks:
       -name:01-mounted
        mount:src=172.16.1.31:/{{data_dir}} path=/mnt fstype=nfs state=mounted
       -name:02-check mount
        shell:df -h | grep /data
        register:mount_info
       -name:display mount info
        debug:msg={{ mount_info.stdout_lines }}
    handlers:
       -name:restart nfs server
       service:name=nfs state=restarted
        
3、剧本测试

4、执行剧本

多剧本进行整合


方式一:include_tasks:f1.yml
    -host:all
     remote_user:root
     tasks:
        -include_tasks:f1.yml
        -include_tasks:f2.yml
        
        
 方式二:include:f1.yml
    -include:f1.yml
    -include:f2.yml

方式三:-import_playbook
    

剧本编写的问题

ansible角色————规范以下问题
1、编写目录不够规范——混乱

2、编写好的任务重复使用

3、服务端配置文件变更,客户端参数信息也自动化

4、汇总剧本中没有显示主机角色信息

5、一个剧本内容信息过多,不容易进行阅读,如果进行拆分

规范目录结构

cd /etc/ansible/roles

mkdir {rsync,nfs}  ----创建相应角色目录

mkdir {nfs,rsync,web,sersync}/{vars,tasks,templates,handlers,files} ----创建角色目录下的子目录,ansible规定的目录
    files:  ---保存需要分发的文件目录
    handlers:----保存触发器配置文件信息
    tasks:-----保存要执行动作信息文件
    templates:----保存要分发的模板文件,模板文件中可以设置变量信息
    vars:------保存变量信息文件

在roles目录中创建相关文件

编写文件流程图——自行百度

编写一个主剧本文件

cd /etc/ansible/roles

vim site.yaml

剧本出现错误排查思路

1、找到剧本中出现问题的关键点
2、将剧本中的操作转换成模块进行操作  #命令行操作
3、将模块操作转换为linux命令操作    #利用命令linux中断去执行
   本地命令执行
   远程终端上执行

你可能感兴趣的:(linux)