linux学习

Ansible ad-hoc

命令行语法格式

对Ansible进行远程管理的两个方法

ad-hoc临时命令,就是在命令行上执行管理命令
playbook剧本,把管理任务用特定格式写到文件中
无论哪种方式,都是通过模块加参数进行管理。通常使用ad-hoc命令行管理方式,来实现一些日常临时性的批量管理的任务。需要实现设置相对复杂,需要大量的操作任务,使用playbook剧本管理方式。

# ad-hoc命令行基本格式:ansible 主机集合 -m 模块名  -a "参数" 

其中:

主机集合:指定管理主机的信息,可以是主机名、主机IP地址或者是all表示所有主机
模块名:指定功能模块名称
参数:应用模块功能中的哪些功能,标准参数定义
其他参数:-k 使用密码远程,远程主机SSH连接密码信息
代码示意如下:

[root@pubserver ~]# cd  ~/ansible            
[root@pubserver ansible]# ansible all --list-hosts         #查看所有主机列表
  hosts (3):
    server1
    server2
    server3
#调用ping模块         
[root@pubserver ansible]# ansible  all  -m  ping            #测试远程主机是否连通

通过ping模块测试到远程主机的连通性,检查是否可以管理远程主机。

ping结果为绿色的SUCCESS,则表示成功;是红色的UNREACHABLE,则检查网络是否可通,是否已经可以免密登陆。

常用模块

shell模块

在远程主机执行命令时,command模块为默认模块。

Shell模块功能同command功能类似,二者的区别在于:

command不支持bash的特性,如管道和重定向等功能,所有需要调用shell的功能都无法使用

# 查看进程数量
[root@localhost ansible]# ansible webservers -m shell -a "ps aux | wc -l"
server1 | CHANGED | rc=0 >>
144

server2 | CHANGED | rc=0 >>
144

scrpt模块

如遇到复杂的命令,script允许在Ansible主机中写好脚本在被管控主机端执行,编写的脚本可以不是shell脚本,如python、perl脚本等均可,脚本也可以没有执行权限。

# 编写脚本创建用户,并设置密码为:123456
[root@localhost ansible]# vim  test.sh  
#!/bin/bash
for user in user{1..5}
do
    useradd $user
    echo '123456' | passwd --stdin $user
done
[root@pubserver ansible]# ansible  webservers  -m script  -a  "test.sh"

file模块

Ansible使用file模块来创建文件、目录、链接,修改权限与设置文件的属性等操作。

幂等性,是指任意次执行所产生的影响均与一次执行的影响相同。file模块具有幂等性,Ansible中大多数的模块都具有幂等性。

file模块常用的选项:

path:指定文件路径
owner:设置文件所有者
group:设置文件所属组
state:状态。touch表示创建文件,directory表示创建目录,link表示创建软链接,absent表示删除
mode:设置权限
src:source的简写,指源
dest:destination的简写,指目标

[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/file.txt state=touch"   #新建文件
[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/mydir state=directory"   #创建目录

copy模块

Ansible使用copy模块将文件拷贝到远程管控主机上。

copy模块常用选项:

src:源,指控制端的文件路径
dest:目标,指被控制端的文件路径
content:内容,指需要写到文件中的内容

# 将家目录下面的test.sh文件复制给webserver组
[root@localhost ansible]# ansible webservers -m copy -a "src=./test.sh dest=/root"

fetch模块

fetch模块与copy类似,但是作用相反,是将远程管控主机的文件拷贝到Ansible主机,但不支持目录的拷贝。

fetch模块常用选项:

src:源,指被控制端的文件路径

dest:目标,指控制端的文件路径

# 将webserver组中的/etc/hostname文件都复制给本机
[root@localhost ansible]# ansible webservers -m fetch -a "src=/etc/hostname dest=~/"

lineinfile/replace模块

Ansible使用lineinfile模块替换单个文件中的一整行内容,如果进行多行关键字匹配的替换需要使用replace模块。

lineinfile模块常用选项:

path:待修改的文件路径

line:写入文件的一行内容

regexp:正则表达式,用于查找文件中的内容

replace模块常用选项:

path:待修改的文件路径

replace:将正则表达式查到的内容,替换成replace的内容

regexp:正则表达式,用于查找文件中的内容

# 在webserver的用户中的/root/test.txt 文件中追加 'hi sha bi'
[root@localhost ansible]# ansible webservers -m lineinfile -a "path=/root/test.txt line='hi sha bi'"

# 在webserver的用户中的/root/test.txt 文件中将'sha' 替换为 'si'
[root@localhost ansible]# ansible webservers -m replace -a "path=/root/test.txt regexp=sha replace=si"

user模块

Ansible使用user模块帮助管理远程管控主机的系统账户,如创建用户、修改用户、删除用户、为用户创建密钥对等操作。

user模块常用选项:

name:待创建的用户名

uid:用户ID

group:设置主组

groups:设置附加组

home:设置家目录

password:设置用户密码

state:设置状态。present表示创建,它是默认选项,absent表示删除

remove:删除家目录、邮箱等,值为yes或true都可以

# 创建用户zhansan
[root@localhost ansible]# ansible webservers -m user -a "name=zhansan"

# 创建用户lisi uid=2020 主组为:zhansan  附加组:sshd 家目录:/home/lisi 密码:123456
[root@localhost ansible]# ansible webservers -m user -a "name=lisi uid=2020 group=zhansan groups=sshd home=/home/lisi password={{'123456'|password_hash('sha512')}} state=present" 

group模块

Ansible使用group模块帮助管理远程管控主机的系统组账户,如创建、删除组等操作。

group模块常用选项:

name:待创建的组名

gid:组的ID号

state:present表示创建,它是默认选项。absent表示删除

# 创建组devops 
[root@localhost ansible]# ansible webservers -m group -a "name=devops"

# 删除组devops
[root@localhost ansible]# ansible webservers -m group -a "name=devops state=absent"

留言

您的邮箱地址不会被公开。 必填项已用 * 标注