Ansible 操作汇总

ansible安装

基于Ubuntu

1
aptitude install ansible #自动根据依赖安装ansible

ansible配置

主要有两个 ansible.cfg及 hosts文件

1
2
3
4
5
[root@meethong ansible]# ls
ansible.cfg  hosts  roles
[root@meethong ansible]# pwd
/etc/ansible
[root@meethong ansible]# 

配置主机更改hosts文件,主要有以下几种配置,根据具体情况而定

ansible-hosts

ansible操作

host文件配置

1
192.168.72.50 ansible_ssh_user=root ansible_ssh_pass=root

生成秘钥

1
ssh-keygen -t dsa 

分发密钥

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[root@meethong ~]#  ansible 192.168.72.50 -Km  authorized_key  -a "user=root key='{{ lookup('file', '/root/.ssh/id_dsa.pub') }}'"
BECOME password: 
192.168.72.50 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": null,
    "exclusive": false,
    "follow": false,
    "key": "ssh-dss AAAAB3NzaC1kc3MAAACBAOGpSSk2aOoP5dG6mXnRpkuCJ3/iiXOmysAhRi/19rHSGZDciqdTUv7cLoSkCu+LStMPpLIVZJsBuCQT+cFbXCTAW+LU4nU/85QyGmUeJYNItr6F1DcZEY+k0TbCskm3UETEQ+r13SvykT2Gq6fgalh71gU7qOgWxGtRsjHMjF1pAAAAFQDrYT/nC1jUS1TO2DPDZs71LEnNBQAAAIALJq0bfR5bfb8H0CRfznq+j87+wFThc8YpHGT160oe32VtgpQX5hgs3vb4umgPobHfVy4Yc9csq9J0YXaP32vDZR9EBfrOmA/Rn1+G6gV7HDcrIvqR3NvHDlBYtnN8e3hNW36fWCiGIrUfwfDkhKft6XD+btQkbVq4ukFzpId5AAAAAIEAv2p2CoQ+bd+V/1PTKmO4Ip7flWkqqiXxSOTgwKxR0KvCDyCOoAT/s5Q+oO52Muo2sFpRqYyPUTBSJ5lPaG/FD7R/FG60pYaBgiay0Lwf+6O98cDfwcz1ObIFWqa6fhag9qFGcNmGycOQK02y1lwS2AS+qFSuYNDlLgc5FkvA7KA= root@meethong",
    "key_options": null,
    "keyfile": "/root/.ssh/authorized_keys",
    "manage_dir": true,
    "path": null,
    "state": "present",
    "user": "root",
    "validate_certs": true
}

ansible ping模块测试连接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@meethong ~]# ansible 192.168.72.50  -m   ping 
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
192.168.72.50 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@meethong ~]# 

ansible 命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
ansible通过ssh实现配置管理、应用部署、任务执行等功能,
建议配置ansible端能基于密钥认证的方式联系各被管理节点

ansible <host-pattern> [-m module_name] [-a args]
ansible +被管理的主机(ALL) +模块  +参数
    --version              显示版本
    -m module              指定模块,默认为command
    -v                     详细过程 –vv -vvv更详细
    --list-hosts           显示主机列表,可简写 --list
    -k, --ask-pass         提示输入ssh连接密码,默认Key验证
    -C, --check            检查,并不执行
    -T, --timeout=TIMEOUT  执行命令的超时时间,默认10s
    -u, --user=REMOTE_USER 执行远程执行的用户
    -b, --become           代替旧版的sudo切换
        --become-user=USERNAME 指定sudo的runas用户,默认为root
    -K, --ask-become-pass  提示输入sudo时的口令

Ansible主要组成部分

1
2
3
4
5
6
7
ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,
                   由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单  /etc/anaible/hosts
MODULES:  Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS:  模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:      供第三方程序调用的应用程序编程接口 
ANSIBLE:  组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
1
2
3
利用ansible实现管理的方式:
    1> Ad-Hoc 即ansible单条命令,主要用于临时命令使用场景
    2> Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Ansible-playbook(剧本)执行过程
    将已有编排好的任务集写入Ansible-Playbook
    通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

Ansible主要操作对象
   HOSTS主机
   NETWORKING网络设备

注意事项:
   执行ansible的主机一般称为主控端,中控,master或堡垒机
   主控端Python版本需要2.6或以上
   被控端Python版本小于2.4需要安装python-simplejson
   被控端如开启SELinux需要安装libselinux-python
   windows不能做为主控端
   ansible不是服务,不会一直启动,只是需要的时候启动