ansible学习笔记

ansible介绍

Ansible 简单的说是一个配置管理系统,你只需要可以使用 ssh 访问你的服务器或设备就行。你可以将代码部署到任意数量的服务器上.

ansible 架构图

Ansible主要组成部分功能说明

1
2
3
4
5
6
PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义,ansible-doc –l 可查看模块
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ANSIBLE:组合INVENTORY、 API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具

注意事项:

  • 执行ansible的主机一般称为主控端,中控,master或堡垒机
  • 主控端Python版本需要2.6或以上
  • 被控端Python版本小于2.4需要安装python-simplejson
  • 被控端如开启SELinux需要安装libselinux-python
  • windows不能做为主控端
  • 如果通过ssh进行连接,需在被控端的authorized_keys中添加主控端的公钥id_rsa.pub的内容,通过ssh-keygen来生成公钥,通过ssh-copy-id -i 公钥路径 -p 端口号 ip来对被控端添加主控端的公钥

安装ansible

这里管理主机使用的是centos系统,使用以下命令进行安装ansible

sudo yum install ansible -y

安装完成后

ansible --version

配置文件

配置文件或指令 描述
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

Inventory

Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts

Inventory参数说明

1
2
3
4
5
6
7
8
9
10
11
ansible_ssh_host**:将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置
ansible_ssh_port:ssh端口号.如果不是默认的端口号,通过此变量设置
ansible_ssh_user:默认的 ssh 用户名
ansible_ssh_pass: ssh 密码(这种方式并不安全,强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass:sudo 密码(这种方式并不安全,强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8):sudo 命令路径(适用于1.8及以上版本)
ansible_connection: 与主机的连接类型,比如:local, ssh 或者 paramiko。 Ansible 1.2 以前默认使用 paramiko。1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行
ansible_ssh_private_key_file: ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况
ansible_shell_type: 目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh''fish'
ansible_python_interpreter:目标主机的 python 路径。适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python。我们不使用 "/usr/bin/env" 机制,
因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26)

Ansible常用命令语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ansible <host-pattern> [-m module_name] [options]
指令 匹配规则的主机清单 -m 模块名 选项
--version 显示版本
-a 模块参数(如果有)
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写--list
-k, --ask-pass 提示连接密码,默认Key验证
-K,--ask-become-pass 提示使用sudo密码
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-U, SUDO_USER, --sudo-user 指定sudu用户
-b, --become 代替旧版的sudo 切换

Ansible 常用模块

  • ping模块
  • raw模块
  • yum模块
  • apt模块
  • pip模块
  • synchronize模块
  • template模块
  • copy模块
  • user 模块与group模块
  • service 模块
  • get_url 模块
  • fetch模块
  • file模块
  • unarchive模块
  • command 模块和shell

参考文章

  1. 运维自动化-Ansible
  2. Ansible中文权威指南
  3. Ansible常用模块介绍