前言
- 之前一直用的都是saltstack,C/S架构的,需要master端以及minion端,一台或者多台master端,批量控制minion端
- ansible呢,没那么复杂,基于ssh协议来的批量部署工具,不需要master与minion端,python编写的
- 基于ubuntu 16.04来说明的
安装
- 方法一:源安装
apt-add-repository ppa:ansible/ansible apt-get update apt-get install ansible
- 方法二:pip安装
pip install ansible
- 方法三:源码安装(不作说明,自行百度,建议源或者pip)
基础介绍
准备
- 书写
hosts
文件
vim /etc/ansible/hosts ---------------- [test] xxx.xx.xx
- 无密码连接远程服务器设置
ssh-copy-id -i ~/.ssh/id_rsa.pub xxx@xxx.xx.xx
- 测试是否联通
ansible test -m ping -------------------- test | SUCCESS => { "changed": false, "ping": "pong" }
介绍
Anable Ad-hoc
::是个临时命令集
展示远程主机的
/www
下的所有文件以及文件夹
ansible test -m shell -a "ls /www" --user=root
目标主机需要密码如何处理?(ansible默认通过ssh公钥方式登录)
- 添加公钥文件,见上面无密码连接远程服务器设置
- 添加一个
--ask-pass
参数
ansible text -m shell -a "ls /www" --user=root --ask-pass
参数
- 普通可选参数
-a --args 后面的整个内容当做一个参数来传给模块 -f --forks 并发控制机器 -m --module-name 指定模块,一般是ansbile自带的,比如ping,shell -M --module-path 指定模块存放的路径,一般是自定义的一些模块 -i --inventory 改变默认的行为
- 连接目标主机参数
-K --ask-pass 密码方式连接远程主机 --private-key 连接需要指定私钥的时候 -u --user 连接需要指定用户的时候 -c --connection 控制连接的类型 -T --timeout 控制连接的超时时间
- 权限控制参数
-s --sudo 需要执行sudo命令的时候 -S --su 需要执行su切换用户命令的时候 -b --become 普通用户要切换到root用户,并且切换过程不需要密码的时候
Ansible Inventory
定义主机关系的文件
默认路径为/etc/ansible/hosts
(没有的话,创建一下)
文件内容格式是ini
格式的
Inventory
主机组 -- >[组名]
xxx.xx.xx.xx [组名] xxx.xx.xx.xx xxx.xx.xx.xx
Inventory
主机别名
jumper ansible_ssh_port=22 ansible_ssh_host=xxx.xxx.xx.xx ansible_ssh_user=root
这样,这个主机的别名就是
jumper
Inventory
连接参数
ansible_ssh_host # 连接的远程主机名 ansible_ssh_port # ssh端口号 ansible_ssh_user # 默认的ssh用户名 ansible_ssh_pass # ssh 密码(不安全,建议使用--ask-pass 或者ssh秘钥) ansible_sudo_pass # 密码(不安全,建议使用--ask-sudo-pass)
Inventory
批量主机组
[webservers] www[01:50].example.com [databases] db-[a:f].example.com
实战
ubuntu
安装supervisor
- 安装
ansible test -m apt -a "name=supervisor state=present"
- 查看运行状态
ansible test -m shell -a "/etc/init.d/supervisor status"
- 启动
ansible test -m systemd -a "name=supervisor state=started"
- 关闭
ansible test -m systemd -a "name=supervisor state=stopped"
- 重启
ansible test -m systemd -a "name=supervisor state=restarted"
- 重载
ansible test -m systemd -a "name=supervisor state=reloaded"
后记
以上都是最基本的概念,命令,之后会说说ansible-playbook,peace yo~
本文作者为olei,转载请注明。