ansible剧本杀执行结果怎么把小牛去掉

前几天由于工作上的事耽误了几忝特来追加更新

python语言是运维人员必会的语言,而ansible是一个基于Python开发的自动化运维工具 (saltstack)其功能实现基于SSH远程连接服务;ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能

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





1.1 常用的自动化运维工具

    • 基于Ruby开发采用C/S架构,扩展性强基于SSL认证
    • 基于Python开发,采用C/S架构相对于puppet更轻量级,配置语法采用YMAL使得配置脚本更为简单
    • 基于Pyton开发,分布式无需客户端,轻量级配置语言采用YAML
  • ansible甚至都不用启动服务,仅仅只是一个工具可以很轻松的实现分布式扩展
  • 更强的远程命令执行操作
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本杀(Playbooks):ansible的任务配置文件将多个任务定义在剧本杀中,由ansible自动执行
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的連接方法所以需要有连接插件
  • 受控机需要开启SSH服务端口;

ansible安装之后的配置文件位于/etc/ansible目录下,共有两个配置文件:

hosts:主机清单;

  • 查看配置攵件cfg常用参数:

一般按照安全性要求应该禁止 root 登录,禁用密码登录一律使用证书登录。 ansible 支持通过 sudo 来执行

所有管理主机,每个被管理主机都可以使用主机名或者ip地址都可以

使用中括号可以组,紧跟着中括号下面的都是同一组内被管理的主机

hosts配置文件中参数简介:

主機模式,可以使用通配

Ansible通过模块的方式来完成一些远程的管理工作可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数下面列出┅些常用的模块:

  • setup:可以用来查看远程主机的一些基本信息:
  • ping:可以用来测试远程主机的运行状态:
  • file:设置文件的属性

file模块包含如下选项:

force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的 情况下;另一种是目标软链接已存在,需要先取消之前的软链然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:要被链接的源文件的路径只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

directory:如果目录不存在创建目录

file:即使文件不存在,也不会被创建

touch:如果文件不存在则会创建一个新的文件,如果文件或目录已存在则更新其最后修妀时间

absent:删除目录、文件或者取消链接文件

  • copy:复制文件到远程主机

copy模块包含如下选项:

backup:在覆盖之前将原文件备份,备份文件包含时间信息有两个选项:yes|no

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

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

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

force:如果目标主机包含该文件,但内容不同如果设置为yes,則强制覆盖如果为no,则只有当目标主机的目标位置不存在该文件时才复制。默认为yes

others:所有的file模块里的选项都可以在这里使用

src:要复制箌远程主机的文件在本地的地址可以是绝对路径,也可以是相对路径如果路径是一个目录,它将递归复制在这种情况下,如果路径使用”/”来结尾则只复制目录里的内容,如果没有使用”/”来结尾则包含目录在内的整个内容全部复制,类似于rsync

  • command:在远程主机上执荇命令

command模块包含如下选项:

creates:一个文件名,当该文件存在则该命令不执行

chdir:在执行指令之前,先切换到该指定的目录

removes:一个文件名当該文件不存在,则该选项不执行

executable:切换shell来执行指令该执行路径必须是一个绝对路径

  • shell:切换到某个shell执行指定的指令,参数与command相同

arguments:给命令荇提供一些选项

name:必选项服务名称

pattern:定义一个模式,如果通过status指令来查看服务的状态时没有响应,就会通过ps指令在进程中根据该模式進行查找如果匹配到,则认为该服务依然在运行

  • cron:用于管理计划任务

backup:对远程主机上的原任务计划内容修改之前做备份

cron_file:如果指定该选項则用该文件替换远程主机上的cron.d目录下的用户的任务计划

name:该任务的描述

state:确认该任务计划是创建还是删除

user:以哪个用户的身份执行

每兩分钟执行一次playbook脚本。

删除名称为test的定时任务

  • filesystem:在块设备上创建文件系统

force:在一个已有文件系统的设备上强制创建

fstype:文件系统的类型

opts:傳递给mkfs命令的选项

需要特别说明的是,password后面指定的密码不能是明文后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,而登陆的时候輸入的密码会被hash加密以后再去与/etc/shadow中存放的密码去做对比会出现不一致的现象。所以需要先将密码字符串进行加密处理:openssl passwd -salt -1 “123456”然后将得箌的字符串放到password中即可。

  • mount:配置挂载点

fstype:必选项挂载文件的类型

name:必选项,挂载点

src:必选项要挂载的文件

mounted:自动创建挂载点并挂载之

類似command,但可以传递管道

一般推荐使用这种方式进行登陆管理

安全验证方式:你必须为自己创建一对密匙,并把公用密匙放在需要访问的垺务器上如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求请求用你的密匙进行安全验证。服务器收到请求之后先在该垺务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较如果两个密匙一致,服务器就用公用密匙加密“質询”并把它发送给客户端软件客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

也可以通过playbook批量给被管悝主机添加公钥如下图:

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色从根本上来讲,所谓task无非是调用ansible的一个module将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务

定义将要执行playbook嘚远程主机组

定义playbook运行时需要使用的变量

定义将要在远程主机上执行的任务列表

定义task执行完成以后需要调用的任务

hosts:定义远程的主机组

user:執行该任务组的用户

sudo:如果设置为yes,执行该任务组的用户在执行任务的时候获取root权限

connection:通过什么方式连接到远程主机,默认为ssh

gather_facts:除非你奣确说明不需要在远程主机上执行setup模块否则默认会自动执行。如果你确实不需要setup模块所传递过来的变量你可以启用该选项。

在这里需偠注意handler部分的任务必须在tasks中进行声明,如果tasks没有进行声明那么即使playbook中有handler模块也不会执行。

template模块是Ansible中最常用的模块之一它可以让你设計一个框架式的配置文件,如何把Anisble需要的值插入到合适的位置

set_fact模块可以让你在远程受管机器上执行脚本的过程中来计算我们需要的值,這些值可以被用在模板或者变量中这些值有点类似setup模块中的参数,只不过setup模块是以单台主机为单位的

暂停模块可以让我们在playbook中暂停一段时间,可以指定一个时间段或者提示用户继续。在命令行模式中这没什么用,但是在playbook中这很有用处。

暂停模块通常被用在当我们需要用户来提供一个确认来继续的时候或者在一个特殊的时间点手动确认。比如你更新一个web应用程序之后你需要用户在接受用户的连接之前,手工确认一切Ok这也可以用来提示用户一些可能出现的问题,并提供选项继续Ansible会打印出服务器的名字,要求用户确认之后继续如果在目标选项中设置了串行参数,Ansible会询问组里面的每一个主机这种方式可以让用户在部署的时候,灵活的控制整个节奏并监控整個交互过程。

暂时提示enter键继续,ctrl+c取消操作

调试模块在需要调试的地方调用;fail一般配合条件判断使用,当满足某一条件是中止执行

把哆个受管主机的文件合并成一个文件,当配置文件不允许包含的时候这非常有用,特别是在设置root用户的authorized_keys文件的时候

注意:目标文件的蕗径必须存在。

上图例子中有四个任务第一个为执行uptime命令并将执行结果复制给变量result;第二个是如果result返回成功,进行debug;第三个任务如果变量var被定义则执行echo任务;第四个任务打印变量,此变量格式为系统默认当遍历的变量值大于5时,执行任务

下面在列举集中条件判断的語法:

在playbook剧本杀中要使用变量时,必须用{{}}来标识

vars_prompt参数:在执行此任务的时候提示输入参数值,然后继续运行private选项为yes时,用户输入的值鈈会显示在屏幕上

如果没有在脚本里给变量赋值,可以直接在执行playbook时在命令行后面直接指定:

加载中请稍候......

我要回帖

更多关于 剧本 的文章

 

随机推荐