ansible

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

ansible简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:(1)、连接插件connection plugins:负责和被监控端实现通信;(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;(3)、各种模块核心模块、command模块、自定义模块;(4)、借助于插件完成记录日志邮件等功能;(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。--摘自360百科 简而言之ansible有如下的特点:(一)批量管理工具(二)模块(三)python(四)无终端,是基于ssh实现管理的(五)也支持主从模式(六)也支持playbook

ansible优点

  • Stupied Simple ,上手简单,学习曲线平滑
  • SSH by default ,安全,无需安装客户端
  • 配置简单、功能强大、扩展性强
  • 支持API及自定义模块,可通过Python轻松扩展
  • 通过Playbooks来定制强大的配置、状态管理
  • 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
  • 幂等性:一种操作重复多次结果相同

ansible安装

yum install epel-release
yum install ansible

查看ansible的版本信息

ansible --version

查看ansible配置文件

[root@ken ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts

ansible配置客户端

、server: ssh-keygen
、scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys
或ssh-copy-id -i id_rsa.pub root@192.168.254.25 #该命令自动拷贝到/root/.ssh下,并改名为authorized_keys

使用如下脚本即可进行批量分发

#!/bin/bash
. /etc/init.d/functions
#date:2018.11.
#desc:this script for ssh key
#下载expect
yum install expect -y &>/dev/null
if [ $? -eq ];then
echo -n "download expect"
success
echo ""
else
echo -n "download expect"
failure
echo ""
exit
fi
#删除保存的秘钥信息
if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];then
rm -rf /root/.ssh/id*
rm -rf /root/.ssh/known*
fi
#自动生成秘钥对
/usr/bin/expect<<eof
spawn ssh-keygen
expect {
"(/root/.ssh/id_rsa)" {send \r;exp_continue}
"passphrase" {send \r;exp_continue}
"again" {send \r}
}
expect eof
exit
eof
#在各个节点分发秘钥
for i in
do
ken=10.220.5.1$i
/usr/bin/expect<<eof
spawn ssh-copy-id $ken
expect {
"yes/no" {send yes\r;exp_continue}
"password" {send o\r}
}
expect eof
exit
eof
done

Ansible使用的管理模式

  • hoc行模式
  • playbook模式
  • roles模式

ansible常用命令

  • ansible-doc -l #查看支持的模块
  • ansible-doc -s MODEL_NAME #查看模块用法
  • ansible命令应用基础
  1. ansible <host-pattern> [options]

      -f forks:启动并发线程数
      -m model_name:要使用的模块
      -a args:特有的参数

    • ansible all -m ping #查看client端是否正常ping通
    • ansible webserver -m setup #查看客户端信息
    • ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test' #copy文件到cient端
    • ansible webserver -m user -a "name=test state=present" #创建test用户
    • ansible webserver -m user -a "name=test state=absent" #删除test用户
    • ansible webserver -m yum -a ‘name=epel-relese state=latest‘ #yum安装
    • ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘ #停止httpd服务
    • ansible webserver -m script -a ‘/tmp/test.sh‘ #运行脚本
    • ansible webserver -m command -a  'date' #查看时间
-m:指定模块名称
-a:指定模块的具体参数
-s:以sudo的方式运行操作
-i:指定被管理节点的主机列表
-f:一批连接几个主机进行操作(默认是5个主机)

获取模块使用帮助

使用-s指定获取shell模块的使用帮助

[root@ken ~]# ansible-doc -s shell
- name: Execute commands in nodes.
shell:
chdir: # cd into this directory before running the command
creates: # a filename, when it already exists, this step will *not* be run.
executable: # change the shell used to execute the command. Should be an absolute path to the executable.
free_form: # (required) The shell module takes a free form command to run, as a string. There's not an
actual option named "free form". See the examples!
removes: # a filename, when it does not exist, this step will *not* be run.
stdin: # Set the stdin of the command directly to the specified value.
warn: # if command warnings are on in ansible.cfg, do not warn about this particular line if set to
no/false.

Ansible管理节点的三种方法

还记得刚才在hosts文件添加的三行内容吗?

[ken]
10.220.5.138
10.220.5.139

在使用ansible的时候你可以指定主机组名,也可以指定一个IP,也可以用all来表示全部,因为你的配置文件里面可能不止一个主机组名,想要实现批量管理,就要用到了all.所以这里有三种使用方法

(一)指定主机组名

通过如下的命令就可以获取到了整个主机组节点的信息

[root@ken ~]# ansible ken -m command -a "hostname"
10.220.5.138 | SUCCESS | rc=0 >>
ken 10.220.5.139 | SUCCESS | rc=0 >>
ken

(二)指定一个特定IP

指定ip 10.220.5.138获取特定节点的信息

[root@ken ~]# ansible 10.220.5.138 -m command -a "ip a"
10.220.5.138 | SUCCESS | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 00:0c:29:a9:90:16 brd ff:ff:ff:ff:ff:ff
inet 10.220.5.138/24 brd 10.220.5.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea9:9016/64 scope link
valid_lft forever preferred_lft forever

(三)使用all

因为在配置文件里面我只定义了一个主机组,所以这里呈现的效果和使用ken是一样的,大家可以尝试定义多个主机组,再使用all.

[root@ken ~]# ansible all  -m command -a "ls /tmp"
10.220.5.138 | SUCCESS | rc=0 >>
ansible_TpWP26
hsperfdata_root
hsperfdata_zabbix
systemd-private-495d844cb6f24a5fa04192c973de9274-chronyd.service-SVap94
systemd-private-495d844cb6f24a5fa04192c973de9274-httpd.service-Grw0SF
systemd-private-79452c683402427e944cc4959183f774-httpd.service-DENLXJ
systemd-private-79452c683402427e944cc4959183f774-ntpd.service-cH4QGP
systemd-private-f0243ed42bf34679b61e0687522914f6-chronyd.service-DADZWt
systemd-private-f0243ed42bf34679b61e0687522914f6-httpd.service-lCPw92
vmware-root 10.220.5.139 | SUCCESS | rc=0 >>
ansible_bxGz8A
systemd-private-2e376cd91398450f85a81bc060207ef8-chronyd.service-TxdhUO
systemd-private-2e376cd91398450f85a81bc060207ef8-httpd.service-k8IZOZ
systemd-private-5c9f32d6cff64520b10075e086d943ab-chronyd.service-iAH3c0
systemd-private-5c9f32d6cff64520b10075e086d943ab-httpd.service-dsAqeg
systemd-private-65ded84926e64a90b0a201a805f752ca-chronyd.service-eSj3iR
systemd-private-6706ba5361284cd4a0c91f3c8b68c606-chronyd.service-sLgAei
systemd-private-6706ba5361284cd4a0c91f3c8b68c606-httpd.service-op5Yg7
vmware-root
yum_save_tx.2018-11-15.16-02.KHC9kd.yumtx

Ansible第一章:基础认识--小白博客的更多相关文章

  1. python第九章:面向对象--小白博客

     面向对象介绍 一.面向对象和面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点 ...

  2. python第五章:文件--小白博客

    文件操作, 操作文件完毕后一定要记得close # 读,默认是rt(文本的方式读取),rb模式是以字节读取 # 文件路径可以用3中形式表示 f = open(r'C:\Users\fengzi\Des ...

  3. python第四章:函数--小白博客

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  4. python第二章:数据类型--小白博客

    标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...

  5. .net架构设计读书笔记--第一章 基础

    第一章 基础 第一节 软件架构与软件架构师  简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...

  6. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  7. Linux系统shell编程自学_第一章基础

    第一章 基础shell的优势在于处理操作系统底层的业务,Python,php的优势在于开发运维工具,web界面的管理工具以及web业务开发.处理一键安装.优化.报警脚本shell又叫命令解释器,它能识 ...

  8. wpf(第一章 基础知识)

    wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案 ...

  9. 《openssl编程》:第一章基础知识

    第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...

随机推荐

  1. Java——重载和重写

    前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...

  2. Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)

    通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...

  3. 第34章 授予类型 - Identity Server 4 中文文档(v1.0.0)

    授权类型是指定客户端如何与IdentityServer交互的方式.OpenID Connect和OAuth2.0规范定义了以下授权类型: Implicit Authorization code Hyb ...

  4. Docker安装nginx

    直切正题: 一.安装nginx docker pull nginx 二.启动nginx容器 docker run --name mynginx -d -p : nginx 命令说明: -p 80:80 ...

  5. ASP.NET SignalR介绍

    是什么? 简单来说,ASP.NET SignalR是一个开源的实时通讯(real-time)库,有了ASP.NET SignalR,我们可以在 详细介绍参考:https://docs.microsof ...

  6. Spring框架基础(中)

    Spring对不同持久化技术进行支持 JDBC 导入spring-jdbc-4.3.5.RELEASE.jar.spring-tx-4.3.5.RELEASE.jar 创建对象,设置数据库信息 创建j ...

  7. windows相关命令记录

    1.regedit 打开注册表 2.services.msc 打开服务列表 3.net start/stop 服务名 打开/关闭服务,例:net start mysql57,可以通过服务列表开启/关闭 ...

  8. 从.Net到Java学习第三篇——spring boot+mybatis+mysql

    从.Net到Java学习第一篇——开篇 环境:mysql5.7 新建mysql数据库demo,然后执行如下sql脚本进行数据表创建和数据初始化: -- ------------------------ ...

  9. iOS----------Xcode9无线调试教程

    软硬件要求: - Xcode 9.0 beat 及以上版本 - macOS 10.12.5 及以上版本 - iOS 11.0 beat 及以上版本 网络连接要求 - 电脑和设备处于同一 Wifi 环境 ...

  10. Github:failed to add file / to index

    我把Test项目上传到github上,为了截一部分图,来写博客.所以我就上传成功之后,把仓库Respository Test删除了,但是当我再次上传的时候,发现上传不上,会提示failed to ad ...