ansible基础模块使用总结
大纲
- 基础知识
- 配置说明
- 准备工作
- 基本使用
- 模块总结
基础知识
中文资源网 http://www.ansible.com.cn
配置说明
ansible的配置文件是 ** /etc/ansible/ansible.cfg ** 配置文件修改后无需重启,每次ansible调用都会读取最新的配置
关闭紫色的警告信息
deprecation_warnings = False
host_key_checking
准备工作
以下是一个服务器集群环境
不用输入密码
不输入密码有两种处理方式
- 1 直接配置密码(简单)
- 2 服务器之间免密码登陆
1 在/etc/ansible/hosts 配置密码
可以将远程主机的密码账号,配置到hosts中这样就可以不用在输入命令的时候带上-k 参数
第一步修改 /etc/ansible/ansible.cfg
host_key_checking = False
第二步修改 /etc/ansible/hosts
将账号,密码,ssh端口配置在hosts中 如下:
[yyk]
47.110.43.170 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_pass='xxx
[saas]
172.24.128.59 ansible_ssh_user='root' ansible_ssh_pass='xxx'
2 主机之间使用免密码登陆
使用ansible之前需要能让192.168.0.207免密登陆所有被控制的机器,免密登陆详情见《免密登陆.md》
步骤如下图
使用ansible之前需要添加被控制机器ip到 /etc/ansible/host文件 (Inventory)
在host文件中可以定义组,定义变量
[web] #[组名称]
192.168.0.201
ansible all --list 可以查看所有授控的主机
基本使用
基础命令:
- ansible
- ansible-galaxy : 下载role
- ansible-pull
- ansible-doc
- ansible-playbook
- ansible-vault : 配置文件加密
- ansible-console
模块总结
模块的使用格式为 ansible 【all(表示所有机器) |机器ip | 机器组名称】 -m 【模块名称】 -a 【‘命令’】(注意使用单引号)-k (-k 表示输入密码一般都是免密登陆不需要-k参数)
查看所有支持的模块
ansible-doc -l
ansible-doc -l | grep xxx 过滤
debug 模块
debug模块可以看到命中执行的效果和一些参数
debug一般直接在playbook中使用使用方式如下
第一种
name: Get debug info
debug: var=result verbosity=0
name: Get debug info
debug:
msg: "{{变量}}"
command 模块 (默认模块)
command 是ansible的默认模块 所以可以不使用 -m 指定模块名 主要功能是执行shell命令
ansible g2 -a 'ls /medcrab' 【并未使用-m command 直接-a 带参数实现远程执行命令】
command 模块 不支持脚本中使用 $HOME, |管道 <> 重定向符号 所以不是很方便建议直接使用shell模块
shell 模块 (重要模块)
shell 模块功能与command类似 可以用来执行shell命令 但是比command更强大 支持 $HOME, |管道 <> 重定向符号 所以可以考虑直接使用 shell命令代替command
查看控制机的环境变量
ansible all -m shell -a 'chdir=/data/tmp echo $JAVA_HOME '
特别注意 ansible 执行shell是利用ssh。有所谓的non-login shell和login shell问题 需要注意环境变量的配置,详细见《环境变量问题总结.md》
远程运行一个java程序(注意环境变量)否则无法启动
注意 真正部署一个java程序 需要使用playbook 来处理
ansible all -m shell -a 'chdir=/data/tmp nohup java -jar my-release-control.jar 1>/data/tmp/log.out 2>&1 & '
特别注意 详细见《环境变量问题总结.md》
shell模块中使用awk $问题
ansible g2 -m shell -a "netstat -tunlp | grep 31888 | awk '{print \$7}'" #注意$符号前面需要使用\ 并且要用单引号
script 模块 (重要模块)
在远程主机上执行ansible主机上的脚本,且不需要将脚本复制到被执行的远程主机上
简单将就是只要在ansible主机上编写一个脚本,使用script模块就可以让这个脚本在任意控制机上执行,不用再去把脚本挨个手动复制到控制机
例如有 pp.sh 脚本 内容如下
echo "111" >> show2.txt
echo $1-$2-$3'-insert' >> show2.txt
利用script 模块 可以在所有被控制的机器上执行此脚本
ansible g1 -m script -a 'chdir=/medcrab/ttcopy /medcrab/tt/pp.sh jim jeff tom' 【在g2组上执行pp.sh 还可以指定参数 jim jeff tom都是对应pp.sh脚本中的参数】
主要参数 :
- 脚本路径,必须参数 [注意 此参数直接指定脚本,没有例如chdir=那样的前缀]
- chdir:在执行脚本之前,先进入到指定目录
- creates:当远程主机上的该文件存在时,不执行脚本;反之执行
- removes:当远程主机上的该文件不存在时,不执行脚本;反之执行
copy 模块 (重要模块)
copy可以实现对被控制机的数据复制,适合于发布部署软件的场景
ansible all -m copy -a 'src=/medcrab/copy1.txt dest=/medcrab/cp.txt' 把控制机/medcrab/copy1.txt 复制到所有控制机上
ansible all -m copy -a 'src=/medcrab/copy1.txt dest=/medcrab/cp.txt'
主要参数 :
- src参数 :用于指定需要copy的文件或目录。
- dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
- content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
- force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
- backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
- owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
- group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
- mode参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
hostname 模块
hostname模块用于修改主机名(注意: 它不能修改/etc/hosts文件)
将其中一远程机器主机名修改为salve
ansible 10.1.1.12 -m hostname -a 'name=salve'
基本格式: ansible 被管理机名称或组名 -m 模块名 -a "参数1=值1 参数2=值2"
file 模块
file模块用于对文件相关的操作(创建, 删除, 软硬链接,设置权限等)
创建一个目录
master# ansible group1 -m file -a 'path=/test state=directory'
创建一个文件
master# ansible group1 -m file -a 'path=/test/111 state=touch'
递归修改owner,group,mode
master# ansible group1 -m file -a 'path=/test recurse=yes owner=bin group=daemon mode=1777'
删除目录(连同目录里的所有文件)
master# ansible group1 -m file -a 'path=/test state=absent'
创建文件并指定owner,group,mode等
master# ansible group1 -m file -a 'path=/tmp/111 state=touch owner=bin group=daemon mode=1777'
删除文件
master# ansible group1 -m file -a 'path=/tmp/111 state=absent'
创建软链接文件
master# ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab state=link'
创建硬链接文件
master# ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab2 state=hard'
Fetch 模块
抓去远程控制机上的文件
ping 模块
ping 模块可以快速的测试被控制机的联通性**(其原理并不是使用原生的ping 而是基于python写的功能)**
使用 ** ansible-doc ping** 可以查看ping模块的功能描述
ansible all -m ping 【ping 所有机器】
ansible g2 -m ping 【ping 所有g2组】
user 模块
user模块用于管理用户账号和用户属性
创建aaa用户,默认为普通用户,创建家目录
master# ansible group1 -m user -a 'name=aaa state=present'
创建bbb系统用户,并且登录shell环境为/sbin/nologin
master# ansible group1 -m user -a 'name=bbb state=present system=yes shell="/sbin/nologin"'
删除aaa用户,但家目录默认没有删除
master# ansible group1 -m user -a 'name=aaa state=absent'
删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录
master# ansible group1 -m user -a 'name=bbb state=absent remove=yes'