Ansible模块使用方法

Ansbile使用

1.ansbile命令格式

ansible 目标主机 [-f N] [-m module_name] [-a args]
  • -f N:每次向N个主机发送指令
  • -m 模块名:指定使用的模块名称,默认是command模块
  • -a 参数: 指明模块专用参数;args一般为key=value格式

补充知识:

  • 指定目标主机的时候,可以用all表示
  • all表示的是主机清单中的全部主机和主机组

Ansbile模块使用

命令模块

command模块
简介:

**模块类型:**命令模块

适合使用简单的命令 无法支持"<",">","|",";","&"等符号

链接: Ansible官方文档.

  • 功能:在远程主机上执行命令
  • 格式:ansible 主机名 -m command -a “命令”

案例:在每个被管理主机上执行df -h命令

[root@localhost ~]# ansible all -m command -a "df -h"
11.11.11.12 | CHANGED | rc=0 >>
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   18G  1.2G   16G   8% /
tmpfs                         491M     0  491M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot

补充知识点

  • 因为command是默认模块,因此可以省略
  • 不指定模块,默认就是command模块
[root@localhost ~]# ansible all -a "df -h"
11.11.11.12 | CHANGED | rc=0 >>
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   18G  1.2G   16G   8% /
tmpfs                         491M     0  491M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
shell模块
简介:

**模块类型:**命令模块

shell模块可以执行带参数和变量的命令,支持"<",">","|",";","&"等符号

官方文档:https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module
链接: 官方文档.

  • 功能:在远程主机上执行命令
  • 格式:ansible 主机名 -m shell -a “命令”

    案例:在所有被管理节点上创建用户tom,然后修改tom密码为123

[root@localhost ~]# ansible all -m shell -a "useradd tom"
11.11.11.12 | CHANGED | rc=0 >>

[root@localhost ~]# ansible all -m shell -a "echo 123 | passwd --stdin tom"
11.11.11.12 | CHANGED | rc=0 >>
更改用户 tom 的密码 。
passwd: 所有的身份验证令牌已经成功更新。

用户模块

user模块
简介:

**模块类型:**用户模块

远程批量创建用户信息

链接: Ansible官方文档

  • 功能:管理用户
  • 格式:-m user -a "选项"
    • password:指定用户的密码
    • name:指定用户名
    • groups:指定用户的属组
    • createhome:是否创建家目录 yes|no
    • system:是否为系统用户
    • remove:当state=absent时,remove=yes则表示连同家目录一起删除
    • state:是创建还是删除

案例:在所有被管理节点创建用户jerry,密码设为123

[root@localhost ~]# ansible all -m user -a "name=jerry password=123"
11.11.11.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 502, 
    "home": "/home/jerry", 
    "name": "jerry", 
    "password": "NOT_LOGGING_PASSWORD", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 502
}
[root@localhost ~]# ansible all -m shell -a "tail -n1 /etc/passwd"
11.11.11.12 | CHANGED | rc=0 >>
jerry:x:502:502::/home/jerry:/bin/bash

案例:在所有被管理节点删除用户jerry

[root@localhost ~]# ansible all -m user -a 'name="jerry" state="absent"'
11.11.11.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "force": false, 
    "name": "jerry", 
    "remove": false, 
    "state": "absent"
}

文件模块

scipt模块
简介:

**模块类型:**文件模块

传输后在远程节点上运行本地脚本

链接: Ansible官方文档

  • 格式:-m script -a “脚本”

案例:在被管理节点的/home、/tmp、/root分别创建一个文件,文件名 时间.txt

[root@localhost ~]# cat my.sh 
#!/bin/bash
for dir in /home /tmp /root
do
    touch $dir/`date +%F-%T`.txt 
done
[root@localhost ~]# chmod +x my.sh 
[root@localhost ~]# ansible all -m script -a "/root/my.sh"
copy模块
简介:

**模块类型:**文件模块

复制文件和目录到远程主机

链接: Ansible官方文档

  • 格式:-m copy -a"选项"
  • 选项:
    • src:源文件或源目录
    • dest:指定目标主机的目录
    • mode:指定将文件复制过去后,将权限修改为多少
    • force:是否强制覆盖同名文件,yes/no

扩展知识:

changed返回值=true为执行成功

changed返回值=false为执行失败

案例:将/root/a.txt分发到所有被管理节点的/home下,复制后,将权限改为700

[root@localhost ~]# ansible all -m copy -a "src=/root/a.txt dest=/home mode=700"
11.11.11.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/home/a.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0700", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:user_home_dir_t:s0", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1592012167.29-116089-216151990404143/source", 
    "state": "file", 
    "uid": 0
}

故障案例:在使用copy模块报错:

[root@localhost ~]# ansible all -m copy -a "src=/root/a.txt dest=/home mode=700"
11.11.11.12 | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
}
  • 原因:被管理节点没有安装libselinux-python

  • 解决方法:在所有被管理节点安装libselinux-python

[root@localhost ~]# ansible all -m shell -a "yum install -y libselinux-python"
file模块
简介:

**模块类型:**文件模块

创建空文件、拷贝、移动、删除、创建连接

链接: Ansible官方文档

  • 格式:-m file -a “选项”
  • 选项:
    • name:文件名
    • src:源文件
    • path:指定目标路径
    • mode:相当于执行chmod
    • force:是否强制覆盖同名文件,yes/no
    • state:表示文件的类型
      • link:表示软链接文件
      • hard:表示硬链接文件
      • directory:表示目录
      • touch:创建空文件
      • absent:删除文件

案例:在每个被管理主机的tmp下创建空文件abc.txt

方法1
[root@localhost ~]# ansible all -m file -a "name=/tmp/abc.txt state=touch"
方法2
[root@localhost ~]# ansible all -m file -a "path=/tmp/abc.txt state=touch"

案例:在每个被管理主机的tmp下创建空文件abc.txt,创建软链接soft.txt

[root@localhost ~]# ansible all -m file -a "src=/tmp/abc.txt path=/tmp/soft.txt state=link"
unarchive模块
简介:

**模块类型:**文件模块

将压缩包解压到指定的位置下

链接: Ansible官方文档

  • 格式:-m unarchive -a “选项”
  • 选项
    • src:指定本地的压缩吧
    • dest:指定将压缩包解压到目标主机的哪个路径

案例:将nginx的源码包解压到被管理节点的home下

[root@localhost ~]# ansible all -m unarchive -a "src=/root/nginx-1.16.1.tar.gz dest=/home/"

安装模块

yum模块
简介:

**模块类型:**安装模块

使用yum软件包管理器安装,升级,降级,删除和列出软件包和组。

链接: Ansible官方文档

  • 作用:安装、卸载软件
  • 格式:-m yum -a “选项”
  • 选项
    • name:指定软件名称
    • state:设置安装、卸载
      • present:安装
      • absent:卸载

案例:在所有被管理节点安装httpd

[root@localhost ~]# ansible all -m yum -a "name=httpd state=present
[root@localhost ~]# ansible all -m shell -a "rpm -q httpd"

管理服务模块

service模块
简介:

**模块类型:**管理服务模块

控制远程主机上的服务。支持的init系统包括BSD init,OpenRC,SysV,Solaris SMF,systemd和upstart。

链接: Ansible官方文档

  • 格式:-m service -a “选项”
  • 选项:
  • name:指定服务名
  • state:设置服务状态
    • started启动服务
    • stopped停止服务
    • restarted重启服务
    • reloaded重载服务
  • enabled设置服务开机自动启动
  • runlevel设置服务的运行级别

案例:在所有被管理主机上安装apache

[root@localhost ~]# ansible all -m yum -a "name=httpd state=present"

案例:启动所有被管理主机上的httpd服务,并设置为开机自动启动

[root@localhost ~]# ansible all -m service -a "name=httpd state=started enabled=on"
systemd模块
简介:

**模块类型:**管理服务模块

centos7管理服务的方法,和service类似

链接: Ansible官方文档

  • 格式:-m systemd -a “选项”
  • 选项:
    • name:指定服务名
    • state:设置服务状态
      • started启动服务
      • stopped停止服务
      • restarted重启服务
      • reloaded重载服务
    • enabled设置服务开机自动启动
    • runlevel设置服务的运行级别

定时任务模块

cron模块
简介:

**模块类型:**定时任务模块

周期完成特定的工作

链接: Ansible官方文档

  • 格式:-m cron -a “选项”

  • 选项

    • minute:以分钟为单位来执行
    • state:添加或是删除计划任务
      • present:添加计划任务
      • abent:删除计划任务
    • special_time:在特殊时间节点执行
      • reboot重启的时候执行
      • daily每天执行一次

    案例:每隔2分钟在/tmp/a.txt中写入一行数据

[root@localhost ~]# ansible all -m cron -a "name=mycron state=present job='echo 123>>/tmp/a.txt' minute=*/2"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值