必发88官网 1

必发88官网ansible服务及剧本编写

今日由于职业上的事贻误了几天,特来追加更新

第一章 ansible软件概念表明

第二章 ansible软件概念表达

python语言是运营职员必会的言语,而ansible是1个基于Python开荒的自动化运行工具
(saltstack)。其效果完毕基于SSH远程连接服务;ansible能够兑现批量连串安排、批量软件安排、批量文件拷贝、批量运维命令等作用

 

ansible软件相关参考链接音信:

http://docs.ansible.com/ansible/intro_installation.html
http://www.ansible.com.cn/
http://docs.ansible.com/modules_by_category.html
http://www.ansible.cn/docs/

python语言是运行职员必会的语言,而ansible是2个依据Python开拓的自动化运行工具
(saltstack)。其效率完毕基于SSH远程连接服务;ansible能够完成批量系统布局、批量软件布署、批量文本拷贝、批量周转命令等功效

壹.1 软件特点概述

01.没有必要独自安装客户端(no
agents),基于系统自带的sshd服务,sshd就一定于ansible的客户端

0贰.不供给服务端(no servers)

0③.内需借助大量的模块达成批量管理

0四.布署文件/etc/ansible/ansible.cfg(无需配置)

ansible软件相关参考链接音讯:

壹.二 公司级生产场所批量管制-自动化管理方案

01.最简便易行/最常用/最有力的选料是ssh
key+shell/pssh方案,一般中型小型型集团会用(50-100台以下规模公司)

a.利用ssh key试行命令,并将下令放在脚本里面

b.利用ssh key试行命令,将指令放在脚本里面,并加上相应循环语句或判别语句

0二.sina cfengine/puppet较早的批量管理工科具(未来基本上并未有公司用)

0叁.门户品级相比较盛行的,puppet批量管理工具(复杂/笨重)

0四.saltstack批量管理工科具;特点:简单,效率庞大(配置复杂)—智联招聘/黑莓/
CDN集团

批量管理路径:ssh key–>cfengine–>puppet–>saltstack/ansible

小心:使用ansible软件的前提是ssh key公钥分发达成

http://docs.ansible.com/ansible/intro_installation.html
http://www.ansible.com.cn/
http://docs.ansible.com/modules_by_category.html
http://www.ansible.cn/docs/

1.三 完成集群规模架构一键安插自动化-步骤表达

0一.五台服务器先配备好(kickstart,cobbler无人值班守护安装),高档完成云总结(按需分配,动态调治)-openstack,kvm

0二.linux基本优化,包蕴ssh服务(能够自动化完结)

0三.创造密钥音讯(自动化免交互创造)

  ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa >/dev/null 2>&1

0四.举办批量分发密钥(sshpass,expect自动化完结)

05.ansible软件安装(自动化完毕)

06.网络服务自动化安装(ansible实现)

  搭建yum仓库,定制rpm包

 

壹.一 软件特点概述

第壹章 ansible软件推行陈设

ansible软件安排安装需要

  1. 需要有epel源

    系统yum源(base epel–pip gem)

    sshpass—epel

  1. ssh+key免密码意况必须配备到位

0壹.没有须求单独安装客户端(no
agents),基于系统自带的sshd服务,sshd就约等于ansible的客户端

2.一 ansible地址规划

服务器名称

网卡eth0

网卡eth1

用途表达

m01

10.0.0.61

172.16.1.61

批量管制伏务器

nfs01

10.0.0.31

172.16.1.31

nfs共享存款和储蓄服务器

backup

10.0.0.41

172.16.1.41

rsync备份服务器

web01

10.0.0.8

172.16.1.8

web服务器

表明:无特别表明,子网掩码均为255.255.255.0,四个C类网段254台机械规模

 

0二.无需服务端(no servers)

2.2 一布局ssh+key免密码登入格局

使用非交互式工具落成批量散发公钥与批量管理服务器

1 sshpass -p123456 ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostChecking=no 172.16.1.41"
2 sshpass -p123456 ssh -o StrictHostChecking=no root@172.16.1.41 "uptime"
3 sshpass -p123456 scp -o StrictHostChecking=no /etc/hosts root@172.16.1.41:~
4 
5 <- -p:指定ssh连接用户的密码
6 <- -o:StrictHostChecking=no 避免第一次登录出现公钥检查

0三.索要依赖大批量的模块达成批量管制

二.三 贰受控端安装ansible相关处理软件

保留yum安装的软件

 1 sed
-i.bak ‘s#keepcache=0#keepcache=1#g’ /etc/yum.conf 2 grep keepcache /etc/yum.conf 

客户端配置

 1 yum
install libselinux-python -y 

申明:由于开端大家关闭了selinux安全管理软件,故这里需求操作此步骤。不装那个软件只可以关门selinux,不过不管什么情状也不用开启,职业条件下视情状而定

0四.配备文件/etc/ansible/ansible.cfg(没有须要配置)

2.4 ③管理端m01安装ansible软件

 1 yum
install ansible -y 

1.贰 公司级生产景况批量管制-自动化管理方案

二.四.一 查看版本消息

1 [root@m01 ~]# ansible --version
2 ansible 2.3.2.0
3   config file = /etc/ansible/ansible.cfg   #告知ansible软件配置文静路径
4   configured module search path = Default w/o overrides
5   python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

0壹.最简便/最常用/最精锐的抉择是ssh
key+shell/pssh方案,一般中小型集团会用(50-100台以下规模公司)

二.肆.2 查看软件相关安装音讯

1 [root@m01 ~]# rpm -ql ansible|egrep -v '/usr/share/|/usr/lib'
2 /etc/ansible
3 /etc/ansible/ansible.cfg   #ansible配置文件
4 /etc/ansible/hosts       #定义ansible可以管理的主机信息
5 /etc/ansible/roles       #主要在自动化部署多台主机时应用
6 
7 /usr/bin/ansible
8 /usr/bin/ansible-playbook   #执行ansible剧本命令

a.利用ssh key实践命令,并将指令放在脚本里面

贰.4.三 软件设置目录新闻

1
[root@m01 ~]# tree /etc/ansible/

2
/etc/ansible/

3 ├── ansible.cfg #ansible配置

4 ├── hosts #被ansible管理的主机名单(分组)

5 └──
roles 

b.利用ssh key实施命令,将下令放在脚本里面,并丰富相应循环语句或判定语句

2.5 ④配置/etc/ansible/hosts文件

编辑ansible的主机配置文件hosts,增添主机组banana

1 cp /etc/ansible/hosts{,.bak}
2 
3 [root@m01 ~]# vim /etc/ansible/hosts   #配置文件编写举例
4 [banana]   #定义组名称
5 172.16.1.8
6 172.16.1.31
7 172.16.1.41
8 [root@m01 ~]# tail /etc/ansible/hosts

02.sina cfengine/puppet较早的批量管理工具(现在差不多并未集团用)

二.陆 五实施测试

1 [root@m01 ~]# ansible banana -m command -a "hostname"  #-m指定命令的模块 -a指定参数(action)
2 172.16.1.31 | SUCCESS | rc=0 >>   #主机IP|请求状态|返回值(0即成功,否则失败)
3 nfs01                          #命令输出结果
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6 web01
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 backup

0叁.门户等级相比盛行的,puppet批量管理工科具(复杂/笨重)

二.陆.一 ansible命令输出音信表明

输出内容为深绿,表示实行成功,仅查询但从未发生别的变动

输出内容为香艳,表示推行成功,但对受控主机发生了影响,产生了布置退换

输出内容为革命:表示实施停业!!!

 

04.saltstack批量管理工具;特点:轻巧,成效强大(配置复杂)—拉勾网/iPhone/
CDN公司

第一章 ansible有关语法参数总计

批量管制路径:ssh key–>cfengine–>puppet–>saltstack/ansible

三.一 语法格式图示

 必发88官网 1

 

瞩目:使用ansible软件的前提是ssh key公钥分发达成

三.贰 软件常用参数表

命令参数

参数说明

-m MODULE_NAME

相应名称的模块被执行(默认模块为command);

-m后面是模块的的名字

-a MODULE_ARGS

模块参数信息;

-a后面是要执行的命令,也可以写一个IP,针对一台机器来执行命令

-C,–check

不做任何改变;反而,只是尝试预言一些可能出现的改变

–syntax-check

执行语法检查在剧本上,但是并不执行剧本

 

一.三 达成集群规模架构一键铺排自动化-步骤表明

第陆章 ansible常用模块计算

布满模块

模块表达

command(首要模块)

实行命令模块,ansible命令试行暗许模块

shell(重要模块)

实行shell脚本模块

script(主要模块)

把脚本发到客户端然后试行;实施脚本命令在中远距离服务器上

copy(重要模块)

把地面文件发送到远端

file

设定文件属性模块

service

系统服务管理模块

cron

安插职务管理模块

yum

yum软件包安装管理模块

synchronize

使用rsync同步文件模块

mount

挂载模块

ansible协助消息系列中查看方法:ansible-doc -l       
<-查看全部模块列表消息

ansible-doc -s [模块]   <-查看钦点模块用法参数音信

 

0一.五台服务器先安排好(kickstart,cobbler无人值班守护安装),高等达成云总括(按需分配,动态调节)-openstack,kvm

4.1 ping模块

 1 [root@m01 ~]# ansible banana -m ping
 2 172.16.1.41 | SUCCESS => {
 3     "changed": false,
 4     "ping": "pong"
 5 }
 6 
 7 172.16.1.31 | SUCCESS => {
 8     "changed": false,
 9     "ping": "pong"
10 }

表明:ansible连接测试成功结果

1 ansible 172.16.1.8 -m ping
2 
3 172.16.1.8 | UNREACHABLE! => {
4 "changed": false,
5 "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
6 "unreachable": true
7 }            

表明:ansible连接测试不成功结果

模块概要:

a.ping是1个大致的测试模块,这么些模块在中标连接时重回”pong”消息。在本子中绝非意思,但亦可运用ansible命令验证登入技巧和用于python的配备

b.那并不是古板的ICMP
ping,而是先反省是或不是通过ssh登入节点,在检讨python版本是不是知足供给,能满意须求就回来pong

连接正常返回pong通过帮助信息可以获得:
ansible-doc -v ping 可以获得该模块的说明
ansible-doc -s file 参看模块的具体信息

实例:

1 [root@m01 ~]# ansible-doc -v ping
2 Using /etc/ansible/ansible.cfg as config file
3 > PING    (/usr/lib/python2.6/site-packages/ansible/modules/system/ping.py)
4 
5 A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability to login and that a usable  python is configured. This is NOT ICMP ping, this is just a trivial test module.

02.linux基本优化,包含ssh服务(可以自动化完毕)

4.2 command模块

常见模块

模块说明

chdir

在执行命令之前,通过cd命令进入到指定目录中

ansible banana -m command -a "chdir=/tmp ls"

create

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

 

实例01.

1 [root@m01 ~]# ansible all -m command -a "date"
2 172.16.1.8 | SUCCESS | rc=0 >>
3 Thu Oct 19 17:12:27 CST 2017
4 
5 172.16.1.31 | SUCCESS | rc=0 >>
6 Thu Oct 19 17:12:28 CST 2017
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 Thu Oct 19 17:12:27 CST 2017

实例02.

1 [root@m01 ~]# ansible banana -m command -a "chdir=/tmp pwd"
2 172.16.1.31 | SUCCESS | rc=0 >>
3 /tmp
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6 /tmp
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 /tmp

实例03.

 1 [root@m01 ~]# ansible banana -m command -a "pwd creates=/tmp/banana_file"
 2 
 3 172.16.1.31 | SUCCESS | rc=0 >>
 4 skipped, since /tmp/banana_file exists
 5 
 6 172.16.1.8 | SUCCESS | rc=0 >>
 7 /root
 8 
 9 172.16.1.41 | SUCCESS | rc=0 >>
10 /root

模块概要:

a.命令模块中的多少个参数设置用空格进行剪切

b.命令模块中不可能出现 “<“, “>”, “|”, “;” and
“&”,如需使用这么些效应,可用shell模块

提示:command模块作为私下认可模块,在-m不点名具人体模型块时,即利用默许模块command

0三.成立密钥音讯(自动化免交互创建)

4.3 debug模块

msg:设置打字与印刷自定义音讯;借使忽略,则打字与印刷通用新闻

 1 [root@m01 ~]# ansible banana -m debug -a "msg=banana"
 2 172.16.1.8 | SUCCESS => {
 3     "msg": "banana"
 4 }
 5 
 6 172.16.1.31 | SUCCESS => {
 7     "msg": "banana"
 8 }
 9 
10 172.16.1.41 | SUCCESS => {
11     "msg": "banana"
12 }

模块概要:那几个模块会打印语句在推行时,并且能够用于调节和测试变量或表明式,能够无需甘休剧本;能够结合when指令一同开始展览调解

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1

4.4 copy模块

参数

参数说明

src

被复制到远程主机的本地文件。如果路径是一个目录,它将递归复制。如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制

remote_src

如果这个值设置为True,将到远程/目标主机的机器上搜索

dest

必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

owner

设置复制传输后的数据属主信息

group

设置复制传输后的数据属组信息

mode

设置文件数据权限信息(注意4位)

backup

在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。有两个选项:yes|no

content

用于替代"src”,可以直接设定指定文件的值

force

如果目标主机包含该文件,但内容不同。

如果设置为yes,则强制覆盖;如果为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes

directory_mode

递归设定目录的权限,默认为系统默认权限

 

模块概要:

a.copy模块拷贝文件从本土或远程机器到长途机器的多个索引区域中;使用fetch模块来拷贝文件从远程区域到地面

b.假使须求复制文件中插入的变量值,可以使用template模块

证实:第三回实行时结果为藏蓝,即文件传输;第3次进行未有发生其余改造,即为绿

实例0一. 行使copy
模块,将/etc/hosts文件传输到各类服务器送,权限修改为04四,属主属组为banana

 1 [root@m01 ~]# ansible banana -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=banana group=banana "
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
 6     "dest": "/tmp/hosts",
 7     "gid": 500,
 8     "group": "banana",
 9     "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
10     "mode": "0600",
11     "owner": "banana",
12     "size": 357,
13     "src": "/root/.ansible/tmp/ansible-tmp-1508410846.63-224022812989166/source",
14     "state": "file",
15     "uid": 500
16 }

实例02.平移远程主机上的文件remote_src=true参数

 1 [root@m01 ~]# ansible banana -m copy -a "remote_src=true src=/etc/hosts dest=/opt"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": false,
 5     "checksum": "545f587595b5c60d66243fca48e052ed34eed782",
 6     "dest": "/opt/hosts",
 7     "gid": 0,
 8     "group": "root",
 9     "md5sum": "fe08440ffebed54cab7a9b4cb3c3beda",
10     "mode": "0644",
11     "owner": "root",
12     "size": 371,
13     "src": "/etc/hosts",
14     "state": "file",
15     "uid": 0
16 }

实例0三.定义文件中的内容content=bananaedu.com暗中认可未有换行

 1 [root@m01 ~]# ansible banana -m copy -a "content=bananaedu.com dest=/opt/banana.txt"
 2 
 3 172.16.1.31 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "291694840cd9f9c464263ea9b13421d8e74b7d00",
 6     "dest": "/opt/banana.txt",
 7     "gid": 500,
 8     "group": "banana",
 9     "md5sum": "0a6bb40847793839366d0ac014616d69",
10     "mode": "0600",
11     "owner": "banana",
12     "size": 13,
13     "src": "/root/.ansible/tmp/ansible-tmp-1508649097.07-180967115147583/source",
14     "state": "file",
15     "uid": 500
16 }

0四.开始展览批量分发密钥(sshpass,expect自动化达成)

4.5 shell模块

小心:shell模块在中远距离施行脚本时,远程主机上必就要有对应的台本

0一.把脚本文件复制到远程服务器,实施远程服务器的剧本

1 [root@m01 ~]# ansible banana -m shell -a "/bin/sh /server/scripts/ssh-key.sh"
2 172.16.1.31 | SUCCESS | rc=0 >> 
3 fenfa 172.16.1.31 [  OK  ]
4 
5 fenfa 172.16.1.41 [  OK  ]  
6 
7 fenfa 172.16.1.8 [  OK  ]

0二.把/etc/hosts文件中的内容重定向到/banana.txt

1 [root@m01 ~]# ansible banana -m shell -a "cat /etc/hosts >/banana.txt"
2 
3 172.16.1.41 | SUCCESS | rc=0 >>
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6  
7 172.16.1.31 | SUCCESS | rc=0 >>

注明:可支撑command模块不可能成功的特殊符号,同时集中全体的模块

05.ansible软件安装(自动化实现)

4.6 script模块

 1 [root@m01 ~]# ansible banana -m script -a "/server/scripts/ip.sh"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "rc": 0,
 6     "stderr": "Shared connection to 172.16.1.8 closed.\r\n",
 7     "stdout_lines": [
 8         "eth0      Link encap:Ethernet  HWaddr 00:0C:29:4B:16:9D  ",
 9         "          inet addr:10.0.0.8  Bcast:10.0.0.255  Mask:255.255.255.0",
10         "          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1",
11         "          RX bytes:86527 (84.4 KiB)  TX bytes:76532 (74.7 KiB)",
12     ]
13 }

升迁:script模块与shell模块的界别

shell:必要将脚本文件都知道远端服务器,然后sh实践远端服务器的脚本

script:无需将脚本文件复制到远端服务器,实质是将脚本推行进程在远端服务器上进行试行

06.互联网服务自动化安装(ansible完结)

4.7 file模块

参数

参数表达

owner

安装复制传输后的数额属主新闻

group

安装复制传输后的数据属组新闻

mode

设置文件数量权限消息

dest

要开创的公文或目录命令,以及路线新闻

src

点名要开创软链接的文本音信

state

参数

参数表明

directory

装有不存在的子目录将会被创建

file

文件不存在将无法被创建

link

标识链接(软链接)将被创建或转移

hard

创办出硬链接

absent

目录将被递归删除以及文件,链接被撤销

留意:定义文件不存在不会退步,只是输出未有生出任何改动的结果

touch

倘诺路线不存在将创设1个空文件,假如文件或目录存在将收到更新的文件访问和修改时间

 

实例0一.创建远端目录

 1 [root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_dir state=directory"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "gid": 0,
 6     "group": "root",
 7     "mode": "0755",
 8     "owner": "root",
 9     "path": "/tmp/banana_dir",
10     "size": 4096,
11     "state": "directory",
12     "uid": 0
13 }

实例0贰.创设远端文件

 1 [root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_file state=touch"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "dest": "/tmp/banana_file",
 6     "gid": 0,
 7     "group": "root",
 8     "mode": "0644",
 9     "owner": "root",
10     "size": 0,
11     "state": "file",
12     "uid": 0
13 }

搭建yum仓库,定制rpm包

4.8 yum模块

参数

参数说明

name=name

指定安装的软件

state=installed

安装

 

 1 [root@m01 ~]# ansible banana -m yum -a "name=nmap state=installed"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": false,
 5     "msg": "",
 6     "rc": 0,
 7     "results": [
 8         "nmap-2:5.51-6.el6.x86_64 providing nmap is already installed"
 9     ]
10 }

升迁:这里的state状态均为过去式ed/d

第3章 ansible软件施行计划

4.9 service模块

参数

参数说明

name=service name

服务的名称

state=参数

停止服务 服务状态信息为过去时

stared/stoped/restarted/reloaded

enabled=yes

设置开机自启动

 

1 [root@m01 ~]# ansible banana -m service -a "name=crond state=restarted"
2 
3 172.16.1.8 | SUCCESS => {
4     "changed": true,
5     "name": "crond",
6     "state": "started"
7 }

注明:此时name即服务名,表示将名字为crond的服务停止,并且裁撤开机自运行

ansible软件布置安装须求

4.10 cron模块

实例01.创办定期任务

 1 [root@m01 ~]# ansible banana -m cron -a "name=01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"   #name识别定时任务唯一性的标识,但只管理ansible信息
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "envs": [],
 6     "jobs": [
 7         "None",
 8         "banana666"
 9     ]
10 }

实例02.刨除定期职分

1 [root@m01 ~]# ansible banana -m cron -a "name=None minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' state=absent"
2 
3 172.16.1.41 | SUCCESS => {
4     "changed": true,
5     "envs": [],
6     "jobs": [
7         "banana666"
8     ]
9 }

实例0三.查看定期任务

1 [root@m01 ~]# ansible banana -m shell -a "crontab -l"
2 
3 172.16.1.8 | SUCCESS | rc=0 >>
4 #time sync by banana at 2017-10-1
5 
6 #web_backup by rsync
7 #*/5 * * * * /bin/sh /server/scripts/web_backup.sh &>/dev/null
8 #Ansible: banana666
9 #00 00 * * * /bin/sh /server/scripts/ip.sh &>/dev/null
  1. 需要有epel源

4.11 fetch模块

参数

参数说明

dest

将远程主机拉取过来的文件保存在本地的路径信息

src

指定从远程主机要拉取的文件信息,只能拉取文件

flat

默认设置为no,如果设置为yes,将不显示172.16.1.8/etc/信息

 

实例0①.从远程主机拉取文件

 1 [root@m01 ~]# ansible banana -m fetch -a "dest=/tmp  src=/etc/hosts"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 6     "dest": "/tmp/172.16.1.8/etc/hosts",
 7     "md5sum": "27b1ddf7c360698b439627b057f77d51",
 8     "remote_checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 9     "remote_md5sum": null
10 }

实例0二.拉取时不创立目录(同名文件会覆盖)

 1 [root@m01 ~]# ansible banana -m fetch -a "dest=/tmp/  src=/etc/hosts flat=yes"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 6     "dest": "/tmp/hosts",
 7     "md5sum": "211bd00bf9ba8a735db1c7953d7cebc4",
 8     "remote_checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 9     "remote_md5sum": null
10 }

系统yum源(base epel–pip gem)

4.12 mount模块

参数

参数说明

fstype

指定挂载文件类型;-t nfs == fstype=nfs

opts

设定挂载的参数选项信息;-o ro == opts=ro

path

指定挂载点 path=/mnt

src

要被挂载的目录设备信息 src=172.16.1.31:/data/w

state

01.如果为mountd

在fstab文件中的设备将被激活挂载和适当配置

02.如果为unmounted

设备将被卸载并不会改变fstab文件信息,absent和present只处理fstab,但不影响目前的挂载

 

实例01.挂载

 1 [root@m01 ~]#ansible banana -m mount -a “fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=mounted”
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "dump": "0",
 6     "fstab": "/etc/fstab",
 7     "fstype": "nfs",
 8     "name": "/mnt",
 9     "opts": "ro",
10     "passno": "0",
11     "src": "172.16.1.31:/data/w"
12 }

实例02.卸载

 1 [root@m01 tmp]# ansible banana -m mount -a "fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=unmounted"
 2 
 3     172.16.1.8 | SUCCESS => {
 4     "changed": false,
 5     "dump": "0",
 6     "fstab": "/etc/fstab",
 7     "fstype": "nfs",
 8     "name": "/mnt",
 9     "opts": "ro",
10     "passno": "0",
11     "src": "172.16.1.31:/data"
12 }

必发88官网, 

sshpass—epel

第伍章 ansible剧本编写

  1. ssh+key免密码处境必须配备形成

5.一 ansible基础知识部分补充

贰.一 ansible地址规划

伍.一.1 ansible软件特点

01.方可完结批量管理

02.得以完结批量安顿

0三.ad-hoc(批量实行命令)—针对暂时的操作

ansible banana -m command -a “hostname”   <-批量实施命令举个例子

0肆.编纂剧本-脚本(playbook)—针对重复性的操作

服务器名称

伍.1.二 ansible主旨作用

01.pyYAML
 <-用于ansible编写剧本所选拔的言语格式(saltstack—python)

0二.paramiko  <-远程连接与数码传输

0三.Jinja2     <-用于编写ansible的模板新闻

网卡eth0

伍.二 ansible剧本编写规则表达

①规则一:缩进/空格

yaml使用贰个原则性的缩进风格表示数据层结构涉及,Saltstack供给各类缩进品级由七个空格组成,一定不可能使用tab键

在意:编写ansible-playbook文件,一定忘记有tab键

②规则二:冒号

CMD=”echo”

yaml :

mykey :

瞩目:每一个冒号前后一定要有空格(以冒号结尾不必要空格,表示文件路线的模板无需空格)

③规则三:短横线

想要表示列表项,使用一个短横杠加3个空格。四个项应用同样的缩进等级作为同3个列表的一有的

主干规则:有效的选取空格进行剧本的编辑,剧本编写是不补助tab的

网卡eth1

五.三 剧本编写意况筹算

外网IP

内网IP

主机名

10.0.0.8

172.16.1.8

web01

10.0.0.31

172.16.1.31

nfs01

10.0.0.41

172.16.1.41

backup

10.0.0.61

172.16.1.61

m01

 

用途表达

伍.四 剧本书写格式

1 剧本的开头,可以不写
2 - hosts: all   #处理所有服务器,找到所有服务器;  -(空)hosts:(空)all
3 tasks:    #剧本所要干的事情;                   -(空)(空)task:
4 - command: echo hello banana linux.
5 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能
6  ansible all -m command -a "echo hello banana linux"

本子编写内容扩大:剧本职分定义名称

1 - hosts: 172.16.1.7   #处理指定服务器                   -(空)hosts:(空)all
2 task:    #剧本所要干的事情;                          -(空)(空)task:
3 - name:
4 command: echo hello banana linux.                  
5 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能

m01

伍.四.一 剧本格式示例

1 [root@m01 ansible-playbook]# vim rsync_sever.yml
2 
3 - hosts: 172.16.1.41
4   tasks:
5     - name: install rsync
6       yum: name=rsync state=installed

10.0.0.61

伍.伍 剧本编写后检查措施

01:ansible-playbook --syntax-check 01.yml   进行剧本配置信息语法检查

02:ansible-playbook -C 01.yml   模拟剧本执行(彩排)

172.16.1.61

五.伍.一 语法检查

1
[root@m01 ansible-playbook]# ansible-playbook –syntax-check 01.yml

2

3
playbook: 01.yml 

批量管理服务器

⑤.伍.二 模拟剧本推行

 1 [root@m01 ansible-playbook]# ansible-playbook -C 01.yml
 2 
 3 PLAY [all] ***************************************************************
 4 
 5 TASK [Gathering Facts] ***************************************************************
 6 ok: [172.16.1.41]
 7 ok: [172.16.1.8]
 8 ok: [172.16.1.31]
 9 
10 TASK [cron] ***************************************************************
11 ok: [172.16.1.8]
12 ok: [172.16.1.41]
13 ok: [172.16.1.31]
14 
15 PLAY RECAP ***************************************************************
16 172.16.1.31                : ok=2    changed=0    unreachable=0    failed=0
17 172.16.1.41                : ok=2    changed=0    unreachable=0    failed=0
18 172.16.1.8                 : ok=2    changed=0    unreachable=0    failed=0

nfs01

伍.陆 剧本示例

10.0.0.31

5.陆.1 剧本编写内容扩充:剧本义务编写多少个任务

1 - hosts: all
2   tasks:
3     - name: restart-network
4       cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
5     - name: sync time
6       cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

172.16.1.31

五.陆.二 剧本编写内容扩充:剧本职分编写多少个主机

 1 - hosts: 172.16.1.7
 2   tasks:
 3     - name: restart-network
 4       cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
 5     - name: sync time
 6       cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
 7 - hosts: 172.16.1.31
 8   tasks:
 9     - name: show ip addr to file
10       shell: echo $(hostname -i) >> /tmp/ip.txt

nfs共享存款和储蓄服务器

伍.七 剧本编写情势

0一.多主机单职分编写形式

0贰.多主机多任务编写格局

03.不一主机多职责任编辑写格局

 

backup

第四章 ansible编写剧本排错思路

10.0.0.41

陆.1 剧本排错方法

  1. ansible-playbook编写完,检査语法和效仿测试运转

二.开发剧本,定位非凡问題原因,将剧本中的内容转变命令奉行2遍

  1. 将参数中的脚本文件推送到长途屎务器,在长途服务器本地施行脚本 sh -x
    test.sh

注解:ansible执行时,加上-vvvv呈现ansible详细实行过程,也得以稳固相当原因

–syntax-check或-C ansible语法检查和宪章推行(彩排)

172.16.1.41

陆.二 排错逻辑

0一.本子推行中的错误

0二.把剧本中的内容调换为ansible命令试行

ansible banana -m yum -a “name=rsync state=installed”

0三.把参数中的脚本文件推送到远端服务器,放在远端被管克制务器本地上施行

     sh -x /server/scripts/test.sh

rsync备份服务器

陆.三 ansible不可能符合规律使用

web01

陆.三.1 常见难点壹:在被控端上 root@notty进度一向存在

1 [root@backup ~]# ps -ef|grep sshd
2 
3 root      35274      1  0 15:25 ?        00:00:00 /usr/sbin/sshd
4 root      37004  35274  0 16:23 ?        00:00:00 sshd: root@pts/2
5 root      37062  35274  0 16:55 ?        00:00:00 sshd: root@notty
6 root      37154  37006  0 16:55 pts/2    00:00:00 grep --color=auto sshd

化解思路:kill pid将该进程杀死,然后使用ansible的 -vvvv
参数查看实践的错误消息

Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc

META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''

可能为:在/etc/ssh/sshd_config 文件中的第三3二行事空,导致sftp
不能够连接出错

133 Subsystem       sftp    /usr/libexec/openssh/sftp-server

10.0.0.8

陆.叁.二 常见难点二:

1
[root@m01 ~]# ansible -k 172.16.1.51 -m
ping

2

3 SSH password:

4
[WARNING]: No hosts matched, nothing to do 

缓慢解决思路:在ansible的hosts文件中,没有安排相应主机地址消息

172.16.1.8

陆.三.三 常见难题叁:

1 # ansible -k 172.16.1.51 -m ping
2 
3 SSH password:
4 172.16.1.51|FAILED! => {
5 "failed": true,
6 "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
7 }

斩草除根思路:在known_hosts文件中并没有受控端指纹音信

web服务器

6.4 [附录]pssh命令使用扩张

表明:无例外表明,子网掩码均为25五.255.25五.0,3个C类网段25肆台机器规模

6.四.一 pssh命令使用处境表达

背景:若同时给上千台服务器实践1个发令,拷贝2个文书,杀多个历程等,有怎么着简化运营处理的工具呢?

在小型公司中一般采纳for循环,可是多少巨大时:1方面不鲜明操作是或不是成功;另一方面for循环语句品质不佳推断且是或不是是同步并行推行,故此时会用到批量并行试行的通令如
pdsh,mussh,cssh,dsh等,及下边表达提到的pssh

二.二 一布署ssh+key免密码登入方式

陆.4.二 pssh软件安装配置形式

①通过yum安装pssh软件

 一 yum
install -y pssh <-pssh软件下载须求注重epel源 

表明:pssh是二个软件豪礼包,里面有成百上千软件命令

2透过编写翻译情势安装pssh软件

1 wget http://peak.telecommunity.com/dist/ez_setup.py
2 python ez_setup.py
3 wget http://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz
4 tar zxvf pssh-2.2.2.tar.gz
5 cd pssh-2.2.2
6 python setup.py install

叁pssh软件应用操作表明(ssh key认证密钥配置完结)

01.pssh 多主机并行运转命令

1 [root@server pssh-2.2.2]# vim hosts_info.txt
2 
3 172.16.1.31:22
4 172.16.1.41:22
5 172.16.1.7:22  //注意我的端口号不仅是默认的22

表达:倘若想将实践命令的批量输出新闻重定向到一个文件 加-o 目录 选项

参数表达:

-h HOST_FILE,  --hosts=HOST_FILE       hosts file (each line "[user@]host[:port]")
-o OUTDIR,     --outdir=OUTDIR         output directory for stdout files (OPTIONAL)
-P,             --print                   print output as we get it

0二.pscp 把公文并行地复制到五个主机上(从劳动器端给客户端传送文件)

 1
[root@server pssh-2.2.2]# pscp -h test.txt
/etc/sysconfig/network /tmp/network 

0叁.prsync 使用rsync和煦从地面计算机同步到长途主机

1
[root@server ~]# pssh -h test.txt -P mkdir /tmp/etc

2
[root@server ~]# prsync -h test.txt -l dongwm -a -r /etc/sysconfig
/tmp/etc  

0四.pslurp 将文件从远程主机复制到本地,和pscp方向相反

 1 [root@server ~]# pslurp -h test.txt   -L /tmp/test -l root /tmp/network test 
 2 
 3 [1] 14:53:54 [SUCCESS] 192.168.9.102 9922
 4 [2] 14:53:54 [SUCCESS] 192.168.9.104 9922
 5 
 6 [root@server ~]# ll /tmp/test/192.168.9.10
 7 192.168.9.102/ 192.168.9.104/
 8 
 9 [root@server ~]# ll /tmp/test/192.168.9.102/
10 总计 4.0K
11 -rw-r--r-- 1 root root 60 2011-04-22 14:53 test
12 
13 [root@server ~]# ll /tmp/test/192.168.9.104/
14 总计 4.0K
15 -rw-r--r-- 1 root root 60 2011-04-22 14:53 test

 

此笔记是我学习摘记整理而成,此为初稿(尚有大多不周全之处),原创作品允许转发,转发时请务必以超链接方式表明小说原来出处,笔者音信和本注解,不然将追究法律权利。

 

动用非交互式工具实现批量散发公钥与批量管理服务器

 sshpass -p123456 ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostChecking=no 172.16.1.41"
 sshpass -p123456 ssh -o StrictHostChecking=no root@172.16.1.41 "uptime"
 sshpass -p123456 scp -o StrictHostChecking=no /etc/hosts root@172.16.1.41:~
 <- -p:指定ssh连接用户的密码
 <- -o:StrictHostChecking=no 避免第一次登录出现公钥检查

二.叁 2受控端安装ansible相关管理软件

保留yum安装的软件

sed -i.bak 's#keepcache=0#keepcache=1#g' /etc/yum.conf 2 grep keepcache /etc/yum.conf 

客户端配置

yum install libselinux-python -y

表达:由于先导我们关闭了selinux安全管理软件,故这里须要操作此步骤。不装那一个软件只好关门selinux,可是无论怎么情状也决不开启,专门的职业情形下视情状而定

2.4 ③管理端m01安装ansible软件

yum install ansible -y

二.四.1 查看版本音讯

 [root@m01 ~]# ansible --version
 ansible 2.3.2.0
 config file = /etc/ansible/ansible.cfg #告知ansible软件配置文静路径
 configured module search path = Default w/o overrides
 python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

贰.四.二 查看软件相关设置音信

[root@m01 ~]# rpm -ql ansible|egrep -v '/usr/share/|/usr/lib'
/etc/ansible
/etc/ansible/ansible.cfg #ansible配置文件
/etc/ansible/hosts  #定义ansible可以管理的主机信息
/etc/ansible/roles  #主要在自动化部署多台主机时应用
/usr/bin/ansible
/usr/bin/ansible-playbook #执行ansible剧本命令

二.4.3 软件设置目录新闻

[root@m01 ~]# tree /etc/ansible/
 /etc/ansible/
 ├── ansible.cfg #ansible配置
 ├── hosts #被ansible管理的主机名单(分组)
 └── roles 

2.5 ④配置/etc/ansible/hosts文件

编辑ansible的主机配置文件hosts,添加主机组banana

cp /etc/ansible/hosts{,.bak}
[root@m01 ~]# vim /etc/ansible/hosts #配置文件编写举例
[banana] #定义组名称
172.16.1.8
172.16.1.31
172.16.1.41
[root@m01 ~]# tail /etc/ansible/hosts

二.陆 伍实行测试

[root@m01 ~]# ansible banana -m command -a "hostname" #-m指定命令的模块 -a指定参数(action)
172.16.1.31 | SUCCESS | rc=0 >> #主机IP|请求状态|返回值(0即成功,否则失败)
nfs01       #命令输出结果
172.16.1.8 | SUCCESS | rc=0 >>
web01
172.16.1.41 | SUCCESS | rc=0 >>
backup

贰.陆.一 ansible命令输出消息表明

输出内容为深青莲,表示实践成功,仅查询但尚未生出任何退换

输出内容为香艳,表示试行成功,但对受控主机爆发了震慑,产生了配备改动

输出内容为革命:表示实行停业!!!

第叁章 ansible有关语法参数计算

三.一 语法格式图示

必发88官网 2

三.2 软件常用参数表

命令参数

参数说明

-m MODULE_NAME

相应名称的模块被执行(默认模块为command);

-m后面是模块的的名字

-a MODULE_ARGS

模块参数信息;

-a后面是要执行的命令,也可以写一个IP,针对一台机器来执行命令

-C,–check

不做任何改变;反而,只是尝试预言一些可能出现的改变

–syntax-check

执行语法检查在剧本上,但是并不执行剧本

第五章 ansible常用模块总括

广大模块

模块表达

command(主要模块)

实施命令模块,ansible命令实施暗许模块

shell(主要模块)

实践shell脚本模块

script(主要模块)

把脚本发到客户端然后实行;实施脚本命令在长途服务器上

copy(主要模块)

把地面文件发送到远端

file

设定文件属性模块

service

系统服务处理模块

cron

陈设任务管理模块

yum

yum软件包安装管理模块

synchronize

运用rsync同步文件模块

mount

挂载模块

ansible扶助音信连串中查看方法:ansible-doc -l       
<-查看全人体模型块列表音讯

ansible-doc -s [模块]   <-查看钦命模块用法参数消息

4.1 ping模块

[root@m01 ~]# ansible banana -m ping
172.16.1.41 | SUCCESS => {
 "changed": false,
 "ping": "pong"
}
172.16.1.31 | SUCCESS => {
 "changed": false,
 "ping": "pong"
}

证实:ansible连接测试成功结果

ansible 172.16.1.8 -m ping
172.16.1.8 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
"unreachable": true
}

注脚:ansible连接测试不成事结果

模块概要:

a.ping是叁个简约的测试模块,那个模块在成功连接时回来”pong”新闻。在本子中平素不意思,但能够使用ansible命令验证登六手艺和用来python的配置

b.这并不是观念的ICMP
ping,而是先反省是不是经过ssh登⑥节点,在自己商酌python版本是不是知足需要,能满意须要就重返pong

连接正常返回pong通过帮助信息可以获得:
ansible-doc -v ping 可以获得该模块的说明
ansible-doc -s file 参看模块的具体信息

实例:

[root@m01 ~]# ansible-doc -v ping
 Using /etc/ansible/ansible.cfg as config file
 > PING (/usr/lib/python2.6/site-packages/ansible/modules/system/ping.py)
 A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability to login and that a usable python is configured. This is NOT ICMP ping, this is just a trivial test module.

4.2 command模块

常见模块

模块说明

chdir

在执行命令之前,通过cd命令进入到指定目录中

ansible banana -m command -a "chdir=/tmp ls"

create

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

实例01.

[root@m01 ~]# ansible all -m command -a "date"
172.16.1.8 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:27 CST 2017
172.16.1.31 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:28 CST 2017
172.16.1.41 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:27 CST 2017

实例02.

[root@m01 ~]# ansible banana -m command -a "chdir=/tmp pwd"
172.16.1.31 | SUCCESS | rc=0 >>
/tmp
172.16.1.8 | SUCCESS | rc=0 >>
/tmp
172.16.1.41 | SUCCESS | rc=0 >>
/tmp

实例03.

[root@m01 ~]# ansible banana -m command -a "pwd creates=/tmp/banana_file"
172.16.1.31 | SUCCESS | rc=0 >>
skipped, since /tmp/banana_file exists
172.16.1.8 | SUCCESS | rc=0 >>
/root
172.16.1.41 | SUCCESS | rc=0 >>
/root

模块概要:

a.命令模块中的多少个参数设置用空格进行剪切

b.命令模块中不可能出现 “<“, “>”, “|”, “;” and
“&”,如需使用那么些成效,可用shell模块

提醒:command模块作为私下认可模块,在-m不点名具人体模型块时,即选用暗中认可模块command

4.3 debug模块

msg:设置打印自定义音信;即使忽略,则打字与印刷通用消息

[root@m01 ~]# ansible banana -m debug -a "msg=banana"
172.16.1.8 | SUCCESS => {
 "msg": "banana"
}
172.16.1.31 | SUCCESS => {
 "msg": "banana"
}
172.16.1.41 | SUCCESS => {
 "msg": "banana"
}

模块概要:这几个模块会打字与印刷语句在举办时,并且能够用于调试变量或表明式,能够没有须要甘休剧本;能够整合when指令一齐张开调节和测试

4.4 copy模块

参数

参数说明

src

被复制到远程主机的本地文件。如果路径是一个目录,它将递归复制。如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制

remote_src

如果这个值设置为True,将到远程/目标主机的机器上搜索

dest

必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

owner

设置复制传输后的数据属主信息

group

设置复制传输后的数据属组信息

mode

设置文件数据权限信息(注意4位)

backup

在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。有两个选项:yes|no

content

用于替代"src”,可以直接设定指定文件的值

force

如果目标主机包含该文件,但内容不同。

如果设置为yes,则强制覆盖;如果为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes

directory_mode

递归设定目录的权限,默认为系统默认权限

模块概要:

a.copy模块拷贝文件从本地或远程机器到长途机器的叁个索引区域中;使用fetch模块来拷贝文件从远程区域到地方

b.假如必要复制文件中插入的变量值,能够应用template模块

证实:第一遍实施时结果为深青莲,即文件传输;第3遍施行未有发出别的变动,即为绿

实例01. 行使copy
模块,将/etc/hosts文件传输到各样服务器送,权限修改为044,属主属组为banana

[root@m01 ~]# ansible banana -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=banana group=banana "
172.16.1.8 | SUCCESS => {
 "changed": true,
 "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
 "dest": "/tmp/hosts",
 "gid": 500,
 "group": "banana",
 "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
 "mode": "0600",
 "owner": "banana",
 "size": 357,
 "src": "/root/.ansible/tmp/ansible-tmp-1508410846.63-224022812989166/source",
 "state": "file",
 "uid": 500
}

实例0二.运动远程主机上的文书remote_src=true参数

[root@m01 ~]# ansible banana -m copy -a "remote_src=true src=/etc/hosts dest=/opt"

172.16.1.41 | SUCCESS => {
 "changed": false,
 "checksum": "545f587595b5c60d66243fca48e052ed34eed782",
 "dest": "/opt/hosts",
 "gid": 0,
 "group": "root",
 "md5sum": "fe08440ffebed54cab7a9b4cb3c3beda",
 "mode": "0644",
 "owner": "root",
 "size": 371,
 "src": "/etc/hosts",
 "state": "file",
 "uid": 0
}

实例03.概念文件中的内容content=bananaedu.com暗中认可未有换行

[root@m01 ~]# ansible banana -m copy -a "content=bananaedu.com dest=/opt/banana.txt"

172.16.1.31 | SUCCESS => {
 "changed": true,
 "checksum": "291694840cd9f9c464263ea9b13421d8e74b7d00",
 "dest": "/opt/banana.txt",
 "gid": 500,
 "group": "banana",
 "md5sum": "0a6bb40847793839366d0ac014616d69",
 "mode": "0600",
 "owner": "banana",
 "size": 13,
 "src": "/root/.ansible/tmp/ansible-tmp-1508649097.07-180967115147583/source",
 "state": "file",
 "uid": 500
}

4.5 shell模块

在意:shell模块在长途试行脚本时,远程主机上确定要有打点的剧本

0①.把脚本文件复制到远程服务器,施行长途服务器的本子

[root@m01 ~]# ansible banana -m shell -a "/bin/sh /server/scripts/ssh-key.sh"
172.16.1.31 | SUCCESS | rc=0 >> 
fenfa 172.16.1.31 [ OK ]
fenfa 172.16.1.41 [ OK ] 
fenfa 172.16.1.8 [ OK ]

02.把/etc/hosts文件中的内容重定向到/banana.txt

[root@m01 ~]# ansible banana -m shell -a "cat /etc/hosts >/banana.txt"
172.16.1.41 | SUCCESS | rc=0 >>
172.16.1.8 | SUCCESS | rc=0 >>
172.16.1.31 | SUCCESS | rc=0 >>

注明:可支撑command模块无法不辱任务的特殊符号,同时聚焦全数的模块

4.6 script模块

[root@m01 ~]# ansible banana -m script -a "/server/scripts/ip.sh"
172.16.1.8 | SUCCESS => {
 "changed": true,
 "rc": 0,
 "stderr": "Shared connection to 172.16.1.8 closed.\r\n",
 "stdout_lines": [
  "eth0  Link encap:Ethernet HWaddr 00:0C:29:4B:16:9D ",
  "   inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0",
  "   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1",
  "   RX bytes:86527 (84.4 KiB) TX bytes:76532 (74.7 KiB)",
 ]
}

晋升:script模块与shell模块的界别

shell:供给将脚本文件都知情远端服务器,然后sh实践远端服务器的脚本

script:无需将脚本文件复制到远端服务器,实质是将脚本试行进程在远端服务器上实行实施

4.7 file模块

参数

参数表达

owner

安装复制传输后的多少属主消息

group

安装复制传输后的数量属组音信

mode

安装文件数量权限音信

dest

要开创的文书或目录命令,以及路径新闻

src

钦定要开创软链接的公文音信

state

参数

参数表明

directory

有着不设有的子目录将会被创制

file

文本不设有将不能够被成立

link

标识链接(软链接)将被创立或改变

hard

创办出硬链接

absent

目录将被递归删除以及文件,链接被裁撤

在意:定义文件不设有不会破产,只是输出未有爆发其余退换的结果

touch

设若路线不设有将创立1个空文件,假若文件或目录存在将接收更新的文书访问和改动时间

实例01.开立远端目录

[root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_dir state=directory"

172.16.1.41 | SUCCESS => {
 "changed": true,
 "gid": 0,
 "group": "root",
 "mode": "0755",
 "owner": "root",
 "path": "/tmp/banana_dir",
 "size": 4096,
 "state": "directory",
 "uid": 0
}

实例02.创造远端文件

[root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_file state=touch"

172.16.1.8 | SUCCESS => {
 "changed": true,
 "dest": "/tmp/banana_file",
 "gid": 0,
 "group": "root",
 "mode": "0644",
 "owner": "root",
 "size": 0,
 "state": "file",
 "uid": 0
}

4.8 yum模块

参数

参数说明

name=name

指定安装的软件

state=installed

安装

[root@m01 ~]# ansible banana -m yum -a "name=nmap state=installed"
172.16.1.41 | SUCCESS => {
 "changed": false,
 "msg": "",
 "rc": 0,
 "results": [
  "nmap-2:5.51-6.el6.x86_64 providing nmap is already installed"
 ]
}

提醒:这里的state状态均为过去式ed/d

4.9 service模块

参数

参数说明

name=service name

服务的名称

state=参数

停止服务 服务状态信息为过去时

stared/stoped/restarted/reloaded

enabled=yes

设置开机自启动

[root@m01 ~]# ansible banana -m service -a "name=crond state=restarted"

172.16.1.8 | SUCCESS => {
 "changed": true,
 "name": "crond",
 "state": "started"
}

证实:此时name即服务名,表示将名叫crond的劳务截至,并且撤消开机自运转

4.10 cron模块

实例0一.开立定期职分

[root@m01 ~]# ansible banana -m cron -a "name=01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'" #name识别定时任务唯一性的标识,但只管理ansible信息

172.16.1.41 | SUCCESS => {
 "changed": true,
 "envs": [],
 "jobs": [
  "None",
  "banana666"
 ]
}

实例0二.删减按时职分

[root@m01 ~]# ansible banana -m cron -a "name=None minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' state=absent"
172.16.1.41 | SUCCESS => {
 "changed": true,
 "envs": [],
 "jobs": [
  "banana666"
 ]
}

实例0三.查看定时职务

[root@m01 ~]# ansible banana -m shell -a "crontab -l"
172.16.1.8 | SUCCESS | rc=0 >>
#time sync by banana at 2017-10-1
#web_backup by rsync
#*/5 * * * * /bin/sh /server/scripts/web_backup.sh &>/dev/null
#Ansible: banana666
#00 00 * * * /bin/sh /server/scripts/ip.sh &>/dev/null

4.11 fetch模块

参数

参数说明

dest

将远程主机拉取过来的文件保存在本地的路径信息

src

指定从远程主机要拉取的文件信息,只能拉取文件

flat

默认设置为no,如果设置为yes,将不显示172.16.1.8/etc/信息

实例0一.从远程主机拉取文件

[root@m01 ~]# ansible banana -m fetch -a "dest=/tmp src=/etc/hosts"
172.16.1.8 | SUCCESS => {
 "changed": true,
 "checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 "dest": "/tmp/172.16.1.8/etc/hosts",
 "md5sum": "27b1ddf7c360698b439627b057f77d51",
 "remote_checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 "remote_md5sum": null
}

实例0二.拉取时不成立目录(同名文件会覆盖)

[root@m01 ~]# ansible banana -m fetch -a "dest=/tmp/ src=/etc/hosts flat=yes"

172.16.1.41 | SUCCESS => {
 "changed": true,
 "checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 "dest": "/tmp/hosts",
 "md5sum": "211bd00bf9ba8a735db1c7953d7cebc4",
 "remote_checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 "remote_md5sum": null
}

4.12 mount模块

参数

参数说明

fstype

指定挂载文件类型;-t nfs == fstype=nfs

opts

设定挂载的参数选项信息;-o ro == opts=ro

path

指定挂载点 path=/mnt

src

要被挂载的目录设备信息 src=172.16.1.31:/data/w

state

01.如果为mountd

在fstab文件中的设备将被激活挂载和适当配置

02.如果为unmounted

设备将被卸载并不会改变fstab文件信息,absent和present只处理fstab,但不影响目前的挂载

实例01.挂载

[root@m01 ~]#ansible banana -m mount -a “fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=mounted”
172.16.1.41 | SUCCESS => {
 "changed": true,
 "dump": "0",
 "fstab": "/etc/fstab",
 "fstype": "nfs",
 "name": "/mnt",
 "opts": "ro",
 "passno": "0",
 "src": "172.16.1.31:/data/w"
}

实例02.卸载

[root@m01 tmp]# ansible banana -m mount -a "fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=unmounted"

 172.16.1.8 | SUCCESS => {
 "changed": false,
 "dump": "0",
 "fstab": "/etc/fstab",
 "fstype": "nfs",
 "name": "/mnt",
 "opts": "ro",
 "passno": "0",
 "src": "172.16.1.31:/data"
}

第四章 ansible剧本编写

五.壹 ansible基础知识部分补充

伍.一.一 ansible软件特点

01.得以兑现批量管制

0贰.方可兑现批量布局

0三.ad-hoc(批量执行命令)—针对暂且的操作

ansible banana -m command -a “hostname” <-批量试行命令举个例子

0四.编写制定剧本-脚本(playbook)—针对重复性的操作

伍.1.二 ansible核心成效

0一.pyYAML <-用于ansible编写剧本所采用的语言格式(saltstack—python)

02.paramiko <-远程连接与数码传输

03.Jinja二 <-用于编写ansible的沙盘新闻

五.2 ansible剧本编写规则表明

①规则一:缩进/空格

yaml使用贰个定点的缩进风格表示数据层结构关系,Saltstack必要各种缩进等第由八个空格组成,一定不可能接纳tab键

在意:编写ansible-playbook文件,一定忘记有tab键

②规则二:冒号

CMD=”echo”

yaml :

mykey :

瞩目:每一种冒号前后一定要有空格(以冒号结尾无需空格,表示文件路线的模板无需空格)

③规则三:短横线

想要表示列表项,使用二个短横杠加二个空格。八个项应用同一的缩进等级作为同叁个列表的一片段

中央规则:有效的采用空格进行剧本的编辑,剧本编写是不援助tab的

5.3 剧本编写遭遇图谋

外网IP

内网IP

主机名

10.0.0.8

172.16.1.8

web01

10.0.0.31

172.16.1.31

nfs01

10.0.0.41

172.16.1.41

backup

10.0.0.61

172.16.1.61

m01

5.四 剧本书写格式

剧本的开头,可以不写
 - hosts: all  #处理所有服务器,找到所有服务器; -(空)hosts:(空)all
 tasks:  #剧本所要干的事情;          -(空)(空)task:
 - command: echo hello banana linux.
 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能
 ansible all -m command -a "echo hello banana linux"

剧本编写内容扩张:剧本义务定义名称

 - hosts: 172.16.1.7  #处理指定服务器          -(空)hosts:(空)all
 task:  #剧本所要干的事情;             -(空)(空)task:
 - name:
 command: echo hello banana linux.         
 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能

5.四.壹 剧本格式示例

[root@m01 ansible-playbook]# vim rsync_sever.yml

 - hosts: 172.16.1.41
  tasks:
   - name: install rsync
    yum: name=rsync state=installed

伍.5 剧本编写后检查办法

ansible-playbook --syntax-check 01.yml  进行剧本配置信息语法检查
ansible-playbook -C 01.yml  模拟剧本执行(彩排)

⑤.5.1 语法检查

[root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml
 playbook: 01.yml 

伍.伍.2 模拟剧本推行

[root@m01 ansible-playbook]# ansible-playbook -C 01.yml
PLAY [all] ***************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [172.16.1.41]
ok: [172.16.1.8]
ok: [172.16.1.31]
TASK [cron] ***************************************************************
ok: [172.16.1.8]
ok: [172.16.1.41]
ok: [172.16.1.31]
PLAY RECAP ***************************************************************
172.16.1.31        : ok=2  changed=0  unreachable=0  failed=0
172.16.1.41        : ok=2  changed=0  unreachable=0  failed=0
172.16.1.8         : ok=2  changed=0  unreachable=0  failed=0

5.陆 剧本示例

5.六.一 剧本编写内容扩张:剧本职分编写八个任务

 - hosts: all
  tasks:
   - name: restart-network
    cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
   - name: sync time
    cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

伍.六.2 剧本编写内容扩大:剧本职主编写两个主机

 - hosts: 172.16.1.7
 tasks:
   - name: restart-network
    cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
   - name: sync time
    cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
 - hosts: 172.16.1.31
  tasks:
   - name: show ip addr to file
    shell: echo $(hostname -i) >> /tmp/ip.txt

5.七 剧本编写方式

0一.多主机单任务编写情势

02.多主机多职分编写情势

03.比不上主机多职务编写格局

第陆章 ansible编写剧本排错思路

六.1 剧本排错方法

  1. ansible-playbook编写完,检査语法和效仿测试运营

2.开拓剧本,定位10分问題原因,将剧本中的内容转变命令实施一回

  1. 将参数中的脚本文件推送到长途屎务器,在长距离服务器本地执行脚本 sh -x
    test.sh

表达:ansible施行时,加上-vvvv展现ansible详细实施进度,也得以一定格外原因

–syntax-check或-C ansible语法检查和模仿施行(彩排)

六.二 排错逻辑

0一.本子奉行中的错误

0二.把剧本中的内容转换为ansible命令试行

ansible banana -m yum -a "name=rsync state=installed"

03.把参数中的脚本文件推送到远端服务器,放在远端被管理服务器当地上施行

sh -x /server/scripts/test.sh

六.三 ansible不能日常使用

陆.3.壹 常见难点1:在被控端上 root@notty进度一贯存在

[root@backup ~]# ps -ef|grep sshd
 root   35274   1 0 15:25 ?    00:00:00 /usr/sbin/sshd
 root   37004 35274 0 16:23 ?    00:00:00 sshd: root@pts/2
 root   37062 35274 0 16:55 ?    00:00:00 sshd: root@notty
 root   37154 37006 0 16:55 pts/2  00:00:00 grep --color=auto sshd

解决思路:kill pid将该进度杀死,然后选拔ansible的 -vvvv
参数查看实践的错误音讯

Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc

META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''

可能为:在/etc/ssh/sshd_config 文件中的第332行事空,导致sftp
不能够连接出错

133 Subsystem    sftp  /usr/libexec/openssh/sftp-server

陆.3.2 常见难题2:

[root@m01 ~]# ansible -k 172.16.1.51 -m ping
 SSH password:
 [WARNING]: No hosts matched, nothing to do 

缓慢解决思路:在ansible的hosts文件中,没有安顿相应主机地址音信

陆.叁.三 常见难点三:

# ansible -k 172.16.1.51 -m ping
SSH password:
172.16.1.51|FAILED! => {
"failed": true,
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}

化解思路:在known_hosts文件中尚无受控端指纹音信

6.4 [附录]pssh命令使用增加

陆.四.1 pssh命令使用情形表明

背景:若同时给上千台服务器推行三个指令,拷贝3个文书,杀2个历程等,有哪些简化运营管理的工具呢?

在小型公司中常见选择for循环,可是多少巨大时:壹方面不分明操作是还是不是成功;另1方面for循环语句品质倒霉测度且是不是是同步并行实行,故此时会用到批量并行试行的一声令下如
pdsh,mussh,cssh,dsh等,及下边表明提到的pssh

6.四.贰 pssh软件设置配备形式

①通过yum安装pssh软件

yum install -y pssh <-pssh软件下载需要依靠epel源

证实:pssh是一个软件大礼包,里面有大多软件命令

二通过编写翻译格局安装pssh软件

 wget http://peak.telecommunity.com/dist/ez_setup.py
 python ez_setup.py
 wget http://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz
 tar zxvf pssh-2.2.2.tar.gz
 cd pssh-2.2.2
 python setup.py install

3pssh软件应用操作表达(ssh key认证密钥配置完结)

01.pssh 多主机并行运营命令

[root@server pssh-2.2.2]# vim hosts_info.txt
 172.16.1.31:22
 172.16.1.41:22
 172.16.1.7:22 //注意我的端口号不仅是默认的22

申明:若是想将实践命令的批量输出音信重定向到一个文书 加-o 目录 选项

参数说明:

-h HOST_FILE, --hosts=HOST_FILE    hosts file (each line "[user@]host[:port]")
-o OUTDIR,   --outdir=OUTDIR     output directory for stdout files (OPTIONAL)
-P,       --print          print output as we get it

0二.pscp 把公文并行地复制到多个主机上(从劳动器端给客户端传送文件)

[root@server pssh-2.2.2]# pscp -h test.txt /etc/sysconfig/network /tmp/network 

03.prsync 使用rsync共同商议从本地Computer同步到长途主机

[root@server ~]# pssh -h test.txt -P mkdir /tmp/etc
[root@server ~]# prsync -h test.txt -l dongwm -a -r /etc/sysconfig /tmp/etc 

0四.pslurp 将文件从远程主机复制到本地,和pscp方向相反

[root@server ~]# pslurp -h test.txt  -L /tmp/test -l root /tmp/network test 
[1] 14:53:54 [SUCCESS] 192.168.9.102 9922
[2] 14:53:54 [SUCCESS] 192.168.9.104 9922
[root@server ~]# ll /tmp/test/192.168.9.10
192.168.9.102/ 192.168.9.104/
[root@server ~]# ll /tmp/test/192.168.9.102/
总计 4.0K
-rw-r--r-- 1 root root 60 2011-04-22 14:53 test
[root@server ~]# ll /tmp/test/192.168.9.104/
总计 4.0K
-rw-r--r-- 1 root root 60 2011-04-22 14:53 test

总结

如上所述是作者给大家介绍的ansible服务及剧本编写,希望对我们全数扶助,假使我们有任何疑问请给本身留言,小编会及时过来咱们的。在此也非凡多谢大家对剧本之家网址的支撑!

您或者感兴趣的作品:

  • python将ansible配置转为json格式实例代码
  • ansible作为python模块库使用的办法实例
  • Python利用ansible分发管理职务