Ansible
文章目录
- Ansible
- Ansible介绍
- Ansible主要组成部分
- 安装
- 相关文件
- 命令用法
- ansible命令执行过程
- 常用命令v
中文权威指南https://ansible-tran.readthedocs.io/en/latest/docs/modules.html
Ansible介绍
ansible特性
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
Ansible主要组成部分
ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置
文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插
件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解
为是ansible命令工具,其为核心执行工具
注意事项
执行ansible的主机一般称为主控端,中控,master或堡垒机
主控端Python版本需要2.6或以上
被控端Python版本小于2.4需要安装python-simplejson
被控端如开启SELinux需要安装libselinux-python
windows不能做为主控端
安装
1.rpm包安装: EPEL源
yum install ansible
2.编译安装:
yum -y install python-jinja2 PyYAML python-paramiko python-babel
python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
3.Git方式:
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
4.pip安装: pip是安装Python包的管理器,类似yum
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
pip install --upgrade pip
pip install ansible --upgrade
5.确认安装:
ansible --version 查看版本信息
相关文件
配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
#log_path=/var/log/ansible.log #日志文件
#module_name = command #默认模块
/etc/ansible/hosts 主机清单,格式如下,相当于添加管理的ip
[root@Centos7 data]#ansible all --list-hosts; 查看所有用户
[root@Centos7 data]#ansible web --list-hosts; 查看所在组用户
vim /etc/ansible/ansible.cfg
[apps]
192.168.41.102
[web]
192.168.41.102
192.168.41.103
[web1]
192.168.41.10[2:3] #等同于web
/etc/ansible/roles/ 存放角色的目录程序
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具
命令用法
ansible [-m module_name] [-a args]
–version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
–list-hosts 显示主机列表,可简写 --list
-k, --ask-pass 提示输入ssh连接密码,默认Key验证
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-b, --become 代替旧版的sudo 切换
–become-user=USERNAME 指定sudo的runas用户,默认为root
-K, --ask-become-pass 提示输入sudo时的口令
支持方式
支持通配符
ansible “*” -m ping
或关系
ansible “websrvs:appsrvs” -m ping
逻辑与
ansible “websrvs:&dbsrvs” –m ping
在websrvs组并且在dbsrvs组中的主机
逻辑非
ansible ‘websrvs:!dbsrvs’ –m ping
正则表达式
ansible “websrvs:&dbsrvs” –m ping
ansible命令执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服
务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件 - 给文件+x执行
- 执行并返回结果
- 删除临时py文件,退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
常用命令v
标准语法 ansible 用户/分组 -m 模块 -a 执行命令
基于key验证 ping 可以把密钥发给其余用户,这样以后就不用输入验证信息了。
182 ssh-keygen
183 ssh-copy-id 192.168.41.102
184 ssh-copy-id 192.168.41.103
185 ssh-copy-id 192.168.41.104
186 ansible all -m ping
ansible all -m ping -u root -k
ansible-doc -s command 查看命令帮助
command
[root@Centos7 ~]#ansible srvs -m command -a 'service httpd start'
shell
比command应用更广泛
[root@Centos7 ~]#ansible all -m shell -a 'echo 1234|passwd --stdin wang'
script
执行ansible的脚本
[root@Centos7 ~]#ansible all -m script -a '/data/a.sh'
copy
从absible复制到被控制的机器
[root@Centos7 ~]#ansible all -m copy -a "src=/root/num.txt dest=/data/num.txt owner=wang mode=600 backup=yes"
fetch
从被控制主机复制文件到ansible主机上面,不支持目录
[root@Centos7 ~]#ansible all -m fetch -a 'src=/data/num.txt dest=/data/'
file
ansible-doc -s file 单独查看此帮助
修改文件属性/创建文件
[root@Centos7 ~]#ansible all -m file -a 'path=/data/num.txt mode=777'
创建文件
ansible all -m file -a "path=/data/testdir state=directory"
删除文件
[root@Centos7 data]#ansible all -m file -a 'path=/data/num.txt state=absent'
unarchive
解包解压缩
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如
果设置为copy=no,会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程
主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
tar -Jcf -f num.tar.xz /data/num.txt
从ansible本地传到其余主机并解压
[root@Centos7 data]#ansible all -m unarchive -a 'src=/data/num.tar.xz dest=/data/'
把远程桌面上的文件解压缩。不会传到ansible 服务器
[root@Centos7 data]#ansible all -m unarchive -a 'src=/data/num.tar.gz dest=/data copy=no'
archive
打包压缩
[root@Centos7 data]#ansible all -m archive -a 'path=/data/num.txt dest=/data/num.txt.tar.gz format=gz owner=wang mode=777'
hostname
修改远程主机名
[root@Centos7 data]#ansible apps -m hostname -a "name=websrv"
cron
计划任务
执行计划
[root@Centos7 data]#ansible all -m cron -a "minute=*/1 job='/usr/bin/touch a.txt' name=touchfile"
撤销计划
[root@Centos7 data]#ansible all -m cron -a "state=absent name=touchfile"
yum
安装
[root@Centos7 data]#ansible all -m yum -a "name=tree state=present"
[root@Centos7 data]#ansible all -m yum -a "name=tree 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"
setup
ansible all -m setup |grep cpu
ansible all -m setup |grep free
查看内存总大小 ansible all -m setup -a ‘filter=“mem”’