【Ansible学习】- Ansible初探

安装

yum -y install epel-release
yum -y install ansible

Ansible基础

Ansible架构图

Ansible架构图
Ansible架构图

Ansible核心组件说明

  • Ansible:Ansible的核心程序
  • Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
  • Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,剧本用来定义那些主机需要调用那些模块来完成的功能
  • Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
  • Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
  • Connection Plugins:连接插件,Ansible和Host通信使用

Ansible执行过程

暖色调的代表已经模块化


Ansible执行过程
Ansible执行过程

清单文件

[servers]
172.20.21.120
172.20.21.121
172.20.21.123

默认清单文件是/etc/ansible/hosts

同时也可以在运行时通过-i参数来指定清单文件。

测试主机连通性

ansible www.baidu.com -m ping

发现执行结果异常,这是因为ansible只纳管定义在清单文件中的主机。

需要清单文件
需要清单文件
ansible servers -m ping
ansible servers -m ping -o

通过-o参数,可以让结果在一行中进行显示。

测试主机连通性
测试主机连通性

执行远程指令

ansible servers -m shell -a 'uptime'
ansible servers -m command -a 'uptime'
执行远程指令
执行远程指令

远程主机的yum管理

确认软件是否安装

[root@centos7 ~]# ansible servers -m shell -a 'rpm -qa|grep httpd'
 [WARNING]: Consider using yum, dnf or zypper module rather than running rpm

172.20.21.121 | FAILED | rc=1 >>
non-zero return code

安装httpd

[root@centos7 ~]# ansible servers -m yum -a 'name=httpd state=latest'
172.20.21.121 | SUCCESS => {
    "changed": true, 
    "msg": "Repository base is listed more than once in the configuration\nRepository updates is listed more than once in the configuration\nRepository extras is listed more than once in the configuration\nRepository centosplus is listed more than once in the configuration\nThere are unfinished transactions remaining. You might consider running yum-complete-transaction, or \"yum-complete-transaction --cleanup-only\" and \"yum history redo last\", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).\nThe program yum-complete-transaction is found in the yum-utils package.\n", 
    "rc": 0, 
    "results": [
        ..."
    ]
}

再次安装

再次安装时,就会检查客户端已安装的组件是否是最新的,若是最新的就不会再次安装。changed字段会返回false

[root@centos7 ~]# ansible servers -m yum -a 'name=httpd state=latest'
172.20.21.121 | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "All packages providing httpd are up to date", 
        ""
    ]
}

Ansible组件 - Inventory

Inventory主机清单

inventory文件通常用于定义要管理主机的认证信息,例如ssh登录所需的用户名、密码以及key相关信息。
/etc/ansible/hosts文件配置:

[apache]
172.20.21.121
172.20.21.123

[nginx]
172.20.21.[120:121]

# 把一个组作为另一个组的子成员
[servers:children]
apache
nginx

# 定义组变量
[servers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123456'
[root@centos7 ~]# ansible apache --list-hosts
  hosts (2):
    172.20.21.121
    172.20.21.123
[root@centos7 ~]# ansible nginx --list-hosts
  hosts (2):
    172.20.21.120
    172.20.21.121
[root@centos7 ~]# ansible servers --list-hosts
  hosts (3):
    172.20.21.121
    172.20.21.123
    172.20.21.120
[root@centos7 ~]# ansible all -m shell -a 'hostname' -o
172.20.21.123 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.121 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.120 | SUCCESS | rc=0 | (stdout) centos7

Ansible Inventory 内置参数

参数 用途 例子
ansible_ssh_host 将要连接的远程主机名ssh地址 ansible_ssh_host=192.168.1.100
ansible_ssh_port ssh端口 ansible_ssh_port=3000
ansible_ssh_user ssh 用户名 ansible_ssh_user=user
ansible_ssh_pass ssh 密码 ansible_ssh_pass=pass
ansible_sudo sudo 用户
ansible_sudo_pass sudo 密码
ansible_sudo_exe sudo 执行路径 ansible_sudo_exe=/usr/bin/sudo
ansible_connection hosts 连接方式 ansible_connection=local
ansible_ssh_private_key_file hosts 私钥 ansible_ssh_private_key_file=/root/key

Ansible组件 - Ad-Hoc

ad hoc,临时的,在ansible中是指需要快速执行,并且不需要报错的命令。对于复杂的命令则需要playbook。

执行命令 -m shell

[root@centos7 ~]# ansible servers -m shell -a 'hostname' -o
172.20.21.121 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.123 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.120 | SUCCESS | rc=0 | (stdout) centos7
[root@centos7 ~]# ansible servers -m shell -a 'uname -r' -o
172.20.21.121 | SUCCESS | rc=0 | (stdout) 3.10.0-514.26.2.el7.x86_64
172.20.21.123 | SUCCESS | rc=0 | (stdout) 3.10.0-514.26.2.el7.x86_64
172.20.21.120 | SUCCESS | rc=0 | (stdout) 3.10.0-514.26.2.el7.x86_64

复制文件 -m copy

ansible all -m copy -a "src=test.sh dest=/tmp"
复制文件
复制文件

软件包管理 -m yum

ansible apache -m yum -a "name=vim state=present"
软件包安装
软件包安装
ansible apache -m yum -a 'name=httpd state=absent'
软件包卸载
软件包卸载

服务管理 -m service

ansible apache -m service -a "name=httpd state=restarted enabled=yes"
服务管理
服务管理

Ansible组件 - Facts

facts组件是Ansible用于采集被管理主机信息的功能,可以使用setup模块查看主机所有的facts信息。可以使用filter参数对结果进行过滤。

ansible apache -m setup
ansible apache -m setup -a "filter=ansible_default_ipv4"
setup模块
setup模块

Ansible组件 - playbook

playbook是有一个或者多个play组成的列表。play的主要功能在于将实现归并为一组的主机装扮成实现通过ansible中的task定义好的角色role

根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让他们联合起来按事先编排的机制完成某一任务。

playbook结构
playbook结构

playbook示例

yaml剧本

- hosts: apache
  tasks:
  - name: Install httpd
    yum: name=httpd state=present

  - name: copy httpd conf
    template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
              owner=root group=root mode=0644
    notify:
    - Restart Apache Service

  - name: enable httpd is runing
    service: name=httpd state=started enabled=yes

  handlers:
  - name: Restart Apache Service
    service: name=httpd state=restarted

检查

ansible-playbook apapche.yaml --syntax-check
ansible-playbook apapche.yaml --list-task
ansible-playbook apapche.yaml --list-hosts

执行playbook

ansible-playbook apapche.yaml
执行playbook
执行playbook

如果觉得有用,欢迎关注我的微信,有问题可以直接交流:

你的关注是对我最大的鼓励!
你的关注是对我最大的鼓励!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

  • ansible-playbook playbook简介 playbook是ansible用于配置,部署,和管理被控...
    bdslinux阅读 10,894评论 1 12
  • ansible 系统架构 ansible简介ansible是新出现的自动化运维工具,ansible是一个配置管理和...
    运维阿文阅读 9,586评论 1 52
  • 作为背锅侠运维工作的基本流程 运维工具的分类 : ansible的模块化: ansible密钥登陆 ansible...
    二郎5阅读 4,159评论 0 10
  • 一、简介 Ansible is a radically simple configuration-manageme...
    Michael_林阅读 489评论 0 0
  • 安装ansible 1.yum安装:RHEL(Centos)7版本: 2.Apt(Ubuntu)安装方式: 3.h...
    爱吃土豆的程序猿阅读 11,140评论 0 12