ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

23 ansible模块(一)

2021-05-28 22:04:05  阅读:145  来源: 互联网

标签:文件 模块 23 python ansible web01 root baim0


command模块

[root@m01 ~]# ansible 'web01' -m command -a "df -h"
web01 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   99G  3.6G   96G   4% /
/dev/sda1               1014M  177M  838M  18% /boot
tmpfs                     98M     0   98M   0% /run/user/0

#不支持特殊符号
{}、$、|
[root@m01 ~]# ansible 'web01' -m command -a "ifconfig eth0 | awk 'NR==2 {print $2}'"
web01 | FAILED | rc=1 >>
|: Unknown host
ifconfig: `--help' gives usage information.non-zero return code

#当ansible没有写模块的时候,默认使用的command模块

shell模块

#识别特殊符号,但是不支持$,需要转义\
[root@m01 ~]# ansible 'web01' -m shell -a "ifconfig eth0 | awk 'NR==2 {print $2}'"
web01 | CHANGED | rc=0 >>
        inet 192.168.15.7  netmask 255.255.255.0  broadcast 192.168.15.255

#加个\解决
[root@m01 ~]# ansible 'web01' -m shell -a "ifconfig eth0 | awk 'NR==2 {print \$2}'"
web01 | CHANGED | rc=0 >>
192.168.15.7

scripts模块

[root@m01 ~]# ansible 'web' -m script -a '~/sys.sh'
[root@m01 ~]# ansible 'nfs,backup' -m script -a '~/sys.sh'

yum_repository模块

创建源

#给web01,02,03配置php源
[root@m01 ~]# ansible 'web' -m yum_repository -a 'description="php repo" name="PHP Repository" baseurl="http://us-east.repo.webtatic.com/yum/el7/x86_64/" gpgcheck="0" file=php'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "PHP Repository", 
    "state": "present"
}
web03 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "PHP Repository", 
    "state": "present"
}
web02 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "PHP Repository", 
    "state": "present"
}

添加源

#去掉file
[root@m01 ~]# ansible 'web' -m yum_repository -a 'description="php repo" name="PHP Repository" baseurl="http://us-east.repo.webtatic.com/yum/el7/x86_64/" gpgcheck="0" '

修改源

#不修改flie,和name,修改其他的内容都会修改源

copy

功能:从ansible服务器主控端复制文件到远程主机

参数

参数 解释
src 用于指定需要copy的文件或目录。
dest 用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
content 当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
force 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
owner 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r--r--“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。

[root@m01 ~]# ll
-rw-r--r-- 1 root root   0 May 28 20:24 baim0.txt
#将本地的baim0.txt推到web01 /root/ 属主为www 权限为600
[root@m01 ~]# ansible web01 -m copy -a "src=/root/baim0.txt dest=/root/ owner=www mode=600"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/root/baim0.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0600", 
    "owner": "www", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1622204772.22-3550-122426624239125/source", 
    "state": "file", 
    "uid": 666
}

backup备份

功能比较鸡肋

[root@instance-gvpb80ao ~]# ansible 172* -m copy -a "src=test.sh dest=/tmp/push_ssh_key.sh backup=yes"
172.16.0.4 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/tmp/push_ssh_key.sh.2054.2021-05-20@15:18:31~", 
    "changed": true, 
    "checksum": "488c35d2c33b1e4cef55ff0d85cab928e68f3330", 
    "dest": "/tmp/push_ssh_key.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "1adcefd1e3aea3dbd54f0da29e586732", 
    "mode": "0600", 
    "owner": "shanhe", 
    "size": 43, 
    "src": "/root/.ansible/tmp/ansible-tmp-1621495109.9-1879-108678135537148/source", 
    "state": "file", 
    "uid": 1001
}
[root@instance-gvpb80ao ~]# ll /tmp/
total 2844
-rw------- 1 shanhe  root         43 May 20 15:18 push_ssh_key.sh
-rw------- 1 shanhe  root        264 May 20 15:13 push_ssh_key.sh.2054.2021-05-20@15:18:31~

fetch

功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录

参数

参数 解释
src (必需)要获取的远程系统上的文件。
dest (必需)要将文件保存到的目录。
fail_on_missing 当设置为 Trueyes,如果由于不明因素导致从远程主机中不能读取到该文件,则会显示 fail
validate_checksum 当文件fetch之后进行md5检查
Flat 允许覆盖默认行为从hostname/path到/file的,如果dest以/结尾,它将使用源文件的基础名称

pull

将刚刚copy过去的baim0.txt拉回来

[root@m01 ~]# ansible web01 -m fetch -a "src=/root/baim0.txt dest=/root Flat=yes" 
web01 | CHANGED => {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/root/web01/root/baim0.txt", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "remote_md5sum": null
}
[root@m01 ~]# ll
total 0
drwxr-xr-x 3 root root 18 May 28 20:37 web01
[root@m01 ~]# tree web01/
web01/
└── root
    └── baim0.txt

1 directory, 1 file

file

功能:设置文件属性,创建软链接等。

  • 参数
参数 解释
path 必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。
recurse 当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。
state 此参数非常灵活,其对应的值需要根据情况设定。 directory:在远端创建目录 touch:在远端创建文件 link:创建链接文件 absent:表示删除文件或目录 mode:设置文件或目录权限 owner:设置文件或目录属主 group:设置文件或目录属组
src 当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。
force 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。不过强制创建链接文件分为三种情况。情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
owner 用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。
group 用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。
mode 用于指定被操作文件的权限,比如,如果想要将文件权限设置为”rw-r-x---“,则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的。如果想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700。

在web01上增删

#增
[root@m01 ~]# ansible web01 -m file -a "path=/root/baim0.txt state=touch"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/root/baim0.txt", 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "state": "file", 
    "uid": 0
}
[root@web01 ~]# ll
total 0
-rw-r--r-- 1 root root 0 May 28 20:49 baim0.txt

#删
[root@m01 ~]# ansible web01 -m file -a "path=/root/baim0.txt state=absent"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/root/baim0.txt", 
    "state": "absent"
}
[root@web01 ~]# ll
total 0

创建目录并更改属主属组

[root@m01 ~]# ansible web01 -m file -a "path=/root/baim0 state=directory owner=www group=www"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 666, 
    "group": "www", 
    "mode": "0755", 
    "owner": "www", 
    "path": "/root/baim0", 
    "size": 6, 
    "state": "directory", 
    "uid": 666
}
[root@web01 ~]# ll
total 0
drwxr-xr-x 2 www www 6 May 28 20:54 baim0

做软连接

[root@m01 ~]# ansible web01 -m file -a "path=/root/test src=/root/baim0 state=link mode=600"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/root/test", 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "size": 11, 
    "src": "/root/baim0", 
    "state": "link", 
    "uid": 0
}
[root@web01 ~]# ll
total 0
drw------- 2 www  www   6 May 28 20:54 baim0
lrwxrwxrwx 1 root root 11 May 28 20:57 test -> /root/baim0
#这里属组属主,权限的更改都是源文件

unarchive

功能:解压缩。

实现有两种用法:

1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

  • 参数
参数 解释
copy 默认为yes,当copy=yes,本地文件到远程解压,如果设置为no,则是解压远程主机上的文件
remote_src 和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
src 源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设copy=no
dest 远程主机上的目标路径
mode 设置解压缩后的文件权限

将ansible端文件解压到远程

[root@m01 ~]# ansible web01 -m unarchive -a "src=/root/baim0.tar.gz dest=/root mode=600"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/root", 
    "extract_results": {
        "cmd": [
            "/usr/bin/gtar", 
            "--extract", 
            "-C", 
            "/root", 
            "-z", 
            "-f", 
            "/root/.ansible/tmp/ansible-tmp-1622208438.2-4118-59021993680154/source"
        ], 
        "err": "", 
        "out": "", 
        "rc": 0
    }, 
    "gid": 0, 
    "group": "root", 
    "handler": "TgzArchive", 
    "mode": "0550", 
    "owner": "root", 
    "size": 235, 
    "src": "/root/.ansible/tmp/ansible-tmp-1622208438.2-4118-59021993680154/source", 
    "state": "directory", 
    "uid": 0
}
[root@web01 ~]# ll
drw------- 3 root root  18 May 28 20:37 web01

解压远程主机上的文件

[root@m01 ~]# ansible web01 -m unarchive -a "src=/root/baim0.tar.gz copy=0 dest=/root mode=600 owner=www group=www"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/root", 
    "extract_results": {
        "cmd": [
            "/usr/bin/gtar", 
            "--extract", 
            "-C", 
            "/root", 
            "-z", 
            "--owner=www", 
            "--group=www", 
            "-f", 
            "/root/baim0.tar.gz"
        ], 
        "err": "", 
        "out": "", 
        "rc": 0
    }, 
    "gid": 0, 
    "group": "root", 
    "handler": "TgzArchive", 
    "mode": "0550", 
    "owner": "root", 
    "size": 248, 
    "src": "/root/baim0.tar.gz", 
    "state": "directory", 
    "uid": 0
}
[root@web01 ~]# ll
total 4
drw------- 2 www  www    6 May 28 20:54 baim0

archive

功能:打包压缩保存在被管理节点。

  • 参数
参数 解释
path 要压缩的文件或目录
dest 压缩后的文件
format 指定打包的类型
mode 权限
group 属组
owner 属主

压缩web01机器

[root@m01 ~]# ansible web01 -m archive -a "dest=/root/web01.tar.gz path=/root/web01 format=gz mode=600 group=www owner=www"
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "archived": [
        "/root/web01/root/baim0.txt"
    ], 
    "arcroot": "/root/", 
    "changed": true, 
    "dest": "/root/web01.tar.gz", 
    "expanded_exclude_paths": [], 
    "expanded_paths": [
        "/root/web01"
    ], 
    "gid": 666, 
    "group": "www", 
    "missing": [], 
    "mode": "0600", 
    "owner": "www", 
    "size": 154, 
    "state": "file", 
    "uid": 666
}

[root@web01 ~]# ll
total 4
drw------- 3 root root  18 May 28 20:37 web01
-rw------- 1 www  www  154 May 28 21:48 web01.tar.gz

Hostname模块

功能:管理主机名。

  • 参数
参数 解释
name 主机名

案例

[root@m01 ~]# ansible web01 -m hostname -a "name=nmsl"
web01 | CHANGED => {
    "ansible_facts": {
        "ansible_domain": "", 
        "ansible_fqdn": "nmsl", 
        "ansible_hostname": "nmsl", 
        "ansible_nodename": "nmsl", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "name": "nmsl"
}

[root@web01 ~]# bash
[root@nmsl ~]#

标签:文件,模块,23,python,ansible,web01,root,baim0
来源: https://www.cnblogs.com/zhaokunhao/p/14823936.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有