

Ansible 快速入门
source link: https://pylixm.top/posts/2021-02-09-ansible-start.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

DeanWu
Beijing, ChinaAnsible 是自动化运维领域一款常用的服务器集群管理工具,他有丰富的文档和活跃的社区。
与同类型的竞品开源工具SaltStack/Puppet 相比,各有特色。可参考:
本文旨在让读者快速掌握或回顾 Ansible 的一些概念和用法,所以并不会涉及细节的东西。如想进一步掌握,可阅读 Ansible 的官方文档。
Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。
Ansible的特点
- 1、ansible不需要单独安装客户端,也不需要启动任何服务
- 2、ansible是python中的一套完整的自动化执行任务模块
- 3、ansible playbook 采用yaml配置,对于自动化任务执行过程一目了然
- 3、ansible 执行任务时幂等的。
Ansible组成结构
控制机
安装ansible 的机器,截止目前2.9
,只支持Linux 和 Mac 作为控制机,不支持 Windows。配置文件默认路径/etc/ansible/ansible.cfg
。
- 官方文档:配置文件字段详解
被控机
在 ansible hosts 清单里的机器,控制机可ssh 登录。ssh 登录时,可使用用户名密码或私钥公钥登录。
清单(Inventory)
Ansible管理主机的清单,可ip、hostname,可分组控制。默认是 /etc/ansible/hosts
文件,可使用 -i <path>
参数在命令行中指定。
- 配置文件中,清单可以是文件或目录。当是目录的时候,ansible会合并目录中所有的静态清单和动态清单的数据。
- 官方文档:如何构建清单文件
- 清单理解:Ansible_静态和动态清单文件管理
集合(Collections)
一种ansible 的分发格式,包含剧本、角色、模块和插件。
模块(Modules)
Ansible执行命令的功能模块,执行代码的基本单元。Ansible2.3版本为止,共有1039个模块。还可以自定义模块。
- 官方文档:可用模块列表
任务(Tasks)
ansible 执行的任务单元。
剧本(Playbooks)
任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,可重复执行,yaml格式。
- 官方文档:编写playbook的技巧
ansible
是ansible
的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。
Plugins
插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。
API
提供给第三方程序调用的应用程序编程接口。
Ansible 基本概念
清单文件中的变量:
[all:vars]
foo1=bar
foo2=bar2
[group1]
host1
host2
[group1:vars]
foo3=bar3
PlayBook
Playbook 中的变量:
---
- hosts: all
vars:
http_port: 80
vars_prompt:
- name: service_name
prompt: "Which service do you want to remove?"
private: no
vars_files:
- /vars/external_vars.yml
角色专用变量,一般位于 defaults/mian.yml
或者 vars/
目录下。官方文档,角色(Roles)
ansible 内部自定的变量,可以通过下面命令查看:
$ ansible hostname -m setup
{
"ansible_all_ipv4_addresses": [
"REDACTED IP ADDRESS"
],
"ansible_all_ipv6_addresses": [
"REDACTED IPV6 ADDRESS"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "11/28/2013"
......
}
变量作用域
ansible 的变量作用域主要有 3 种:
- Global:ansible 配置文件,环境变量,命令行
- Play:playbook vars, vars_prompt, vars_files; role defaults, vars
- Host: Inventory 中定义的的 host vars; facts
ansible 允许你在各处通过 jinja2 的语法使用变量。jinja2 是一个用 Python 开发的模版引擎,本身并不复杂,核心东西就 3 个:变量的输出,控制流,过滤器。
需要注意的是,在 Ansible 中如果你要使用 jinja2 的语法去引用一个变量,必须用双引号内使用。
- hosts: all
vars:
deploy_path: "{{ home_dir }}/apps"
比如我们想根据各种上下文生成 nginx 的配置文件,可以通过 template 命令来渲染。首先定一个模版文件 nginx.conf.j2
server {
server_name {{ server_name }};
listen 80;
location / {
try_files $uri $uri/ /index.html;
}
}
我们希望这个配置文件可以覆盖默认的 nginx 配置:
- hosts: nginx
vars:
server_name: gio.com
nginx_user: nginx
nginx_group: "{{ nginx_user }}"
tasks:
- name: generate nginx config file
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: "{{ nginx_user }}"
group: "{{ nginx_group }}"
become: yes
命令行方式
ansible [pattern] -m [module] -a "[module options]"
- pattern 匹配主机的模式
-m
指定调用的模块-a
模块需要的参数- 其他参数文档,官方文档
playbook 方式(yaml配置文件)
ansible-playbook <playbook name>.yml
- 参数文档,官方文档
# test.yaml
- hosts: all
tasks:
- name: install vim
yum:
name: vim
state: present
- name: install jdk
yum:
name: openjdk
state: present
运行如下命令执行:
ansible-playbook test.yaml
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK