一.简介
ansible是什么东西?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。
所有的这几个目标本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。就像我之前有介绍过的Fabric,以及我们基于Fabric开发的自动化应用部署的工具: Essay 。都是做了这么个事——批量的在远程服务器上执行命令 。
那么fabric和ansible有什么差别呢?简单来说fabric像是一个工具箱,提供了很多好用的工具,用来在Remote执行命令,而Ansible则是提供了一套简单的流程,你要按照它的流程来做,就能轻松完成任务。这就像是库和框架的关系一样。
当然,它们之间也是有共同点的——都是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
二.安装及初步使用
- 编译安装,此处使用yum
1 | yum install epel # 下载epel源 |
2.查看ansible生成的文件
1 | rpm -ql ansible |
3.查看ansible生成的命令
1 | ansible # 用来执行ansible的一些命令 |
4.ansible命令模式
1 | ansible <host-pattern> [options] |
5.ansible第一条命令
1 | ansible all -m ping # 跟系统自带的ping不一样 |
6.host-pattern格式
1 | [web] |
7.ansible-doc
1 | Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] |
8.补充
1 | [name] #分组 |
三.命令相关
命令相关
1.command
1 | ansible web -m aommand "pwd" |
2.shell
1 | ansible web -m shell -a "echo 'test1'|password --stdin test1" # 修改密码 |
3.sctipt
1 | ansible all -m script -a "/root/a.sh" # 执行管控机的shell脚本 |
文件相关
1.copy复制管控机文件到被管控机
1 | ansible web -m copy -a "src=/etc/xxx dest=/data/xxx" # src指定源文件 dest指定目标文件 |
2.file
1 | ansible db -m file -a "path=/data10 state=directory" # path指定地址,state=directory表示创建文件夹 |
3.fetch
1 | ansible db -m fetch -a "src=/etc/xxx dest/tmp" # src源地址(在被控机器上),dest目标地址(管控机上的地址)每个管控机的文件都生成了一个目录,会保持文件的原来目录结构 |
软件相关
1.yum
1 | ansible web -m yum -a "name=nginx state=installed" # 安装nginx |
2.pip
1 | ansible web -m pip -a "name=Django==1.11.15" |
定时任务
- cron
1 | ansible web -m cron -a "name=testjob minute=4 job='echo 哈哈 > /tmp/xx.txt'" # 创建 name:指定的cron名字 minute:指定分钟 hour:指定小时 day:指定天 month:指定月 weekday:指定周 job:指定要执行的命令 |
用户相关
- user
1 | ansible web -m user -a "name=客户1 home=/data/客户1" # 创建用户并指定家目录 |
收集系统信息
- setup 收集系统信息
1 | "ansible_all_ipv4_addresses" #ipv4简单信息 |
启动应用
- service
1 | enabled:#开机启动 |
四.playbook的基本使用
playbook命令,建议:一个文件做一件事
1.基本格式
1 | ansible-playbook [options] playbook.yml |
2.单个playbook
1 | 单个playbook |
3.多个playbook
1 | #多个playbook |
4.指定tags
1 | #指定tags |
变量
1.第一种
1 | # 传递变量 -e"key=value" |
2.第二种
1 | - hosts: web |
3.第三种
1 | 在hosts文件里面写,值可以不同 |
4.第四种
1 | [web:vars] |
5.变量的应用顺序
1 | -e > yml文件 > hosts文件 #命令行里面是最高的,hosts文件是最低的 |
条件
- when 条件判断
1 | - hosts: cache |
循环with_items
1.循环单个
1 | - hosts: cache |
2.循环嵌套
1 | - hosts: cache |
模板文件
1.模板的基本使用
1 | - hosts: cache |
roles(高级使用)
- 作用
- 结构清晰
- 可以重用
- 结构
1 | tasks #目录是必须的,存放任务 |
补充
生成公私钥
1 | ssh-keygen |
复制公钥到远程主机
1 | ssh-copy-id 192.168.19.99 |
ping命令发送的是ICMP协议
查看用户相关
1 | tail -l /etc/shadow 查看最后一个用户 |
创建链接
1 | ln 创建硬链接 链接文件变更 源文件不变 |
pip的基本使用
1 | pip freeze > file # 给当前的python模块做快照 |
- crontab定时任务
1 | * */5 * * * job #/n 表示每隔n |
启动应用
1 | systemctl restart nginx # centos7中的操作应用 |
查看系统内存使用量
1 | free -m 查看系统的内存使用量 |
Ad-hoc:命令行的意思
mv 的使用
1 | mv redis.conf{,.j2} == mv redis.conf redis.conf.j2 |
yum和rpm的基本使用
1 | yum remove 卸载 |
CI和CD的基本使用
1 | CI 持续交付 jenkins maven war包 |
暂时关闭防火墙
1 | setenforce 0 #暂时关闭selinux |
uwsgi的配置
1 | [uwsgi] |
启动uwsgi
1 | uwsgi --http :8000 --module mysite.wsgi ## --http 启动的端口 --module 项目.wsgi文件 |