设为首页 加入收藏

TOP

Ansible常用模块(一)
2023-07-23 13:30:41 】 浏览:81
Tags:Ansible 常用模

Command模块

作用:使用ansible自带模块执行一些简单的命令 不能使用 > < | & ' '等特殊字符,如果需要使用,则用shell模块。

常用参数有:

  • chdir:先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
  • creates:先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
  • removes:先切换工作目录,再执行后面的命令,一般情况下在编译时候使用

在节点服务器上面执行命令时,默认是在当前用户的家目录/root

ansible 192.168.1.2 -a 'ls'

chdir 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用

ansible 192.168.1.2 -a 'chdir=/tmp pwd'

creates 如果creates的目录或文件存在,则不执行后面的操作

ansible httpd -a 'creates=/tmp ls /etc/passwd'
ansible httpd -a 'creates=/lemon ls /etc/passwd'

removes 和creates相反,如果removes的文件存在,才执行后面的操作

ansible httpd -a 'removes=/tmp ls /etc/passwd'
ansible httpd -a 'removes=/lemon ls /etc/passwd'

使用特殊符号

ansible httpd,mysql -m command -a "ifconfig ens32"

ansible httpd -m command -a "ifconfig |awk NR==2'{print $2}'"

Shell模块

参数和command基本一样,都有chdir,creates,removes等参数。
调用bash执行命令,可以理解为command的升级版,与command区别在于他能调用一些复杂的命令了。但是,类似于ifconfig |awk NR==2'{print $2}'这种很复杂的命令,他依然做不到完美的处理结果。

注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”

创建目录时的警告解决方案

ansible 192.168.1.2 -m shell -a 'mkdir /tmp/test'
ansible 192.168.1.2 -m shell -a 'ls /tmp'

测试创建节点主机已经存在的文件之后会不会覆盖

ansible httpd -m copy -a "content='very good\n' dest=/tmp/test/1.txt"    //在节点1主机创建数据文件
ansible httpd -m shell -a 'cd /tmp/test && touch 1.txt && cat /tmp/test/1.txt'     //验证是否会被覆盖

为了避免这种无意义的操作,使用creates如果文件存在就不执行后面的命令

ansible httpd -m shell -a 'creates=/tmp/test/1.txt cd /tmp/test && touch 1.txt && ls'

验证shell模块能否使用特殊符号

ansible httpd,mysql -m shell -a "ifconfig ens32|grep 'RX'"

ansible httpd -m shell -a "ifconfig |awk NR==2'{print $2}'"

解决办法:写到脚本里,在copy到远程执行,再把需要的结果拉回执行命令的机器(执行Ansible命令的机器往往称为:Master机或者中控机或者堡垒机)。

操作如下

vim /root/shell.sh
ifconfig | awk NR==2'{print $2}'

保存退出
chmod a+x /root/shell.sh
ansible httpd,mysql -m copy -a "src=/root/shell.sh dest=/root/ mode=777"     //将本地shell.sh文件远程传送到两台节点上的/root路径下

查看结果

ansible httpd,mysql -m shell -a "ls -l /root/"

然后在运行传过去的shell脚本;结果OK

ansible httpd,mysql -m shell -a "sh /root/shell.sh"

Copy 模块

复制本地文件至远程主机,并且能够改属性等。

注意:src和content选项不能同时使用,这两种方法是互斥的!

常用参数有:

  • src:需要copy的文件的源路径
  • dest:需要copy的文件的目标路径
  • backup:对copy的文件进行备份
  • content:直接在远程主机被管理文件中添加内容,会覆盖原文件内容
  • mode:对copy到远端的文件设置权限
  • owner:对copy到远端的文件设置属主
  • group:对copy到远端文件设置属组

1、只将数据内容直接复制到文件中

ansible httpd -m copy -a "content='very good' dest=/root/good.txt"

Cat查看一下是否写入成功

ansible httpd -m shell -a "cat /root/good.txt"

建议:最好在数据结尾处加上\n换行符,不然就会出现下面这种情况!

2、将server文件复制到节点主机上并修改文件名及权限属主数组

echo 'lemon is a very good!' > /root/nice.txt    // 创建一个文件
ansible httpd -m shell -a 'useradd tom'      //为节点1创建用户
ansible httpd -m copy -a "src=/root/nice.txt dest=/root/very.txt mode=744 owner=tom group=tom"

src: server的文件路径
dest: 节点主机的接收路径
mode: 复制过去的文件权限

验证

ansible httpd -m shell -a "ls -lh very.txt && cat /root/very.txt"

备份:更新文件数据并备份之前未被修改过的数据

echo 'lemon is a nice man!!!!' >> nice.txt   //更改文件数据
ansible httpd -m copy -a 'src=/root/nice.txt dest=/root/very.txt backup=yes'

ansible httpd -m shell -a 'ls /root'    //验证
ansible httpd -m shell -a 'cat /root/very.txt'
ansible httpd -m shell -a 'cat /root/very.txt.21171.2020-01-02@14:34:45'

Unarchive模块

直接将serve

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇shell #!/bin/bash: No such file.. 下一篇深度解析 slab 内存池回收内存以..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目