inventory | 主机清单(主机组),定义ansible可以远程操作的服务器 |
模块 | 13个模块(常用的),通过模块可以实现远程的配置和操作 |
plugins | 插件 |
playbook | 剧本(shell脚本),yaml格式 |
管理端 | 20.0.0.10、ansible |
被管理端 | 20.0.0.20 |
20.0.0.30 | |
备用被管理端 | 20.0.0.70 |
ansible.cfg | ansible的主配置文件,一般无需修改 |
hosts | 主机组,声明可以被控制的主机 |
roles | 公共角色目录 |
2、修改配置文件
第一次传不过去,重新执行发送密钥对
(六)ansible的模块操作
ansible的模块操作 | |||||||
模块一:command模块,在远程主机执行Linux命令,不支持管道符和重定向输出 | |||||||
ansible的命令格式 | ansible 组名/ip -m 模块名称 -a ‘参数列表(执行的命令)’ | ||||||
ansible 20.0.0.20?-m command -a 'date' | 指定IP地址,只有目标主机会执行 | ||||||
ansible?webservers?-m command -a 'date' | 指定组,组内所有声明的主机都会执行 | ||||||
ansible?all?-m command -a 'date' | 所有声明的主机都会执行 | ||||||
ansible 20.0.0.20 -a 'date' | 不加-m也就是不声明使用的模块,默认就是command模块 | ||||||
command模块的常用参数 | |||||||
chdir | 在远程主机上运行命令,提前进入目录 | ||||||
creates | 判断指定文件是否存在,如果存在,不执行后面的操作 | ||||||
removes | 判断指定的文件是否存在,如果存在,执行后续的命令 | ||||||
ansible all -m command -a 'chdir=/home ls' | |||||||
ansible all -m command -a 'creates=/opt/123 ls /opt' | |||||||
ansible 20.0.0.20 -m command -a 'remove=/opt/123 ls /opt' | |||||||
模块二:shell模块,在远程执行命令,相当于调用远程主机的shell进程,支持管道符和重定向 | |||||||
&& | 表示逻辑且,前一个命令成功,才会执行后一个命令 | ||||||
; | 表示逻辑或,前面的命令成功与否,后面的命令都会执行 | ||||||
多个命令执行 | ansible 20.0.0.20 -m shell -a ‘touch /opt/123 && echo 123 > /opt/123 && cat /opt/123’ | ||||||
给用户设置密码: ansible 20.0.0.30 -m shell -a ‘echo 123456 | passwd --stdin hyde’ | |||||||
过滤ifconfig命令中的第二行: ansible 20.0.0.20 -m shell -a "ifconfig | awk 'NR==2{print $2}'" | |||||||
过滤ifconfig命令中的ip地址: ansible 20.0.0.20 -m shell -a 'echo $(ifconfig ens33 | awk "NR==2{print $2}") | cut -d " " -f2' | |||||||
指定主机上创建一个脚本,在脚本中写入一个内容#!/bin/bash,换一行写ifconfig,然后运行这个脚本 ansible 20.0.0.30 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/hyde.sh && sh /opt/hyde.sh' | |||||||
在脚本中执行用位置变量,输入两个数,实现加法,运行结果,运行脚本 ansible 20.0.0.20 -m shell -a 'echo -e "#!/bin/bash\na=$((2+3))\necho \$a" > /opt/test.sh && sh /opt/test.sh' | |||||||
模块三:cron模块,远程主机设置定时任务 | |||||||
两种状态 | present | 表示添加(默认就是添加,可以省略) | |||||
absent | 表示移除,absent在整个ansible的语法中都表示移除的意思(删除) | ||||||
分 | minute | ||||||
时 | hour | ||||||
日 | day | ||||||
月 | month | ||||||
周 | weekday | ||||||
job | 任务执行的命令 | ||||||
name | 任务计划的名称,可以不加 多个计划任务如果不给名字,都是none,一旦删除none,全部删除(不推荐,最好指定不重复的名称) | ||||||
9月1号早上8点三十分,执行ls ?/opt,任务名:test2 ansible 20.0.0.20 -m cron -a 'minute="30" hour="8" day="1" month="9" job="ls /opt" name="test2"' | |||||||
每周三下午14:30分执行ls ?/opt ansible 20.0.0.20 -m cron -a 'minute="30" hour="14" weekday="3" job="ls /opt"' | |||||||
删除定时任务 | ansible 20.0.0.20 -m cron -a 'name=None state=absent' | ||||||
模块四:user模块,用户管理模块 | |||||||
格式 | ansible 20.0.0.30 -m user -a 'name=hyde system=yes' | ||||||
user模块的常用选项 | |||||||
name | 指定用户名,必须要有 | ||||||
state | present:表示添加(默认就是添加,可以省略) | ||||||
absent:创建用户时,可以不加absent,但是删除一定要加absent | |||||||
system=yes/no | 标记用户是否是一个程序用户 | ||||||
uid | 用户的唯一标识 | ||||||
group | 用户的所在组 | ||||||
create_home=yes/no | 替换用户的家目录,不需要替换家目录,可以不写 | ||||||
password | 创建用户密码 | ||||||
comment | 用户的注释信息(可有可无) | ||||||
remove=yes/no | 当删除用户时,加上remove=yes,删除用户的家目录(相当于userdel -r),如果不需要删除家目录,可以不写 | ||||||
注意事项 | 在创建用户时,虽然声明了是一个程序用户,但是默认的登录shell如果没有额外的生命,还是默认/bin/bash,uid会按照程序用户 | ||||||
使用ansible的user模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash,如果创建的是程序用户,一定要生命system=yes,声明shell的类型shell=/sbin/nologin,也可以指定uid的方式,给用户分配一个uid | |||||||
创建用户,指定uid号和密码,以及家目录: ansible 20.0.0.30 -m user -a 'name=hyde2 uid=1012 password=123 home=/opt/test1' | |||||||
修改家目录: ansible 20.0.0.30 -m user -a 'name=hyde2 home=/home/hyde2 create_home=yes' | |||||||
删除用户、家目录: ansible 20.0.0.30 -m user -a 'name=hyde2 remove=yes state=absent' | |||||||
模块五:group模块,用户组管理模块 | |||||||
gid | 设置组的id | ||||||
name | 必须要有 | ||||||
创建用户组:ansible 20.0.0.20 -m group -a ‘name=haide gid=306 system=yes’ 创建用户,添加到已有的组里 ansible 20.0.0.20 -m user -a ‘name=haide1 uid=1202 group=haide’ | |||||||
注意:ansible不适合交互式的命名 | |||||||
删除组 | ansible 20.0.0.20 -m group -a 'name=zzz gid=310 system=yes' 删除组:ansible 20.0.0.20 -m group -a 'name=zzz state=absent' | ||||||
模块六:ping模块,测试主机之间的连通性 | |||||||
格式 | ansible all -m ping | ||||||
ansible 20.0.0.20 -m ping |
ansible 20.0.0.20 -m command -a 'date' | 指定IP地址,只有目标主机会执行 | |
ansible?webservers -m command -a 'date' | 指定组,组内所有声明的主机都会执行 | |
ansible?all -m command -a 'date' | 所有声明的主机都会执行 | |
ansible 20.0.0.20 -a 'date' | 不加-m也就是不声明使用的模块,默认就是command模块 | |
常用参数 | ||
chdir | 在远程主机上运行命令,提前进入目录 | |
creates | 判断指定文件是否存在,如果存在,不执行后面的操作 | |
removes | 判断指定的文件是否存在,如果存在,执行后续的命令 | |
ansible all -m command -a 'chdir=/home ls' | ||
ansible all -m command -a 'creates=/opt/123 ls /opt' | ||
ansible 20.0.0.20 -m command -a 'remove=/opt/123 ls /opt' |
&& | 表示逻辑且,前一个命令成功,才会执行后一个命令 |
; | 表示逻辑或,前面的命令成功与否,后面的命令都会执行 |
分 | minute |
时 | hour |
日 | day |
月 | month |
周 | weekday |
job | 任务执行的命令 |
name | 任务计划的名称,可以不加 |
多个计划任务如果不给名字,都是none,一旦删除none,全部删除(不推荐,最好指定不重复的名称) |
常用的参数 | |
name | 指定用户名,必须要有 |
state | present: |
absent:创建用户时,可以不加absent,但是删除一定要加absent | |
system=yes/no | 标记用户是否是一个程序用户 |
uid | 用户的唯一标识 |
group | 用户的所在组 |
create_home=yes/no | 替换用户的家目录,不需要替换家目录,可以不写 |
password | 创建用户密码 |
comment | 用户的注释信息(可有可无) |
remove=yes/no | 当删除用户时,加上remove=yes,删除用户的家目录(相当于userdel -r),如果不需要删除家目录,可以不写 |
gid | 设置组的id |
name | 必须要有 |
(2)删除组(先删组用户,再删组)