ansible相关工具
- /usr/bin/ansible 主程序,临时命令执行工具
- /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man
- /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
- /usr/bin/ansible-pull 远程执行命令的工具
- /usr/bin/ansible-vault 文件加密工具
- /usr/bin/ansible-console 基于Console界面与用户交互的执行工具
- /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
ansible要使用,需要提前写好host已经密钥认证完成,且需要使用ssh的yes认证需要为弄
取消ssh时的yes验证
1.全部取消yes验证:在/etc/ssh/ssh_config中找到StrictHostKeyChecking,设为no
若只想单个用户,如root,echo "StrictHostKeyChecking no" > ~/.ssh/config
2.在ansible的配置文件/etc/ansible/ansible.cfg中,配置host_key_checking = False(取消注释)
ansible-doc
此工具用于查看帮助文档
格式
ansible-doc [options] [module...]
-l, --list #列出可用模块
-s, --snippet #显示指定模块的playbook片段
#列出所有模块
ansible-doc -l
#查看指定模块帮助用法
ansible-doc ping
#查看指定模块帮助用法
ansible-doc -s ping
ansible
此工具通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能
格式
ansible <host-pattern> [-m <module-name>] [-a <module-args>] [-u <remote-user>] [-k] [-K] [--become] [--become-user <become-user>] [--ask-become-pass] [-i <inventory-file>] [--private-key <path-to-keyfile>] [--sudo] [--sudo-user <sudo-user>] [--ask-pass] [--ssh-common-args <ssh-common-args>] [--ssh-extra-args <ssh-extra-args>] [--scp-extra-args <scp-extra-args>] [-c <connection>] [--module-path <module-path>] [--forks <forks>] [--timeout <timeout>] [--limit <subset>] [--tags <tag>] [--skip-tags <tag>] [<ansible-playbook-arguments>]
选项说明:
<host-pattern>: 主机模式,可以是一个主机名、IP地址,也可以是一个定义在Inventory中的主机组;
--list-hosts #显示主机列表,可简写 --list
-m <module-name>: 使用的模块名称;
-a <module-args>: 模块的参数;
-u <remote-user>: 远程用户;
-C, --check #检查,并不执行
-k: 使用密码进行SSH连接(提示输入密码);
-K: 使用sudo时需要密码(提示输入密码);
--become: 切换到sudo/su用户;
--become-user <become-user>: 切换到指定的sudo/su用户;
--ask-become-pass: 使用sudo/su时需要密码(提示输入密码);
-i <inventory-file>: Inventory文件路径;
--private-key <path-to-keyfile>: 私钥文件路径;
--sudo: 通过sudo切换用户;
--sudo-user <sudo-user>: 切换到指定的sudo用户;
--ask-pass: 使用密码进行SSH连接(提示输入密码);
--ssh-common-args <ssh-common-args>: 指定SSH连接的参数;
--ssh-extra-args <ssh-extra-args>: 指定额外的SSH连接参数;
--scp-extra-args <scp-extra-args>: 指定额外的SCP参数;
-c <connection>: 指定连接方式(local、ssh等);
--module-path <module-path>: 指定模块路径;
--forks <forks>: 指定并行执行任务的数量;
--timeout <timeout>: 指定任务执行的超时时间;
--limit <subset>: 指定操作的子集(例如,指定一个或多个主机或主机组);
--tags <tag>: 指定要执行的任务标签;
--skip-tags <tag>: 指定要跳过的任务标签;
<ansible-playbook-arguments>: 其他ansible-playbook参数。
ansible的Host-pattern
用于匹配被控制的主机的列表
All :表示所有Inventory中的所有主机
*:通配符
或关系
逻辑与
#在websrv组并且在dbsrv组中的主机
逻辑非
#在dbsrv组,但不在websrv组中的主机
#注意:此处为单引号
正则表达式
ansible "~(web|db).*\.lgw\.com" –m ping
ansible执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如:command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户 $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
- 给文件+x执行
- 执行并返回结果
- 删除临时py文件,退出
ansible 的执行状态
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
cat ansible.cfg | grep -A 14 color
#以wang用户执行ping存活检测
ansible all -m ping -u wang -k
#以wang sudo至root执行ping存活检测
ansible all -m ping -u wang -k -b
#以wang sudo至lgw用户执行ping存活检测
ansible all -m ping -u wang -k -b --become-user=lgw
#以wang sudo至root用户执行ls
ansible all -m command -u wang -a 'ls /root' -b --become-user=root -k -K
ansible-vault
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml #加密
ansible-vault decrypt hello.yml #解密
ansible-vault view hello.yml #查看
ansible-vault edit hello.yml #编辑加密文件
ansible-vault rekey hello.yml #修改口令
ansible-vault create new.yml #创建新文件
ansible-console
此工具可交互执行命令
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$
常用子命令:
设置并发数: forks n 例如: forks 10
切换组: cd 主机组 例如: cd web
列出当前组主机列表: list
列出所有的内置命令: ?或help
ansible-galaxy
此工具会连接 https://galaxy.ansible.com 下载相应的roles
#列出所有已安装的galaxy
ansible-galaxy list
#安装galaxy
ansible-galaxy install geerlingguy.mysql
ansible-galaxy install geerlingguy.redis
#删除galaxy
ansible-galaxy remove geerlingguy.redis
Ansible常用模块
command模块
功能:在远程主机执行命令,此为默认模块,可忽略-m选项
注意:此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
- creates A filename or (since 2.0) glob pattern. If it already exists, this step won't be run. [Default: (null)] type: path
- removes
A filename or (since 2.0) glob pattern. If it already exists, this step *will* be run.
[Default: (null)]
type: path
shell模块
功能:和command相似,用shell执行命令
Script 模块
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
格式
ansible websrvs -m script -a /data/test.sh
copy模块
功能:从ansible服务器主控端复制文件到远程主机
#如目标存在,默认覆盖,此处指定先备份
ansible all -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=lgw mode=600 backup=yes"
#指定内容,直接生成目标文件
ansible all -m copy -a "content='test line1\ntest line2' dest=/tmp/test.txt"
#复制/etc目录自身,注意/etc/后面没有/
ansible all -m copy -a "src=/etc dest=/backup"
#复制/etc/下的文件,不包括/etc/目录自身,注意/etc/后面有/
ansible websrv -m copy -a "src=/etc/ dest=/backup
fetch模块
从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
ansible websrv -m fetch -a 'src=/root/test.sh dest=/data/scripts'
file模块
功能:设置文件属性
创建空文件
ansible all -m file -a 'path=/data/test.txt state=touch'
#删除文件
ansible all -m file -a 'path=/data/test.txt state=absent'
ansible all -m file -a "path=/root/test.sh owner=lgw mode=755"
#创建目录
ansible all -m file -a "path=/data/mysql state=directory owner=mysql
group=mysql"
#创建软链接
ansible all -m file -a 'src=/data/testfile dest=/data/testfile-link state=link'
unarchive 模块
功能:解包解压缩
实现有两种用法:
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
src:源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
ansible all -m unarchive -a 'src=/data/test.tgz dest=/var/lib/test owner=lgw group=bin'
ansible all -m unarchive -a 'src=/tmp/test.zip dest=/data copy=no mode=0777'
ansible all -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no
Archive 模块
功能:打包压缩保存在被管理节点
ansible websrvs -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=lgw mode=0600'
Hostname 模块
功能:管理主机名
ansible websrv -m hostname -a "name=websrv"
Cron 模块
功能:计划任务
支持时间:minute,hour,day,month,weekday
#创建任务
ansible 10.0.7.200 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null' name=Synctime"
#禁用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=yes"
#启用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=no"
#删除任务
ansible websrvs -m cron -a "name='backup mysql' state=absent"
ansible websrvs -m cron -a 'state=absent name=Synctime
Yum 模块
功能:管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本
ansible websrvs -m yum -a 'name=httpd state=present' #安装
ansible websrvs -m yum -a 'name=httpd state=absent' #删除
Service 模块
功能:管理服务
ansible all -m service -a 'name=httpd state=started enabled=yes'
ansible all -m service -a 'name=httpd state=stopped'
ansible all -m service -a 'name=httpd state=reloaded'
ansible all -m service -a 'name=httpd state='
User 模块
功能:管理用户
#创建用户
ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible all -m user -a 'name=nginx comment=nginx uid=88 group=nginx groups="root,daemon" shell=/sbin/nologin system=yes create_home=no home=/data/nginx non_unique=yes'
#remove=yes表示删除用户及家目录等数据,默认remove=no
ansible all -m user -a 'name=nginx state=absent remove=yes'
Group 模块
功能:管理组
#创建组
ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
#删除组
ansible websrvs -m group -a 'name=nginx state=absent
Lineinfile 模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换
Replace 模块
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"
ansible all -m replace -a "path=/etc/fstab regexp='^#(.*)' replace='\1'"
Setup 模块
功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息
ansible all -m setup
ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter="ansible_default_ipv4"'