Ansible是一种IT自动化工具。它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新。Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言,可以完美地描述IT应用程序基础结构。
具备以下三个特点:
-
简单:减少学习成本
-
强大:协调应用程序生命周期
-
无代理:可预测,可靠和安全
https://docs.ansible.com/
安装Ansible:yum install ansible -y
-
Inventory:Ansible管理的主机信息,包括IP地址、SSH端口、账号、密码等
-
Modules:任务均有模块完成,也可以自定义模块,例如经常用的脚本。
-
Plugins:使用插件增加Ansible核心功能,自身提供了很多插件,也可以自定义插件。例如connection插件,用于连接目标主机。
-
Playbooks:“剧本”,模块化定义一系列任务,供外部统一调用。Ansible核心功能。
1.2 主机清单
db-[99:101]-node.example.com
1.3 命令行使用
ad-hoc命令可以输入内容,快速执行某个操作,但不希望留存记录。
ad-hoc命令是理解Ansible和在学习playbooks之前需要掌握的基础知识。
一般来说,Ansible的真正能力在于剧本。
1 连接远程主机认证
开启/etc/ansible/ansible.cfg配置文件中的host_key_checking = False参数,关闭远程主机ssh指纹认证,实现免交互。
https://docs.ansible.com/ansible/2.9/reference_appendices/config.html
https://docs.ansible.com/ansible/2.9/user_guide/connection_details.html
。
(2) 优先级
https://docs.ansible.com/ansible/2.9/reference_appendices/general_precedence.html
Ansible 提供了四种控制其行为的来源。按照从最低(最容易覆盖)到最高(覆盖所有其他)的优先级顺序,类别是:
配置设置
命令行选项
剧本关键词
变量
1) 变量优先级:
命令行变量( -e ) > playbook变量 > inventory主机变量 > inventory组变量
第二优先级:playbook 里的变量。 第三优先级:主机范围里的变量(例如:清单中的服务器或服务器组) 第四优先级:清单中的服务器优先级高于清单中的服务器组
2) 配置设置优先级:
检查当前使用的是哪个配置文件:ansible --version 命令中显示config file配置。
3) 连接远端主机在命令行使用 -u -k 的优先级
inventory > playbook > ad-hoc(命令行)
(3) 主机清单
https://docs.ansible.com/ansible/2.9/user_guide/intro_inventory.html#inventory
https://docs.ansible.com/ansible/2.9/reference_appendices/YAMLSyntax.html#yaml-syntax
SSH密码认证:
SSH密钥对认证:
private_key_file = /root/.ssh/id_rsa # 默认路径
2 常用选项
3 命令行使用
https://docs.ansible.com/ansible/2.9/user_guide/intro_adhoc.html
1.4 常用模块
ansible-doc –l 查看所有模块
ansible-doc –s copy 查看模块文档
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
1 shell
https://docs.ansible.com/ansible/2.9/modules/shell_module.html#shell-module
在目标主机执行shell命令。
name: 将命令结果输出到指定文件 shell: somescript.sh >> somelog.txt - name: 切换目录执行命令 shell: cmd: ls -l | grep log chdir: somedir/ - name: 编写脚本 shell: | if [ 0 -eq 0 ]; then echo yes > /tmp/result else echo no > /tmp/result fi args: executable: /bin/bash