day38--综合架构批量管理 ansible(自动化软件)-模块使用

ansible应用配置模块说明
  • 第一个模块(command)命令模块 批量执行命令
      command  命令模块 批量执行命令   默认模块
      ansible oldboy -m command -a "hostname"
  • 第二个模块(shell)命令模块 批量执行命令 万能模块
      shell    命令模块 批量执行命令   万能模块  
      ansible oldboy -m shell -a "yum install -y htop"
      ansible oldboy -m shell -a "cd /tmp;pwd"
      
      用法问题:
      01. 不如专业模块执行批量管理功能效率更高
      02. 不像专业模块具有幂等性(一个命令可以反复操作执行)
    
      第一个里程: 编写脚本
      第二个里程: 将脚本进行分发
      ansible oldboy -m copy -a "src=/server/scripts/create_user.sh dest=/server/scripts/"
      第三个里程: 修改脚本权限
      ansible oldboy -m file -a "path=/server/scripts/create_user.sh mode=755"
      第四个里程: 批量执行脚本
      ansible oldboy -m shell -a "/server/scripts/create_user.sh"
  • 第三个模块(script)命令模块 批量运行脚本
      script   命令模块 批量运行脚本
      第一个里程:    编写脚本 
      第二个里程: 批量执行脚本
      ansible oldboy -m script -a "/server/scripts/create_user.sh"
  • 第四个模块(copy)文件模块 可以将管理端数据进行批量分发/可以移动调整被管理端数据位置
     文件模块 可以将管理端数据进行批量分发/可以移动调整被管理端数据位置

      重要模块参数:
      src:        指定管理端要分发的数据路径信息
      dest:       指定数据传输到被管理端什么目录中
      mode:       数据传输完毕后,设置数据权限信息
      owner:      数据传输完毕后,设置数据属主信息
      group:      数据传输完毕后,设置数据属组信息
      backup:     是否开启数据分发备份功能        了解
      remote_src: 指定源的路径信息,从被管理端进行读取
      content:    可以直接不在管理端创建文件,对文件进行分发,并且可以编辑文件简单内容信息
      validate:   ???
      
      模块参数用法一:
      ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ mode=600 owner=oldboy group=oldboy"
      说明: 对目录进行分发
      1) 修改文件权限信息 和 文件属主属组信息
      2) 可以在被管理端创建指定目录信息
      
      ansible oldboy -m copy -a "src=/oldboy/ dest=/oldboy/" 
      说明: 对目录进行分发
      src指定目录后面有斜线 oldboy/  xxxxxx
      src指定目录后面没斜线 oldboy   xxxxxx
      
      模块参数用法二: 备份数据/还原数据方法
      传输备份文件数据方法一:
      ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ backup=yes"
      
      传输备份文件数据方法二:
      ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy.txt.bak remote_src=yes"
      还原数据 
      ansible oldboy -m copy -a "src=/oldboy/oldboy.txt.bak dest=/oldboy/oldboy.txt remote_src=yes"
      
      ============================================================================
      参数说明
      ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/ remote_src=yes"
      == 相应被管理端  mv /oldboy/oldboy.txt  /opt/
      ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/"
      == 相应管理端    scp -rp /oldboy/oldboy.txt  xx.xx.xx.xx:/opt/
      ============================================================================

  • 第五个模块: (fetch) 文件模块
      文件模块  进行数据拉取操作
      重要参数:
      src   : 指定远程主机需要拉取数据信息
      dest  : 将数据保存到本地管理主机什么路径中
      
      拉取数据方法:
      ansible oldboy -m fetch -a "src=/opt/password.txt dest=/oldboy"
      
      拉取后数据信息
      [root@m01 ~]# tree /tmp/172.16.1.41/
      /tmp/172.16.1.41/
      └── etc
          └── httpd
              └── conf
                  └── httpd.conf
      
      3 directories, 1 file
  • 第六个模块(file) 文件模型 可以修改文件数据属性信息(直接修改数据属性)/创建或删除数据信息
      重要参数:
      path:   指定要操作的远程主机数据路径信息
      mode:   修改文件权限信息 
      owner:  修改文件属主信息
      group:  修改文件属组信息
      state:  状态参数信息  
              创建目录(directory) 创建文件(touch) 创建软连接(link) 创建硬链接(hard) 删除文件(absent) 查看文件是否存在(file)
      
      模块参数用法一: 修改文件属性信息
      修改文件权限属性信息:
      ansible 172.16.1.41 -m file -a "path=/etc/hosts mode=666 owner=oldboy group=oldboy"
      修改目录权限属性信息: 问题* 如何递归修改目录权限???
      ansible 172.16.1.41 -m file -a "path=/oldboy/ mode=666 owner=oldgirl group=oldgirl"
      说明: 只是修改目录本身权限,不会进行递归修改权限信息(没有-R功能)
      
      模块参数用法二: 创建或删除文件数据
      创建目录:
      ansible 172.16.1.41 -m file -a "path=/oldboy/ state=directory"
      创建文件:
      ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=touch"
      创建链接:
      ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt  path=/oldboy/oldboy_soft_link state=link"  --- 创建软链接 
      ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt  path=/oldboy/oldboy_hard_link state=hard"  --- 创建硬链接
      删除数据:
      ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=absent"
      检查普通文件是否存在
      ansible 172.16.1.41 -m file -a "path=/etc/hosts state=file"
  • 第七个模块: (user) 用户模块 创建或删除用户信息
   name:         指定创建用户名称信息
      create_home:  创建用户是否有家目录
      shell:        指定用是否能够登陆系统  虚拟用户 /sbin/nologin
      uid:          指定用户uid数值
      password      指定用户密码信息***  使用密文信息设置密码  
      state:        默认present表示创建用户  使用absent删除用户信息
      group:        指定用户属于哪个用户组 (主要组) == useradd -g 
      groups:       指定用户属于哪个用户组 (附属组) == useradd -G

      模块参数用法一: 创建用户
      ansible 172.16.1.41 -m user -a "name=rsync uid=2000 create_home=no shell=/sbin/nologin"    --- 创建虚拟用户  
      ansible 172.16.1.41 -m user -a "name=oldboy uid=2001"                                      --- 创建普通用户
      
      模块参数用法二: 给创建用户设置密码
      ansible 172.16.1.41 -m user -a 'name=oldboy password=$6$123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1'
      
      模块参数用法三: 删除用户信息
      ansible 172.16.1.41 -m user -a 'name=oldboy state=absent'
      说明: 在删除用户是不会删除用户家目录. 问题* 如何将用户家目录删除 == userdel -r 
      [root@backup oldboy]# ll /home/oldboy -d
      drwx------ 2 2001 2001 83 Aug 23 11:33 /home/oldboy
      
      ================================================================================================
      补充: 利用user模块创建密文密码信息
      方法一: 
      ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
      mypassword:   指定明文密码信息
      mysecretsalt: 密码加密方式
      生成密文密码
      [root@m01 ~]# ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', '123456') }}"
      localhost | SUCCESS => {
          "msg": "$6$123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1"
      }
      
      方法二: 利用python命令生成密文信息
      第一个历程: 安装pip下载工具
      yum install -y python-pip
      第二个历程: 利用pip工具下载python程序包
      pip install passlib
      第三个历程: 生成密文信息
      [root@m01 ~]# python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
      Password: 
      $6$IQhh.egT4ow2dzmd$fk9W1.J4q1ArQ8nykkhh5A0waFbgU1Qa4sUdNm42.oYSpSMmIIl0262cSDg1Q6Ph8p3rnqHOs372A.GzD11.w/
      ================================================================================================
  • 第八个模块: (group) 用户模块 创建或删除用户组信息
      重要参数信息 
      name:   指定创建用户组名称信息
      gid:    指定创建用户组id编号信息
      state:  默认present  指定absent表示删除用户组

      模块参数用法一: 创建指定用户组
      ansible 172.16.1.41 -m group -a "name=oldboy gid=3000"
      
      模块参数用法二: 删除指定用户组
      ansible 172.16.1.41 -m group -a "name=oldboy state=absent"          
      
      

  • 第九个模块: (yum) 安装软件模块 安装软件/卸载软件
      name:   指定需要安装软件名称
      state:  指定状态信息
              安装软件(installed latest present)  卸载软件(absent removed)    
      
      模块参数用法一: 安装软件程序
      ansible 172.16.1.41 -m yum -a "name=telnet-server state=installed"
      
      模块参数用法二: 卸载软件程序
      ansible 172.16.1.41 -m yum -a "name=telnet-server state=absent"
  • 第十个模块: (service) 系统模块 控制服务运行状态
      重要参数: 
      name:    指定要管理的服务名称
      state:   指定服务运行状态
               停止(stopped) 启动(started) 重启(restarted) 平滑重启(reloaded)
      enabled: 指定服务是否开机自动启动 yes开机自启 no开机不要运行
      
      模块参数用法一: 控制服务运行状态:
      ansible 172.16.1.41 -m service -a "name=rsyncd state=started"
      ansible 172.16.1.41 -m service -a "name=rsyncd state=stopped"
      ansible 172.16.1.41 -m service -a "name=rsyncd state=restarted"
      ansible 172.16.1.41 -m service -a "name=rsyncd state=reloaded"
      
      模块参数用法二: 设置服务开机运行状态:
      ansible 172.16.1.41 -m service -a "name=rsyncd enabled=no"
      ansible 172.16.1.41 -m service -a "name=rsyncd enabled=yes"
  • 第十一个模块:( cron ) 系统模块 批量设置定时任务
      name     :  定义定时任务注释信息/避免出现重复的定时任务
      minute   :  指定时间信息中分钟信息  (0-59 */5 0,10)
      hour     :  指定时间信息中小时信息  (0-23 *)
      day      :  指定时间信息中日期信息  (1-31)
      month    :  指定时间信息中月份信息  (1-12)
      weekday  :  指定时间信息中星期信息  (0-6)
      job      :  指定定时任务命令信息
      
      crontab -e 
      * * * * *  执行定时任务 &>/dev/null
      
      模块参数用法一: 批量设置定时任务
      ansible 172.16.1.41 -m cron -a "name=crond-id-02 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"

      模块参数用法二: 删除定时任务
      ansible 172.16.1.41 -m cron -a "name=crond-id-02 state=absent"

      模块参数用法三: 注释定时任务     
      ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
      ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"
      
  • 第十二个模块:( mount ) 系统模块 进行批量挂载操作
   src:    挂载存储设备信息
      path:   挂载点目录信息
      fstype: 挂载的文件系统类型
      state:  指定挂载或是卸载
              挂载: mounted present
              mounted: 临时挂载存储目录信息  永久也挂载了存储目录信息  推荐
              present: 只是实现永久挂载
              
              卸载: unmounted absent            
              unmounted: 只是实现临时卸载
              absent:    临时实现卸载    永久也实现卸载操作
      
      参数操作方法一: 进行挂载操作 
      ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
      ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=present"
      
      参数操作方法二: 进行卸载操作
      ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=unmounted"
      ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=absent"

你可能感兴趣的:(day38--综合架构批量管理 ansible(自动化软件)-模块使用)