1. ansible模块使用说明

模块学习使用方法:授之以渔

  1. 学会看懂官方手册
  2. 学会在终端使用: ansible-doc modules

模块一:command

概念介绍:属于默认模块,可以执行命令远程管理主机,简单操作不支持 <> | 等

参数应用: chdir —-在执行命令之前进行目录切换 cmd —-指定需要执行命令信息 只能在剧本中加载模块使用 creates —- 判断一个文件是否存在 如果存在操作将不会执行 removes —- 判断一个文件是否存在 如果存在操作将会执行

模块二:shell

概念介绍:属于万能模块,可以执行命令远程管理主机, 可以识别加载特殊变量或符号信息 参数应用: chdir —-在执行命令之前进行目录切换 cmd —-指定需要执行命令信息 #只能在剧本中加载模块使用 creates —- 判断一个文件是否存在 如果存在操作将不会执行 removes —- 判断一个文件是否存在 如果存在操作将会执行 executable —- 指定执行命令方式 默认/bin/bash执行

eg: 利用shell模块执行脚本

  1. 在管理主机上创建一个脚本文件

    cat /server/scripts/test.sh

    1. #!/bin/bash
    2. echo oldboy123
    1. 需要将脚本传输到远程主机 scp -rp /server/scripts/test.sh 172.16.1.41:/server/scripts/
    2. 将脚本文件进行授权 ansible backup -m command -a “chmod +x /server/scripts/test.sh”
    3. 可以批量执行脚本文件 ansible backup -m shell -a “./test.sh chdir=/server/scripts/“

模块三:script

概念介绍: 专门用于执行脚本模块 参数应用: chdir —-在执行命令之前进行目录切换 cmd —-指定需要执行命令信息 只能在剧本中加载模块使用 creates —- 判断一个文件是否存在 如果存在操作将不会执行 removes —- 判断一个文件是否存在 如果存在操作将会执行 executable —- 指定执行命令方式 默认/bin/bash执行

eg: 利用script模块执行脚本

  1. 在管理主机上创建一个脚本文件

    cat /server/scripts/test.sh

    #!/bin/bash
    echo oldboy123        
     02.可以批量执行脚本文件
    
    ansible backup -m script -a “/server/scripts/test.sh”

expect:模块示例

某版本jumpserver 交互过程

  • hosts: lb01 tasks:
    • name: jump init expect:

      command: /bin/bash /server/scripts/test_read.sh

      command: /usr/bin/python /opt/jumpserver/install/install.py responses:
      请输入您服务器的IP地址: "10.0.0.5"
      是否安装新的MySQL服务器: "y"
      请输入SMTP地址: "smtp.163.com"
      请输入SMTP端口: "25"
      请输入账户: "17778058507@163.com"
      请输入密码: "oldboy123"
      是否继续: "y"
      输入: "admin"
      

模块四:copy

概念介绍:可以将数据信息传输到远程节点 / 将远程主机数据进行备份

参数应用: src —-指定要进行分发推送源文件 dest —-指定推送远程主机目标路径信息 owner —-推送数据时,对数据进行属主信息调整 group —- 推送数据时,对数据进行属主信息调整 mode —-推送数据时,指定数据权限信息 backup —- 推送数据前,将源有数据进行备份 validate —- 验证传输的文件合法性 content —- 直接在远程主机上生成一个文件,并且指定文件中信息 follow —- ??? remote_src —- 指定复制数据是在管理端还是在远程主机上 no 数据从管理复制 yes 从远程主机进行复制

eg: 01:批量分发传输数据 ansible backup -m copy -a “src=/server/scripts/test.sh dest=/server/scripts/ owner=oldboy group=oldboy mode=0755” backup | CHANGED => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: true, “checksum”: “ee1dc5089146af086a29ec6b95a2042883f8ee5d”, “dest”: “/server/scripts/test.sh”, “gid”: 1000, “group”: “oldboy”, “md5sum”: “b91fcd7982015eebcf72569a059359c1”, “mode”: “0755”, “owner”: “oldboy”, “size”: 28, “src”: “/root/.ansible/tmp/ansible-tmp-1595301732.55-6326-102835621139181/source”, “state”: “file”, “uid”: 1000 }

  1. 传输数据时对数据进行备份 ```bash 方法一: 利用默认backup指令实现备份数据 ansible backup -m copy -a “src=/server/scripts/test.sh dest=/server/scripts/ owner=oldboy group=oldboy mode=0755 backup=yes” PS: 不方便做批量还原

方法二: 利用remote_src指令实现备份数据 ——推荐 进行批量数据备份 ansible backup,websum -m copy -a “src=/server/scripts/test.sh dest=/server/scripts/test.sh_backup remote_src=yes” 进行批量数据还原 ansible backup,websum -m copy -a “src=/server/scripts/test.sh_backu dest=/server/scripts/test.sh remote_src=yes”

  1. 复制链接文件信息说明 ansible backup,websum -m copy -a “src=/server/scripts/test_link.sh dest=/server/scripts/“

  2. 直接在文件中添加内容 ansible backup -m copy -a “content=’oldboy71 linux edu\n’ dest=/server/scripts/oldboy.txt” ```

模块五:fetch 了解

概念介绍:可以将数据信息拉取到管理节点
参数应用:
src:  指定远程主机需要拉取数据信息
dest: 将主机拉取本地目录路径信息

eg: 01:拉取管理主机数据信息 ansible backup,web01 -m fetch -a ‘src=/backup/oldboy71.txt dest=/tmp/‘

模块六:file

概念介绍: 用于管理文件属性信息/可以在远程主机创建新的数据 参数应用: src —-在创建链接文件时,指定源文件信息 path: —-指定需要修改属性文件信息,或需要创建文件信息 owner: —- 直接对指定远程主机数据进行属主信息调整 group —- 直接对指定远程主机数据进行属组信息调整 mode: —- 直接对指定远程主机数据进行权限信息调整 state: —- 控制操作数据行为 · directory 用于创建目录信息 · hard 用于创建硬链接文件 · link 用于创建软链接文件 · touch 用于创建文件信息 · absent 将指定数据进行删除 · file 检测主机上指定文件是否存在 recurse: —- 进行递归操作 可以实现对目录与目录中数据进行递归属性修改 modification_time: —- 修改数据时间信息 mtime access_time: —- 修改数据时间信息 atime

eg

  1. 实现对文件数据属性信息调整 文件属性进行调整 ansible backup -m file -a “path=/backup/oldboy71.txt owner=oldboy group=oldboy mode=666”

目录属性进行调整 ansible backup -m file -a “path=/backup/ owner=oldgirl group=oldgirl mode=1777” ansible backup -m file -a “path=/backup/ owner=oldgirl group=oldgirl mode=1777 recurse=yes”

  1. 实现数据文件信息创建 ansible backup -m file -a “path=/oldgirl/ state=directory” —-创建目录方式 ansible backup -m file -a “path=/oldgirl/oldboy71.txt state=touch” —- 创建文本文件 ansible backup -m file -a “src=/oldgirl/oldboy71.txt path=/oldgirl/oldboy71_hard_link state=hard” —- 创建硬链接文件 ansible backup -m file -a “src=/oldgirl/oldboy71.txt path=/oldgirl/oldboy71_hard_link state=link” —- 创建软链接文件 ansible backup -m file -a “path=/oldgirl/oldboy71_hard_link state=absent” —- 删除指定数据

模块七:yum

概念介绍: 实现批量安装部署软件程序 参数应用: name —-指定安装软件名称信息 或者 安装软件url地址信息 state —-控制软件管理行为状态 installed 实现软件程序安装部署 removed 实现软件程序卸载过程 enablerepo —- 根据指定yum源文件进行下载程序 disablerepo —- 取消指定yum源文件应用 download_only —- 部署yum本地仓库时 只现在软件程序包 不会安装软件

eg:

  1. 安装部署软件程序 ansible backup -m yum -a “name=iftop state=installed”
  2. 卸载部署软件程序 ansible backup -m yum -a “name=iftop state=removed”

模块八:cron

概念介绍: 批量设置定时任务功能 参数应用; name —-对定时任务编写注释说明信息,必要 minute —-分钟信息 hour —- 小时信息 day —- 日期信息 month —- 月份信息 weekday —- 星期信息 job —- 任务信息 state —- 定时任务配置状态设置 absent —- 将定时任务删除 present —- 创建定时任务

补充: 定时任务配置问题:
00: 50 设置定时任务  0 */2 * * *   进行数据备份
/ 表示时间每隔多久执行  按照时间整数倍 进行每隔多久执行

eg

  1. 正常配置定时任务信息 ansible backup -m cron -a “name=time_syn minute=0 hour=0 job=’/bin/sh /server/scripts/time_syn.sh &>/dev/null’”

  2. 定时任务信息删除操作 ansible backup -m cron -a “name=time_syn state=absent”

  3. 定时任务注释功能 开启注释功能 ansible backup -m cron -a “name=time_syn02 minute=0 hour=0 job=’/bin/sh /server/scripts/time_syn.sh &>/dev/null’ disabled=yes” 取消注释功能 ansible backup -m cron -a “name=time_syn02 minute=0 hour=0 job=’/bin/sh /server/scripts/time_syn.sh &>/dev/null’ disabled=no”

模块九:user

概念介绍: 批量创建用户模块 参数应用: name: —-指定创建用户名称信息 comment: —-用户身份注释信息 类似useradd -c uid: —-用户uid指定配置 类似useradd -u group: —- 指定用户所属主要组 类似useradd -g groups: —- 指定用户所属附属组 类似useradd -G append: —- yes 表示用户可以附属于多个组 —- no 表示用户只能附属于一个组 shell: —- 指定登录系统方式 类似useradd -s state: —- 用户管理状态行为 present —- 创建指定用户 absent —-删除指定用户 remove: —- 将用户所有数据信息全部移除 类似userdel -r password: —- 创建用户密码信息 create_home —- 控制是否创建加目录

eg 01:创建用户信息 指定uid和密码信息

ansible backup -m user -a ‘name=heq uid=777 password=”$6$oldboy123$W3jkmkkVTr.9UStm4S50RT2uIEjB/4GEtaAeVCSZ..uWVN1YGxHvluss9JVfAPV0gSJoGn1qAfxGyttIsTjcz0”‘

用户密码信息必须是密文的: 方法一: 利用ansible命令生成密文 ansible all -i localhost, -m debug -a “msg={{ ‘明文密码信息’ | password_hash(‘sha512’, ‘oldboy123’) }}”

ansible all -i localhost, -m debug -a “msg={{ ‘123456’ | password_hash(‘sha512’, ‘oldboy123’) }}”

localhost | SUCCESS => {
"msg": "$6$oldboy123$W3jkmkkVTr.9UStm4S50RT2uIEjB/4GEtaAeVCSZ..uWVN1YGxHvluss9JVfAPV0gSJoGn1qAfxGyttIsTjcz0"
}

方法二: 利用python模块实现生成密文信息 yum install -y python-pip pip install passlib python -c “from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))” 交互过程: 需要输入明文信息 自动获取密文

02:将用户划分到指定组中 ansible backup -m user -a ‘name=heq group=oldboy’ —-修改主要组信息 ansible backup -m user -a ‘name=heq groups=oldgirl append=yes’ —- 修改附属组信息

  1. 创建虚拟用户信息 ansible backup -m user -a ‘name=heqing shell=/sbin/nologin create_home=no’

  2. 删除用户信息 ansible backup -m user -a ‘name=heq state=absent —- 只删除用户名称信息 不会删除家目录等数据信息 ansible backup -m user -a ‘name=alex state=absent remove=yes’ —- 彻底删除用户所有信息

模块十:service

概念介绍: 管理系统服务运行状态 (systemctl命令可以管理服务) 参数应用: name: —- 定义需要管理服务名称 state: —- 定义服务运行状态 reloaded restarted started stopped enabled: —- 定义服务开启是否自动启动 yes开机自启 no 不要开机自启

eg:

  1. 控制服务运行状态 ansible backup -m service -a “name=rsyncd.service state=stopped enabled=yes”

2. Ansible扩展模块

命令类型模块

expect 免交互模块

文件类型模块

unarchive 解压模块
archive 压缩数据模块
lineinfile 替换信息模块

包类型模块

pip

系统类型模块

          mount