目录
- ansible命令
- ansible命令执行过程
- 执行状态:
- ansible使用示例
- ansible常用模块
- ansible系列命令
ansible命令
ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
ansible <host-pattern> [-m module_name] [-a args]
选项 | 意义 |
| 显示版本 |
| 指定模块,默认为command |
| 详细过程 |
| 更详细 |
| 显示主机列表,可简写 --list |
| 提示输入ssh连接密码,默认Key验证 |
| 检查,并不执行 |
| 执行命令的超时时间,默认10s |
| 执行远程执行的用户 |
| 代替旧版的sudo 切换 |
| 指定sudo的runas用户,默认为root |
| 提示输入sudo时的口令 |
<Host-pattern>
匹配主机的列表
| 意义 | 例子 |
| 表示所有Inventory中的所有主机 |
|
| 通配符 |
|
| 或关系 |
|
| 逻辑与 |
在websrvs组并且在dbsrvs组中的主机 |
| 逻辑非 |
在websrvs组,但不在dbsrvs组中的主机 注意:此处为单引号 |
正则表达式 |
|
ansible命令执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户
$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY
文件 - 给文件
+x
执行 - 执行并返回结果
- 删除临时py文件,退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
ansible使用示例
- 以wang用户执行ping存活检测
ansible all -m ping -u wang -k
- 以wang sudo至root执行ping存活检测
ansible all -m ping -u wang -k -b
- 以wang sudo至mage用户执行ping存活检测
ansible all -m ping -u wang -k -b --become-user=mage
- 以wang sudo至root用户执行ls
ansible all -m command -u wang -a 'ls /root' -b --become-user=root -k -K
ansible常用模块
- Command:在远程主机执行命令,默认模块,可忽略-m选项
ansible srvs -m command -a 'service vsftpd start'
ansible srvs -m command -a 'echo magedu |passwd --stdin wang'
#此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
- Shell:和command相似,用shell执行命令
ansible srv -m shell -a 'echo magedu |passwd –stdin wang'
#调用bash执行命令
#类似 cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt 这些复杂命令,
#即使使用shell也可能会失败,
#解决办法:写到脚本,copy到远程,执行,再把需要的结果拉回执行命令的机器
- Script:在远程主机上运行ansible服务器上的脚本
ansible websrvs -m script -a /data/f1.sh
- Copy:从主控端复制文件到远程主机
ansible srv -m copy -a "src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes"
#如目标存在,默认覆盖,此处指定先备份
ansible srv -m copy -a "content='test content\n' dest=/tmp/f1.txt"
#指定内容,直接生成目标文件
- Fetch:从远程主机提取文件至主控端,copy相反,目前不支持目录
ansible srv -m fetch -a 'src=/root/a.sh dest=/data/scripts'
- File:设置文件属性
ansible srv -m file -a "path=/root/a.sh owner=wang mode=755"
ansible web -m file -a 'src=/app/testfile dest=/app/testfile-link state=link'
- unarchive:解包解压缩,有两种用法:
- 将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes
- 将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
- 常见参数:
copy
:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件src
:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=nodest
:远程主机上的目标路径mode
:设置解压缩后的文件权限
示例:
ansible srv -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'
ansible srv -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
ansible srv -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'
- Archive:打包压缩
ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
- Hostname:管理主机名
ansible node1 -m hostname -a "name=websrv"
- Cron:计划任务
支持时间:minute,hour,day,month,weekday
#创建任务
ansible srv -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime"
#删除任务
ansible srv -m cron -a 'state=absent name=Synctime'
- Yum:管理包
#安装
ansible srv -m yum -a 'name=httpd state=present'
#删除
ansible srv -m yum -a 'name=httpd state=absent'
- Service:管理服务
ansible srv -m service -a 'name=httpd state=stopped'
#开机启动
ansible srv -m service -a 'name=httpd state=started enabled=yes'
ansible srv -m service -a 'name=httpd state=reloaded'
ansible srv -m service -a 'name=httpd state=restarted'
- User:管理用户
ansible srv -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 '
ansible srv -m user -a 'name=user1 state=absent remove=yes'
#删除用户及家目录等数据
- Group:管理组
#添加组
ansible srv -m group -a "name=testgroup system=yes"
#删除组
ansible srv -m group -a "name=testgroup state=absent"
ansible系列命令
1. ansible-galaxy
(1)连接 https://galaxy.ansible.com 下载相应的roles
(2)列出所有已安装的galaxy
ansible-galaxy list
(3)安装galaxy
ansible-galaxy install geerlingguy.ntp
(4)删除galaxy
ansible-galaxy remove geerlingguy.ntp
2. ansible-pull
推送命令至远程,效率无限提升,对运维要求较高
3. ansible-playbook
执行playbook
示例:ansible-playbook hello.yml
cat hello.yml
#hello world yml file
- hosts: websrvs
remote_user: root
tasks:
- name: hello world
command: /usr/bin/wall hello world
4. ansible-vault
功能:管理加密解密yml文件
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 #创建新文件
5. Ansible-console
[101]$ ansible-console
root@test (2)[f:10] $
#执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$
- 设置并发数: forks n 例如:
forks 10
- 切换组: cd 主机组 例如:
cd web
- 列出当前组主机列表:
list
- 列出所有的内置命令:
?
或help
- 示例:
root@all (2)[f:5]$ list
root@all (2)[f:5]$ cd appsrvs
root@appsrvs (2)[f:5]$ list
root@appsrvs (2)[f:5]$ yum name=httpd state=present
root@appsrvs (2)[f:5]$ service name=httpd state=started