说下ansible吧(基础篇 + Ad-hoc实战)

olei 500 views 0

前言

  1. 之前一直用的都是saltstack,C/S架构的,需要master端以及minion端,一台或者多台master端,批量控制minion端
  2. ansible呢,没那么复杂,基于ssh协议来的批量部署工具,不需要master与minion端,python编写的
  3. 基于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公钥方式登录)

  1. 添加公钥文件,见上面无密码连接远程服务器设置
  2. 添加一个--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~

打赏
发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ