介绍
Ansible 是一款能够实现批量系统配置、程序部署、运行命令等功能的自动化运维工具,可以很方便的操作多台服务器。
安装
- 环境
Ubuntu 16.04.1 LTS
ansible 2.9.27
- 更新源
1 | $ apt update |
- 安装通用的管理软件库的工具
1 | $ apt install software-properties-common |
- 添加 ansible 的源
1 | $ apt-add-repository --yes --update ppa:ansible/ansible |
- 再次更新源并安装 ansible
1 | $ apt update && apt install -y ansible |
- 查看版本
1 | $ ansible --version |
目前为止,ansible已经安装成功。
配置Inventory
Inventory 默认保存在 /etc/ansible/hosts 配置文件中
- 修改 /etc/ansible/hosts 文件
1 | [local] |
参数 | 说明 |
---|---|
ansible_connection | 连接到主机的类型,任何可能的连接插件名称,例如,SSH 协议类型中有:ssh、smart 或 paramiko |
ansible_host | 要连接的主机名称 |
ansible_port | ssh 端口号 |
ansible_user | 默认 ssh 用户名 |
ansible_ssh_pass | ssh 密码 |
ansible_ssh_private_key_file | 由 ssh 使用的私钥文件 |
临时命令AD-HOC
AD-HOC 返回类型 | 说明 |
---|---|
success | 执行成功 |
changed | 修改成功 |
failed | 执行失败 |
- 修改 /etc/ansible/ansible.cfg 文件
1 | host_key_checking = False |
去除这一行前面的注释
#
,禁用 ssh 连接时检查验证 HOST KEY。
- ansible 命令格式
1 | $ ansible 主机名或组名 -m 模块名 -a "模块参数" 其他参数 |
- 对 local 分组执行命令
1 | $ ansible local -m ping |
- 对 remote 分组执行命令
1 | $ ansible remote -m ping |
- 对所有机器执行命令
1 | $ ansible all -m ping |
- 查看 setup 模块中 local 分组机器的信息
1 | $ ansible local -m setup |
- remote 组的机器输出 Hello World
1 | $ ansible remote -a "/bin/echo Hello World" |
- remote 组中的主机在指定目录下创建文件,并设置权限
1 | $ ansible remote -m file -a "dest=/home/ubuntu/file state=touch mode=777" |
- 使用 shell 模块查看所有机器的剩余空间
1 | $ ansible all -m shell -a "free -m" |
Playbook语法结构
Playbook 正如它的名字一样,它是一个整的“剧本”,通过系统配置复杂的多机器部署,配置文件默认使用 YAML 格式,更多参考 Playbooks 官方中文文档。
1 | --- |
编写完 YAML 格式配置文件后,使用 ansible-playbook 命令执行即可
ansible-playbook *.yaml
。
Ansible模块
“剧本”中会有一幕幕的“演奏”,playbooks 中由多个 plays 组成,plays 也称为 tasks,这些任务就是对 ansible 模块的调用,下面列举几个 ansible 常用模块的示例。
- service 模块示例
1 | # 启动php7.0-fpm服务 |
- shell 模块示例
1 | # 下载并安装redis服务 |
Playbook执行控制
- 判断
1 | # 当变量switch为true时执行shell |
- 标准循环
1 | # 添加多个用户 |
- 嵌套循环
1 | # 设置用户访问多个数据库 |
Ansible调试
ansible常用参数 | 说明 |
---|---|
-v | 输出详细信息 |
-vv | 输出更详细的信息 |
-vvv | 输出十分详细的信息 |
- debug 模块
1 | --- |
- plugins 插件
借助 plugins 可以更方便的显示 debug 信息,可以在配置文件 /etc/ansible/ansible.cfg 中查看有哪些插件。
1 | # set plugin path directories here, separate with colons |
这些插件在 GitHub 中是公开的,可以直接克隆下来,下面举例下载 action_plugins 插件。
- 下载 action_plugins 插件
1 | $ git clone https://github.com/n0ts/ansible-human_log.git |
- 查看 ansible-human_log 目录
1 | $ ls ansible-human_log |
- 将 human_log.py 复制到 callback_plugins 预定义的插件位置
1 | $ mkdir -p /usr/share/ansible/plugins/callback |
插件安装完成后,再次执行之前的 yaml,就可以看到返回的 msg 信息啦。