ansible--playbooks

playbooks翻译成中文叫剧本,和saltstack里面的state差不多,都是在管理端定义好的一条条的策略。

playbooks和前面玩的命令行执行的有啥区别呢? 其实playbooks里面真正干活的,还是一个个的模块,不过命令行的那个好比单兵作战,而playbooks是有组织有纪律的集团军作战。

mark个ansible一个官方例子地址

https://github.com/ansible/ansible-examples

https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml

下面看一个简单的例子:

1 ---

2 - hosts: 192.168.137.130

3   remote_user: ‘{{uservar}}‘

4   vars:

5     software:

6       - httpd

7       - ntpdate

8   tasks:

9     - name: run this command and ignore the result

10       shell: hostname

11       ignore_errors: True

12       register: result

13     - debug: msg=‘{{result.stdout}}‘

14

15     - name: install ntpdate and  httpd

16       yum: name={{item}} state=installed

18       with_items:

19        - ‘{{software}}‘

20       tags: init

21

22     - name: guarantee and httpd are running

23       service: name=httpd state=started

25

26     - name: transfer httpd configure file to remote

27       template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf

28       notify:

29         - restart httpd

30       when: result.stdout == ‘lvs02‘

31

32   handlers:

33     - name: restart httpd

34       service: name=httpd state=restarted

简单描述一下,每一行是做什么的?

第1行,起始标志,写不写无所谓,官网写了

第2行,定义这个play要作用的主机,多个主机或者多个组的话,用":"分开,也可以用咱们前面的那种正则的形式匹配主机。

第3行,定义了此play在remote端执行时,使用哪个用户执行。楼主这里用一个变量表示,待会可以在命令行输入此变量

第4到7行,可以在play里面定义变量,显然这个变量是局部的,只能在此play里使用。

第8行,task起始标志,可以在里面定义1个或多个task

第9行,为task定义一个name,这样我们执行的时候,会很直观的在终端上打印,不定义name也ok,执行的时候,ansible会默认打印一个action的提示,这样的话,不利于我们观察task执行过程。

第10行,就是真正干活的模块了,shell和command模块,后面的参数,直接写就OK,而其他模块的参数,都要遵循key=value的形式,如第16行和23行。还有就是,ansible里的模块,好像命令行和playbooks里面都是通用的,不像salt-stack里面,命令行的模块和state里面模块是完全分离,不能混用的。

第11行,表示上面的这个模块执行的结果,如果不为0,不加ignore_errors话,出现错误,playbook就不执行了。 加上ignore_errors的话,出现错误,会忽略并继续执行。  当然也可以在shell,command模块中, 使用   shell:  /bin/123 || /bin/true的形式。

第12行,register,把上一个模块执行的结果,保留在result(名字可以任意)这个变量里面,result变量常用的有result.stdout,result.err,result.rc等属性。这一特性,说明ansible能够保留前面task执行的结果,在后面的task里面可以利用这一结果。

第13行,debug,打印的意思。。。把result的stdout给打印出来。  debug后面要遵循,msg=‘‘这种结构

17行,使用sudo,这个sudo只针对当前task有效,想要对全局有效的话,要放到hosts,remote_user等一列。

第18,19,20行,使用ansible内置的循环结构,循环变量用{{item}}表示,循环列表在with_items里面。楼主,这里用第5-7行定义的变量,来表示循环列表。

第20行,设置标签,当playbooks执行的时候,将只执行tags所对应的task

27行,使用模板,传送httpd.conf文件,也可以用copy模块传送普通文件

28,29行和32-34行是配套使用的,handler相当于触发器的,当我们在28行notify之后,待整个tasks全部执行完毕,notify里面的东西也就是"restart httpd",就会去32行handlers里面,去匹配同一名字的handler,并执行匹配到的task。 handler主要用在服务的重启,或者关机

看一下,这个playbooks的执行结果。

在命令行使用变量。使用-e参数,就OK了,‘uservar=lixc‘就是在web.yml里面定义的romote_user

ansible]# ansible-playbook web.yml -e ‘uservar=root‘

执行20行init这个标签对应的task

ansible]# ansible-playbook web.yml -e ‘uservar=root‘ --tags init

时间: 2024-07-28 16:29:40

ansible--playbooks的相关文章

Ansible Playbooks学习

Ansible的Playbooks是Ansible用于配置,部署应用的结构化语言.Ansible的模块就好比shell命令,那么playbooks就好比shell脚本,在脚本中指定怎么使用哪些命令再加上一些判断语句等等. Playbooks使用YAML文件来表示执行步骤. --- - hosts: webservers   vars:     http_port: 80     max_clients: 200   remote_user: root   tasks:   - name: ens

Ansible Playbooks 介绍 和 使用 二

目录 handlers playbook 案例 2 handlers vars 变量 setup facts 变量使用 案例 inventory 中定义变量 案例 条件测试 when 语句 案例 handlers 接上一篇文章 Ansible Playbooks 介绍 和 使用 一 继续说明 用于当关注的资源发生变化时采取一定的操作. notify这个 action可用于在每个play的最后被处罚,这样可以避免多次有改变时每次都执行指定的操作,取而代之,尽在所有的变化发生完成后一次性执行指定的操

3、Ansible playbooks

Ansible playbooks playbook是由一个或多个“play”组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲,所谓task无非是调用ansible的一个module.将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏.下面是一个简单示例. - hosts: webnodes    //webnodes定义一个主机组,表示应用的目标主机.下面定义的任务只对此组内的主

Ansible Playbooks的使用

playbooks概念:Tasks:任务:由各模块所支持执行的特定操作任务:例子:-m user -a 'name= password='Variables:变量:Templates:模板:在定义模板之后可以实现各节点对应的变量来取代,表达式自身会根据当前节点所赋值做运算,之后生成的值则赋予这个参数,用于生成不同配置的配置文件,所以模板主要实现配置不同场景文本文件.而且这样使用模板语言来定义,模板语言中可以根据定义替换成特定主机的某些值.Handlers:处理器:如果某一次操作配置文件发生改变的

Ansible playbooks常用模块案例操作

打开git bash 连接ansible服务器,然后进入deploy用户 #ssh [email protected] 进入python3.6虚拟环境 #su - deploy #source .py3-a2.5-env/bin/activate 加载ansible 2.5版本 #source .py3-a2.5-env/ansible/hacking/env-setup -q 验证ansible加载效果 #ansible-playbook --version 1.File模块 登录到目标主机进

自动化运维工具Ansible架构部署应用及playbooks简单应用

在日常服务器运维中,我们经常要配置相同的服务器配置,前期我们都是一台一台的去配置,这种方法操作主要应对于服务器数量不多且配置简单的情况还可以继续这样操作,如果我们后期维护几百服务器或者几万服务器呢? 我应该怎样去快速配置服务器呢?如果需要手动的每台服务器进行安装配置将会给运维人员带来许多繁琐而又重复的工作同时也增加服务器配置的异常,至此自动化运维工具解决我们的瓶颈---Ansible工具. Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfeng

Ansible之playbooks

playbook是一个或多个"paly"组成的列表.play的主要功能在于将事先并归为一组的主机扮成事先通过ansible中task定义好的角色,从根本上将,所谓的task就是调用ansible的一个module.将多个play组织的一个playbook中就可以让它们连同起来按事先安排的机制同唱一台大戏. 下面是一个简单的示例 /etc/ansible/playbooks/nginx.yml 分析 1.定义了执行的远程主机是 webservers组,这个组定义主机有(192.168.8

Ansible configure management--翻译(一)

---      Ansible is the simplest way to automate apps and IT infrastructure 这是Ansible官方网站的介绍,本着学习的态度我决定一边学习一边翻译Ansible configure management这本书,原文下载稍后放出 #一些自解释的文字,我会忽略,或者按照自己的理解简单翻译一下,并非每行每句都是一一对应. Preface Since CFEngine was first created by Mark Burg

[email protected]一个高效的配置管理工具--Ansible configure management--翻译(一)

未经书面许可,请勿转载 ---      Ansible is the simplest way to automate apps and IT infrastructure 这是Ansible官方站点的介绍,本着学习的态度我决定一边学习一边翻译Ansible configure management这本书.原文下载稍后放出 #一些自解释的文字,我会忽略.或者依照自己的理解简单翻译一下,并不是每行每句都是一一相应. Preface Since CFEngine was first created

运维自动化工具ansible学习笔记

利用五一假期的时间学习了下ansible,看了一天的官方文档,对其中需要注意的地方,做下笔记整理下思绪. 一.简介 Ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.puppet与saltstack这2个软件都需要安装客户端,而saltstack与ansible很相似,都是属于python流的,但saltstack不是很稳定:puppet虽然稳定,但命令执行的时候,需要配置模块