• ansible模块文件操作


    Ansible常用模块文件操作

    [root@tiandong etc]# ansible-doc -l   列出ansible所支持的模块

    [root@tiandong ~]# ansible-doc -s ping(模块名)   可以查看模块的详细信息

     

    Ping模块

    [root@tiandong ~]# ansible all -m ping

    Fetch模块。

    从远程主机拉去文件到ansible

    [root@tiandong etc]# ansible all -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"

                            表示调用fetch模块   -a选项用于传递模块所需要的参数

    Copy模块

    复制ansible上的文件文件到远程主机。

    [root@tiandong ansible]# ansible all -m copy -a "src=/testdir/copy dest=/tmp/"

    在远程主机/tmp目录下面生成文件copy

    [root@tiandong ansible]# ansible all -m copy -a "src=/testdir/copy dest=/tmp/ force=no"

    当远程主机已经存在复制的文件时,不会执行任何操作

    当返回信息为绿色,’changed’false,表示ansible没有进行任何操作

    [root@tiandong ansible]# ansible all -m copy -a "src=/testdir/copy dest=/tmp/ force=yes"

    forceyes的话会执行操作覆盖之前的文件

    [root@tiandong ansible]# ansible all -m copy -a "src=/testdir/copy dest=/tmp/ backup=yes"

    在拷贝之前会将源文件重命名已做备份,然后进行复制。

     

    [root@tiandong ansible]# ansible all -m copy -a "src=/testdir/copy dest=/tmp/ backup=yes mode=755 owner=tom group=tom"

    拷贝文件时制定文件的属主、属组、权限

    [root@tiandong ansible]# ansible all -m copy -a "content='welcom to beijing' dest=/tmp/test"

    在远程主机上生成文件test,内容为'welcom to beijing'

    在远程主机上查看文件:

    File模块

    可以进行文件的基本操作,创建(删除)文件或者目录、修改文件权限

    [root@tiandong ~]# ansible all -m file -a "path=/tmp/test_file state=touch"

    在远程主机上创建test_file的文件。若文件存在会更新文件的时间戳

    [root@tiandong ~]# ansible all -m file -a "path=/tmp/test_dir state=directory"

    在远程主机上创建test_dir的目录,若目录存在不进行任何操作。

    [root@tiandong ~]# ansible all -m file -a "path=/tmp/test_file state=touch mode=755 owner=tom group=tom"

    在远程主机上创建文件指定权限或者,修改属主或者属组

    [root@tiandong ~]# ansible all -m file -a "path=/tmp/winter state=directory owner=tom group=tom recurse=yes"

    操作远程主机的目录时,递归的将目录中的文件的属主属组设置为tom

    [root@tiandong ~]# ansible all -m file -a "path=/tmp/test_file state=absent"

    删除远程主机端的文件或者目录

    Blockinfile模块

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/rc.local block='service restart sshd service restart httpd'"

    在文件末尾插入两行

    在远程主机上查看:

    # BEGIN ANSIBLE MANAGED BLOCK   # END ANSIBLE MANAGED BLOCKblockinfile模块自动添加的文本快标记。

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/rc.local block='service restart iptables' marker='#{mark} service to restart'"

    使用marker可以自定义文本快标记。

    #{mark} service to restart这个标记已经存在于文本中:

    block对应的内容与之前的内容不同,这样对应的文本块内容会被更新而不是插入在末尾。

    Block对应的内容为空,删除对应的文本块。

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/rc.local marker='#{mark} service to restart' state=absent"  这样依然可以删除对应的文本块

    使用将state的值设置为absent,删除对应的文本块。

    默认文本块是插入在文件末尾的,可以将文件块插入指定的位置

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/rc.local block='###blockinfile test###' marker='#{mark} test' insertbefore=BOF"

    在文件的开头插入。

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/rc.local block='###blockinfile test reg###' marker='#{mark} test reg' insertbefore='^touch /var/lock/subsys/local'"

    根据正则表达式插入

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/rc.local marker='#{mark} test' state=absent backup=yes"

    使用backup参数,在删除模块的时候先进行备份在进行删除。

    [root@tiandong ~]# ansible all -m blockinfile -a "path=/tmp/create_test block='create test' marker='#{mark} test' create=yes"

    使用create参数,当文件不存在时进行创建

    Lineinfile模块

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test line='I come to beijing for qq'"

    当文件中存在这行时不行任何操作,不存在时在末尾插入

    此时不存在,在文件末尾插入该行。

    再次插入时就不进行如何操作。

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test line='tiandong' insertafter='I come to beijing for qq'"

    'I come to beijing for qq'之后插入line的内容

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test line='thunder' insertafter='^tian'"

    也可以使用正则表达式插入行的内容

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test regexp='^beijing' line='xian'"

    根据正则表达式替换某一行,如果有多行匹配到的话只修改最后一个匹配到的行,若是没有匹配到的话line中的内容就添加到文件的末尾,若是有backrefs=yes这个参数,没有匹配到的话就不做任何操作

    在远程主机上查看只修改了最后一处被匹配到的地方。

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test regexp='^thunder' line='tiandong' backrefs=yes"

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test regexp='^thunder' line='tiandong'"

    [root@tiandong ~]# ansible all -m lineinfile -a "path=/tmp/lineinfile_test regexp='^beijing' state=absent"

    正则表达式匹配到的行进行删除。

    line内容一样的进行删除。

    Replace模块

    根据指定的正则表达式替换文件中的字符串,所有匹配到的都会被替换

    [root@tiandong ansible]# ansible all -m replace -a 'path=/tmp/test regexp="winter" replace=WINTER'

    查看被控制端的文件:

    [root@tiandong ansible]# ansible all -m replace -a 'path=/tmp/test regexp="winter" replace=WINTER backup=yes'    该参数在替换之前进行备份

    查看被控制端:

  • 相关阅读:
    rmq +二分暴力 hdu 5726
    8.25 ccpc 比赛总结
    莫比乌斯反演题目总结
    HDU 4848 Wow! Such Conquering! (搜索+floyd)
    Codeforces 982 C Cut 'em all!(DFS)
    Codefoces 986C AND Graph(DFS)
    CodeForces 986A Fair(BFS)
    ACM经验贴
    Kattis A+B Problem(FFT)
    CF E. Porcelain (双向dp)
  • 原文地址:https://www.cnblogs.com/winter1519/p/9330084.html
Copyright © 2020-2023  润新知