Ansible的Ad-hoc与命令模块
ad-hoc:
所谓的ad-hoc(临时命令),就是使用ansible模块来完成自动化任务,每一次只能使用一个模块,来完成一个任务,因此将ad-hoc称为ansible的临时命令
ad-hoc的语法:
格式: ansible 选择的主机 -m 模块名 -a '模块的参数' ansible的参数
示例: ansible all -m shell -a 'useradd devops' -u root -k
- all:所有主机
- shell:模块
- useradd:devops 模块的参数
- -u root -k:ansible的参数
- -u:指定远程用户
- -k:连接时验证ssh密码
ansible的模块:
ansible的模块 是ansible功能的重要实现,所有的自动化任务都高度依赖于模块
模块的查询:
ansible-doc -l 列出当前主机上所有ansible支持的模块
模块参数的查询:
ansible-doc -s 模块名 示例 ansible-doc -s user
模块用法例子查询:
ansible-doc 模块名 进去后搜索’/EXAMPLE’ 搜索模块帮助中的例子
命令模块
所谓的命令模块,也就是Ansible在Linux主机上可以执行Linux指令的模块
在ansible中有四个模块通常用来在Linux主机上执行命令
-
command:相当于在被控端本机上执行Linux的指令,但是有四个符号例外"|、>、<、&",当出现以上四种符号时command将无法处理该指令
-
shell: 相当于在被控端本机上执行Linux的指令,和command模块的区别在于支持所有的特殊符号,也支持一些高阶特性(参数),如 creates、removes、chdir
-
raw:在主机上执行命令,不支持Linux指令的高阶参数
不支持的高阶参数:-
chdir: 在执行命令前切换到指定的目录(默认执行命令在ansible远程用户的家目录下执行)
ansible node1 -m shell -a 'chdir=/opt touch rhca11111.txt'文件创建在/opt目录下
ansible node1 -m raw -a 'chdir=/opt touch 2222.txt'文件创建在devops用户家目录下不支持chdir参数 -
creates:文件存在命令不执行,反之文件不存在则命令执行
-
removes:文件不存在命令不执行,文件存在则命令执行 (ansible2.8之前是不支持)
ansible node1 -m shell -a 'removes=/opt/rhca1111111111111.txt rm -rf /opt/*'文件不存在命令不执行
ansible node1 -m shell -a 'creates=/opt/rhca.txt rm -rf /opt/*'文件存在命令不执行
-
-
script:将主控端shell复制到被控端执行,接的是一个脚本文件,该文件不需要任何执行权限。此模块是命令执行模块中唯一一个不需要依赖python环境的模块。比如在被控节点需要安装python的环境使用raw模块安装
ansible的 script模块是将文件中的内容通过shell的方式复制到被控端执行,因此和文件的权限没有关系
示例:
[root@master opt]# cat test.sh #!/bin/bash id -un ifconfig pwd [root@master opt]# ansible node1 -m script -a 'test.sh'
注意: 在ansible中可以直接执行Linux的命令,模块可以省略
当Ansible省略模块时,默认使用配置文件ansible.cfg中defaults段落的module_name = command参数所配置的模块,默认配置为command模块,因此省略模块默认使用command模块
644

被折叠的 条评论
为什么被折叠?



