【Ansible常用模块】


ansible运行任务的方式:Ad-hoc:ansible命令、Playbook剧本:YAML语言
Ad-hoc:ansible 主机或组 -m 模块名 -a '模块参数’

一、ansible模块

1.查看模块:ansible-doc -l | wc -l

[root@manager ansible]# ansible-doc -l |wc -l
3387

2.模块帮助:ansible-doc 模块名 (-s :查看模块参数)

[root@manager ansible]# ansible-doc ping

-v表示详细过程
ansible 模块名 -v
ansible 模块名 -vv

[root@manager ~]# ansible web -m ping -v
Using /etc/ansible/ansible.cfg as config file
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

-i 可以切换到配置路径

[root@master ~]# ansible -i /ansible/inventory test -m ping -o
node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

3.常用模块有哪些?

3.1ping模块

ping模块:没有参数,测试被管理方能否正常通信

[root@manager ansible]# ansible 192.168.131.108 -m ping
192.168.131.108 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

3.2command模块

command命令模块:作为ansible的默认模块,可以运行远程权限范围所有的shell命令,不支持管道符
没有-m参数,默认使用的是command模块:ansible node1 -a hostname

[root@manager ansible]# ansible node1 -m command -a hostname
node1 | CHANGED | rc=0 >>
node1
#command模块不支持管道符
[root@manager ansible]# ansible node1 -m command -a 'grep bash$ /etc/passwd | wc -l'
node1 | FAILED | rc=2 >>
/etc/passwdgrep: |: 没有那个文件或目录
grep: wc: 没有那个文件或目录non-zero return code

3.3shell模块:可以执行任何linux命令

shell模块:执行远程主机上的shell脚本文件或命令,支持管道符

[root@manager ansible]# ansible node1 -m shell -a 'grep bash$ /etc/passwd | wc -l'
node1 | CHANGED | rc=0 >>
4
[root@manager ansible]# ansible node1 -m shell -a '/scripts/day1/1.sh'
node1 | CHANGED | rc=0 >>
管理员
root@master ansible]# ansible-doc -s shell  #查看shell模块的参数信息
[root@master ansible]# ansible all -m shell -a 'free -m' -o
node1 | CHANGED | rc=0 | (stdout)               total        used        free      shared  buff/cache   available\nMem:           1819         284        1207           9         326        1386\nSwap:          2047           0        2047
[root@master ansible]# ansible test -m shell -a 'chdir=/opt date > date.txt' -o
node1 | CHANGED | rc=0 | (stdout) 
[root@master ansible]# ansible test -m shell -a 'cat /opt/date.txt' -o
node1 | CHANGED | rc=0 | (stdout) 20200920日 星期日 08:33:26 CST

3.4script模块

script模块:在远程主机执行主控端存储的shell脚本文件,相当于scp+shell组合。

[root@manager ansible]# ansible node1 -m script -a '/scripts/day1/2.sh'
node1 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to node1 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to node1 closed."
    ], 
    "stdout": "Welcome to shell script\r\n", 
    "stdout_lines": [
        "Welcome to shell script"
    ]
}

3.5raw模块

raw模块:执行运城主机上的命令,但没有chdir create remove等参数,能执行大部分操作

[root@manager ~]# ansible node1 -m raw -a 'chdir=/tmp touch f3'
node1 | CHANGED | rc=0 >>
Shared connection to node1 closed.
[root@manager ~]# ansible node1 -m shell -a 'ls -l . | grep f3'
node1 | CHANGED | rc=0 >>
-rw-r--r--  1 root root    0 617 17:41 f3

f3会在当前目录创建,并不会在/tmp下创建,因为raw不支持chdir操作

3.6yum_repository模块

3.6.1 添加yum源

[root@master ansible]# ansible test -m yum_repository -a 'name=ansible description=ansible baseurl=http://node1/ansible gpgcheck=no enabled=yes'

3.6.2 删除yum源

[root@master ansible]# ansible test -m yum_repository -a 'name=ansible state=absent'

3.7yum模块

yum模块:用来批量管理多台主机软件包
参数:name:软件包名 state:latest最新安装/absent移除/present安装
安装多个软件包:ansible web -m yum -a 'name="," state=present' 或者在剧本使用
移除多个软件包:ansible web -m yum -a 'name="," state=absent'
更新系统(更新所有软件包):ansible web -m yum -a 'name="*" state=latest'
安装互联网软件:ansible web -m yum -a 'name=http://rpmfind.net/linux/epel/7/x86_64/Packages/s/sl-5.02-1.el7.x86_64.rpm state=absent' state=present'

[root@manager ansible]# ansible node1 -m yum -a 'name=httpd state=present'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "installed": [
            "httpd"
        ]
    }, 
    "msg": "Repository base is listed more than once in the configuration\n", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirrors.aliyun.com\n * epel: mirrors.bfsu.edu.cn\n * extras: mirrors.aliyun.com\n * updates: mirrors.aliyun.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package       Arch           Version                        Repository    Size\n================================================================================\nInstalling:\n httpd         x86_64         2.4.6-93.el7.centos            base         2.7 M\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : httpd-2.4.6-93.el7.centos.x86_64                             1/1 \n  Verifying  : httpd-2.4.6-93.el7.centos.x86_64                             1/1 \n\nInstalled:\n  httpd.x86_64 0:2.4.6-93.el7.centos                                            \n\nComplete!\n"
    ]
}
[root@manager ansible]# ansible node1 -m yum -a 'name=httpd state=absent'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "removed": [
            "httpd"
        ]
    }, 
    "msg": "Repository base is listed more than once in the configuration\n", 
    "rc": 0, 
    "results": [
        "已加载插件:fastestmirror\n正在解决依赖关系\n--> 正在检查事务\n---> 软件包 httpd.x86_64.0.2.4.6-93.el7.centos 将被 删除\n--> 解决依赖关系完成\n\n依赖关系解决\n\n================================================================================\n Package       架构           版本                          源             大小\n================================================================================\n正在删除:\n httpd         x86_64         2.4.6-93.el7.centos           @base         9.4 M\n\n事务概要\n================================================================================\n移除  1 软件包\n\n安装大小:9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  正在删除    : httpd-2.4.6-93.el7.centos.x86_64                            1/1 \n  验证中      : httpd-2.4.6-93.el7.centos.x86_64                            1/1 \n\n删除:\n  httpd.x86_64 0:2.4.6-93.el7.centos                                            \n\n完毕!\n"
    ]
}

3.7service模块

service模块:远程主机系统服务管理模块
启动并开启自启动httpd:ansible web -m service -a 'name=httpd state=started enable=yes'

[root@manager ansible]# ansible node1 -m service -a 'name=httpd state=started enabled=yes'
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "enabled": true, 
    "name": "httpd", 
    "state": "started", 
    "status": {
        "ActiveEnterTimestamp": "二 2020-06-16 19:04:57 CST", 
        "ActiveEnterTimestampMonotonic": "5003089739", 
        "ActiveExitTimestampMonotonic": "0", 
        "ActiveState": "active", 
        "After": "basic.target tmp.mount nss-lookup.target systemd-journald.socket system.slice -.mount network.target remote-fs.target", 
        "AllowIsolate": "no", 
        "AmbientCapabilities": "0", 
        "AssertResult": "yes", 
        "AssertTimestamp": "二 2020-06-16 19:04:57 CST", 
        "AssertTimestampMonotonic": "5002942190", 
        "Before": "multi-user.target shutdown.target", 
        "BlockIOAccounting": "no", 
        "BlockIOWeight": "18446744073709551615", 
        "CPUAccounting": "no", 
        "CPUQuotaPerSecUSec": "infinity", 
        "CPUSchedulingPolicy": "0", 
        "CPUSchedulingPriority": "0", 
        "CPUSchedulingResetOnFork": "no", 

3.8copy模块

copy模块:复制文件到目标主机
ansible node1 -m copy -a 'src=原文件 desc=目标位置 ower=属主 group=数组 mode=权限 backup=是否备份'
备份的话,文件名会带上时间戳信息

[root@manager ansible]# ansible node1 -m copy -a 'src=/scripts/day1/1.sh dest=/1 mode=644 backup=yes '
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "fa1cbb78c8edfa79b1f11ec6178761f269e3b462", 
    "dest": "/1/1.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "3aef8d9879fac56db561113164060efe", 
    "mode": "0644", 
    "owner": "root", 
    "size": 241, 
    "src": "/root/.ansible/tmp/ansible-tmp-1592306224.75-3662-25575030013411/source", 
    "state": "file", 
    "uid": 0
}
[root@manager ansible]# ansible node1 -a 'ls /1'
node1 | CHANGED | rc=0 >>
1.sh

将centent内容放到目标文件

[root@manager ansible]# ansible node1 -m copy -a 'content="hello ansible" dest=/1/hello.txt'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "7b320b1dc0c867516cf00728df488daa3532bc1f", 
    "dest": "/1/hello.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "37bc018071eae9a0e879c31b2f9aa554", 
    "mode": "0644", 
    "owner": "root", 
    "size": 13, 
    "src": "/root/.ansible/tmp/ansible-tmp-1592306387.09-3698-45787220128456/source", 
    "state": "file", 
    "uid": 0
}
[root@manager ansible]# ansible node1 -a 'cat /1/hello.txt'
node1 | CHANGED | rc=0 >>
hello ansible

3.9file模块

file模块:对远程主机的文件做一些操作:创建文件/目录、删除文件或/目录、修改文件权限、创建连接文件等
创建目录:

[root@manager ansible]# ansible node1 -m file -a 'path=/backup state=directory'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/backup", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}

删除目录

[root@manager ansible]# ansible node1 -m file -a 'path=/backup state=absent'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/backup", 
    "state": "absent"
}

创建软链接:

[root@manager ansible]# ansible node1 -m file -a 'src=/1/1.sh dest=/1/1_soft state=link'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/1/1_soft", 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "size": 7, 
    "src": "/1/1.sh", 
    "state": "link", 
    "uid": 0
}
[root@manager ansible]# ansible node1 -a 'ls -l /1'
node1 | CHANGED | rc=0 >>
总用量 12
-rw-r--r-- 1 root root 241 616 19:17 1.sh
lrwxrwxrwx 1 root root   7 616 19:29 1_soft -> /1/1.sh

3.10lineinfile模块:用于远程主机文件内容修改

lineinfile模块:用于远程主机文件内容修改、在某行前添加一行、删除、替换文本内容等
内容替换:

root@manager ansible]# ansible node1 -m lineinfile -a 'path=/1/1.sh regexp="^fi$" line="fifi"'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup": "", 
    "changed": true, 
    "msg": "line replaced"
}
[root@manager ansible]# ansible node1 -a 'cat  /1/1.sh'
node1 | CHANGED | rc=0 >>
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-06-06
#FileName:      1.sh
#*************************************************************
if [ $USER = 'root' ]
then 
	echo '管理员'
fifi
[root@master ansible]# ansible test -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled"'
[root@master ansible]# ansible test -m lineinfile -a 'path="/opt/ad-hoc.sh" regexp="^#" state=absent'

3.11repalce模块

replace模块:替换字符串

[root@manager ansible]# ansible node1 -m replace -a 'path=/1/1.sh regexp="^fifi$" replace="fi"'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "msg": "1 replacements made"
}
[root@manager ansible]# ansible node1 -a 'cat  /1/1.sh'
node1 | CHANGED | rc=0 >>
#!/bin/bash
#*************************************************************
#Author: pyy
#Date:  2020-06-06
#FileName:      1.sh
#*************************************************************
if [ $USER = 'root' ]
then 
	echo '管理员'
fi

3.12unarchive模块

unarchive模块:解压缩模块
有两种用法:
1.将ansible主机上的压缩包解压传到远程主机的指定路径下,这种情况下,copy=yes
2.将远程主机上的某个压缩包解压缩到指定路径下,这种情况下,copy=no

[root@manager ansible]# ansible node1 -m unarchive -a 'src=/1/1.tar.gz dest=/2/ copy=no'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/2/", 
    "extract_results": {
        "cmd": [
            "/usr/bin/gtar", 
            "--extract", 
            "-C", 
            "/2/", 
            "-z", 
            "-f", 
            "/1/1.tar.gz"
        ], 
        "err": "", 
        "out": "", 
        "rc": 0
    }, 
    "gid": 0, 
    "group": "root", 
    "handler": "TgzArchive", 
    "mode": "0755", 
    "owner": "root", 
    "size": 27, 
    "src": "/1/1.tar.gz", 
    "state": "directory", 
    "uid": 0
}
[root@manager ansible]# ansible node1 -a 'ls -l /2'
node1 | CHANGED | rc=0 >>
总用量 8
-rw-r--r-- 1 root root 241 616 19:40 1.sh
-rw-r--r-- 1 root root   6 68 21:47 q

3.13group模块

group模块:管理远程主机上的组
参数:name="" state=present创建/absent删除 gid=""
创建系统组

[root@manager ~]# ansible node1 -m group -a 'name=rhce state=present system=yes gid=777'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 777, 
    "name": "rhce", 
    "state": "present", 
    "system": true
}
[root@manager ~]# ansible node1 -m shell -a 'cat /etc/group | grep rhce'
node1 | CHANGED | rc=0 >>
rhce:x:777:

3.14user模块

user模块:管理远程主机上的用户,如创建用户、修改用户、删除用户、为用户创建密钥对
参数:name=用户名 group=基本组名 groups=附加组名 shell=默认shell uid="" expires=过期时间 comment=注释 state=present创建/absent删除(当state=absent时,表示删除用户,但不会删除用户的家目录和邮箱等) remove=yes/no(当remove=yes时,表示删除用户连同用户的家目录和邮箱等一块删除) password=密文密码
怎么生成密文密码:
第一种:使用Python模块中的crypt

[root@manager ~]# python
Python 2.7.5 (default, Aug  7 2019, 00:51:29) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt('123456')
'$6$yi6g3T7sxdABJKnM$Fj76qZczUCI6uWrs.VXYjwsXJUvxEmbW0ioYrg0qmASnsmEiX6c1Mqfs5SaxfpKHrIHZFTJPqMuNZQWwk1X5H.'

第二种:使用openssl

[root@manager ~]# openssl  passwd -1 -salt $(openssl rand -base64 20) '123456'
$1$8VK7wpLK$/7uTOlD08h2xtMZBXtjUu0

创建用户:创建用户bob,并设置密码 附加组是rhce,系统用户
ansible web -m user -a 'name=bob password=$1$8VK7wpLK$/7uTOlD08h2xtMZBXtjUu0 groups=rhce system=yes’

[root@manager ~]# ansible node1 -m user -a 'name=bob password=$1$8VK7wpLK$/7uTOlD08h2xtMZBXtjUu0 groups=rhce system=yes'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 776, 
    "groups": "rhce", 
    "home": "/home/bob", 
    "name": "bob", 
    "password": "NOT_LOGGING_PASSWORD", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": true, 
    "uid": 993
}
[root@manager ~]# ansible node1 -m shell -a 'id bob'
node1 | CHANGED | rc=0 >>
uid=993(bob) gid=776(bob)=776(bob),777(rhce)
[root@node1 home]# ssh bob@192.168.131.108
The authenticity of host '192.168.131.108 (192.168.131.108)' can't be established.
ECDSA key fingerprint is SHA256:juTwG+tQbTHfoLMqHRgIGcmuyrAxNSvt2WE6IAFoaJI.
ECDSA key fingerprint is MD5:52:87:cd:ee:9c:a5:06:38:db:9c:57:34:f4:bb:ff:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.131.108' (ECDSA) to the list of known hosts.
bob@192.168.131.108's password: 
Last login: Wed Jun 17 18:10:23 2020
[bob@node1 ~]$ 

为所有被管理机器bob用户生成密钥对:

[root@master ansible]# ansible test -m user -a 'name=bob generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'

3.15cron模块(用户默认为root)

cron模块:管理远程主机中的计划任务,功能相当于crontab命令
参数:name=任务名 hour=小时 minute=分 day=天(默认为*) month=月(默认为*) weekday=周(默认为*) special_time=@reboot/@hourly user= job=命令/脚本 state=absent(根据名称删除某个计划任务) backup=yes/no是否备份
创建定义一个任务,每周五的14点30分执行备份/var

[root@manager ~]# ansible node1 -m cron -a 'name="crontab test" weekday=5 hour=14 minute=30 job="/usr/bin/tar -czf /opt/var.tar.gz /var"'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "crontab test"
    ]
}

删除这个计划任务

[root@manager ~]# ansible node1 -m cron -a 'name="crontab test" state=absent'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}

3.16firewalld模块

允许服务:

[root@master ansible]# ansible test -m firewalld -a 'service=http permanent=yes immediate=yes state=enabled'

允许端口:

[root@master ~]# ansible all -m firewalld -a 'port=80/tcp state=enabled immediate=yes permanent=yes'

富规则:允许某个网段

[root@master ~]# ansible all -m firewalld -a 'rich_rule="rule family=ipv4 source address=192.168.131.0/24 service name=http accept" state=enabled immediate=yes permanent=yes'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "msg": "Permanent and Non-Permanent(immediate) operation, Changed rich_rule rule family=ipv4 source address=192.168.131.0/24 service name=http accept to enabled"
}

端口转发:

[root@master ~]# ansible all -m firewalld -a 'rich_rule="rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443" state=enabled immediate=yes permanent=yes'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "msg": "Permanent and Non-Permanent(immediate) operation, Changed rich_rule rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443 to enabled"
}

3.17synchronize模块:在被控机和控制机都需要安装rsync。可以实现增量同步

recursive=yes (表示递归)
delete=yes (表示删除源中没有但目标存在的文件,使两边内容一样,以推送方为主)

[root@master ansible]# ansible all -m yum -a 'name=rsync state=present'

将主控端的文件推送到被控端:

[root@master ansible]# ansible test -m synchronize -a 'src=/etc/hosts dest=/tmp'

将被控端的文件拉取到主控端:mode=pull

[root@master ansible]# ansible test -m synchronize -a 'src=/tmp/hosts dest=/tmp mode=pull' (从被管理结点拉到控制节点)

3.18fetch模块:从被管理控制结点拉取文件到控制结点

[root@master ansible]# ansible test -m fetch -a 'src=/etc/hosts dest=/opt/'
[root@master ansible]# ll /opt/node1/etc/
总用量 4
-rw-r--r-- 1 root root 494 920 11:47 hosts

3.19get_url模块:下载模块

[root@master ~]# ansible all -m get_url -a 'url=http://nginx.org/download/nginx-1.17.8.tar.gz dest=/opt '

3.20parted模块:创建分区:pv

使用parted模块创建一个500M主分区:

[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=1 state=present part_end=500MB'
[root@master ~]# ansible all -m shell -a 'lsblk'
node1 | CHANGED | rc=0 >>
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk 
└─sdb1            8:17   0  476M  0 part
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=1 state=absent'

使用parted模块创建一个类型为lvm的1G分区:

[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=2 state=present flags=lvm part_end=1GiB'
[root@master ~]# ansible all -m shell -a 'lsblk'
node1 | CHANGED | rc=0 >>
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk 
└─sdb1            8:17   0 1023M  0 part 
sr0              11:0    1  942M  0 rom  /mnt

3.21lvg模块:创建卷组

使用lvg模块利用上面的lvm类型分区创建一个名为myvg的卷组:

[root@master ~]# ansible all -m lvg -a 'vg=myvg pvs=/dev/sdb1'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true
}
[root@master ~]# ansible all -m shell -a 'pvs'
node1 | CHANGED | rc=0 >>
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--   <19.00g       0 
  /dev/sdb1  myvg   lvm2 a--  1020.00m 1020.00m
[root@master ~]# ansible all -m shell -a 'vgs'
node1 | CHANGED | rc=0 >>
  VG     #PV #LV #SN Attr   VSize    VFree   
  centos   1   2   0 wz--n-  <19.00g       0 
  myvg     1   0   0 wz--n- 1020.00m 1020.00m

再往myvg卷组添加pv:vg扩容

[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=3 flags=lvm part_start=2GiB part_end=3GiB state=present'
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=4 flags=lvm part_start=3GiB part_end=4GiB state=present'
[root@master ~]# ansible all -m lvg -a 'vg=myvg pvs=/dev/sdb1,/dev/sdb2,/dev/sdb3'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true
}
[root@master ~]# ansible all -m shell -a 'pvs'
node1 | CHANGED | rc=0 >>
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--   <19.00g       0 
  /dev/sdb1  myvg   lvm2 a--  1020.00m 1020.00m
  /dev/sdb2  myvg   lvm2 a--  1020.00m 1020.00m
  /dev/sdb3  myvg   lvm2 a--  1020.00m 1020.00m
[root@master ~]# ansible all -m shell -a 'vgs'
node1 | CHANGED | rc=0 >>
  VG     #PV #LV #SN Attr   VSize   VFree 
  centos   1   2   0 wz--n- <19.00g     0 
  myvg     3   0   0 wz--n-  <2.99g <2.99g

3.22lvol模块:创建逻辑卷

使用lvol模块在myvg卷组上创建一个名为mylv的逻辑卷,大小为500M:

[root@master ~]# ansible all -m lvol -a 'vg=myvg lv=mylv size=500'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "msg": ""
}
[root@master ~]# ansible all -m shell -a 'lvs'
node1 | CHANGED | rc=0 >>
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g                                                    
  swap centos -wi-ao----   2.00g                                                    
  mylv myvg   -wi-a----- 500.00m

3.23filesystem模块:格式化文件系统

使用filesystem模块为mylv逻辑卷创建xfs文件系统:

[root@master ~]# ansible all -m filesystem -a 'dev=/dev/myvg/mylv fstype=xfs'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true
}

3.24mount模块:挂载

创建挂载点:

[root@master ~]# ansible all -m file -a 'path=/tools state=directory'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/tools", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}

挂载mylv到/tools,并设置开机自动挂载:开机自动挂载:state=mounted

[root@master ~]# ansible all -m mount -a 'src=/dev/myvg/mylv path=/tools fstype=xfs state=mounted'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "xfs", 
    "name": "/tools", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "/dev/myvg/mylv"
}
[root@master ~]# ansible all -m shell -a 'df -Th'
node1 | CHANGED | rc=0 >>
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  899M     0  899M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  5.4G   12G   32% /
/dev/sda1               xfs      1014M  281M  734M   28% /boot
/dev/sr0                iso9660   942M  942M     0  100% /mnt
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0
/dev/mapper/myvg-mylv   xfs       497M   26M  472M    6% /tools
[root@master ~]# ansible all -m shell -a 'tail -1 /etc/fstab'
node1 | CHANGED | rc=0 >>
/dev/myvg/mylv /tools xfs defaults 0 0

3.25setup模块:查看系统信息模块

[root@master ~]# ansible all -m setup 
node1 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.131.108"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::b6c0:3a78:4c0c:abf8"
        ], 
        "ansible_apparmor": {
            "status": "disabled"
        }, 
        "ansible_architecture": "x86_64", 
        "ansible_bios_date": "04/13/2018", 
        "ansible_bios_version": "6.00", 
        "ansible_cmdline": {
            "BOOT_IMAGE": "/vmlinuz-3.10.0-1127.19.1.el7.x86_64", 
            "LANG": "zh_CN.UTF-8", 
            "crashkernel": "auto", 
            "quiet": true, 
            "rd.lvm.lv": "centos/swap", 
            "rhgb": true, 
            "ro": true, 
            "root": "/dev/mapper/centos-root", 
            "spectre_v2": "retpoline"
        }, 

也可以,在此基础上过滤出想获得的值:

[root@master ~]# ansible all -m setup -a 'filter=ansible_memory_mb'
node1 | SUCCESS => {
    "ansible_facts": {
        "ansible_memory_mb": {
            "nocache": {
                "free": 1393, 
                "used": 426
            }, 
            "real": {
                "free": 626, 
                "total": 1819, 
                "used": 1193
            }, 
            "swap": {
                "cached": 0, 
                "free": 2047, 
                "total": 2047, 
                "used": 0
            }
        }, 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

常用信息

ansible_all_ipv4_addresses:仅显示ipv4的信息

ansible_devices:仅显示磁盘设备信息

ansible_distribution:显示是什么系统,例:centos,suse等

ansible_distribution_version:仅显示系统版本

ansible_machine:显示系统类型,例:32位,还是64位

ansible_eth0:仅显示eth0的信息

ansible_hostname:仅显示主机名

ansible_kernel:仅显示内核版本

ansible_lvm:显示lvm相关信息

ansible_memtotal_mb:显示系统总内存

ansible_memfree_mb:显示可用系统内存

ansible_memory_mb:详细显示内存情况

ansible_swaptotal_mb:显示总的swap内存

ansible_swapfree_mb:显示swap内存的可用内存

ansible_mounts:显示系统磁盘挂载情况

ansible_processor:显示cpu个数(具体显示每个cpu的型号)

ansible_processor_vcpus:显示cpu个数(只显示总的个数)

ansible_python_version:显示python版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛追汤圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值