我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ansile(3)playbook 使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ansile(3)playbook 使用


一、playbook介绍

二、palybook使用说明

三、roles说明及配置


一、playbook介绍

1.playbook介绍

顾名思义,playbook就是类似演戏的剧本一样,将所有的戏码全部放在一起,官方说明如下:

Playbooks是Ansible的配置,部署和编排语言。它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤。

如果Ansible模块是车间中的工具,Playbooks是您的使用手册,您的主机库存是您的原材料。

在基本层面,剧本可用于管理远程机器的配置和部署。在更高级的层面上,他们可以对涉及滚动更新的多层次发布进行排序,并且可以将动作委派给其他主机,同时与监视服务器和负载平衡器进行交互。

虽然这里有很多信息,但没有必要一次学习一切。你可以开始小,并随着时间的推移更多的功能,当你需要它们。

Playbooks被设计为人类可读的,并且用基本的文本语言开发。有多种方式来组织剧本和它们包括的文件,我们将提供一些建议,并充分利用Ansible。


二、palybook使用说明

2.playbook的使用及说明

2.1.基本变量及组件

2.1.1.基本组件

主机和用户说明:

hosts  为主机的IP,或者主机组名,或者关键字all

remote_user 在远程以哪个用户身份执行。

become 切换成其它用户身份执行,值为yes或者no

become_method 与became一起用,指可以为‘sudo’/’su’/’pbrun’/’pfexec’/’doas’

become_user 与bacome_user一起用,可以是root或者其它用户名 


2.1.2.基本变量

自定义变量需要用` `引用以来即可

例如:

- host: cklserver
  vars: 
      ser_name: nginx
  tasks:
     - name: install {{ ser_name }}
     - yum: 
          name: {{ ser_name }}
          state: present

2.1.3.注意问题!

但是这样写YML会报错:

- hosts: app_servers
  vars:
      app_path: {{ base_path }}/22

解决办法:要在{ 开始的值加上引号:

- hosts: app_servers
  vars:
       app_path: "{{ base_path }}/22"

2.2.task说明

2.2.1.task的基本写法

tasks:
  - name: make sure apache is running
    service: name=httpd state=running

参数太长可以分隔到多行

 tasks:
  - name: Copy ansible inventory file to client
    copy: class="lazy" data-src=/etc/ansible/hosts dest=/etc/ansible/hosts
            owner=root group=root mode=0644

或者用yml的字典作为参数

 tasks:
  - name: Copy ansible inventory file to client
    copy: 
      class="lazy" data-src: /etc/ansible/hosts 
      dest: /etc/ansible/hosts
      owner: root
      group: root 
      mode: 0644

2.2.2.task的执行状态

task中每个action会调用一个module,在module中会去检查当前系统状态是否需要重新执行. 具体的判断规则由各个module自己实现.

    .如果执行那么action会得到返回值changed;

    .如果不需要执行,那么action得到返回值ok


2.3.示例说明

2.3.1.不废话看一个简单的例子:

# cat apache.yml 
- hosts: webserver
  user: root
  tasks:
      - name: restart httpd
        service: name=httpd state=restarted

执行结果:

wKiom1hlSz7zFRqAAAAjgh1e6MY321.png

YML文件简单说明:

- hosts: webserver  //服务器组
  user: root //运行用户
  tasks:  //任务
      - name: restart httpd  //任务名称
        service: name=httpd state=restarted //操作服务

2.3.2.看一个稍微长一点的示例

# cat apache.yml 
- hosts: webserver
  remote_user: root
  vars:
      ser_name: httpd
  tasks:
      - name: add run user
        user: name='niao' uid=1008 state=present
      - name: install package {{ ser_name }} 
        yum: name={{ ser_name }} state=present
      - name: copy {{ ser_name }} config file
        copy: class="lazy" data-src=/etc/ansible/conf_dir/{{ ser_name }}.conf dest=/etc/{{ ser_name }}/conf/ owner=niao group=niao
      - name: start {{ ser_name }} server
        service: name={{ ser_name }} state=started

以上内容说明:

1.添加一个uid为1008的niao用户

2.安装httpd服务

3.拷贝配置文件,并修改属主属组为niao

4.启动httpd服务

运行结果:

wKiom1hlTF2AvrnsAAA8nm727_A559.png

查看目标文件:

# cd /etc/httpd/conf
# ll
total 52
-rw-r--r-- 1 niao niao 11750 Dec 29 21:43 httpd.conf

wKioL1hlTYqyY4X2AAAYk8ybEE8722.png

2.4.handler说明

Handlers里面的每一个handler,也是对module的一次调用。而handler与tasks不同的是,handlers不会默认的按顺序执行。

Tasks中的任务都是有状态的,changed或者ok。 Ansible提供了一种机制,只在task的执行状态为changed的时候,才会触发执行,这就是handler。


使用情景:

如果你在tasks中修改了apache的配置文件。需要重起apache。此外还安装了apache的插件。那么还需要重起apache。像这样的应该场景中,重起apache就可以设计成一个handler.


2.4.1.一个handler最多只执行一次

在所有的任务里表执行之后执行,如果有多个task notify同一个handler,那么只执行一次。

在下面的例子里apache只执行一次

拷贝两个apache的配置文件,重启一次:

# vim httpd.yml              
- hosts: webserver
  remote_user: root
  vars:
      ser_name: httpd
  tasks:
      - name: copy {{ ser_name }} config file ckl
        copy: class="lazy" data-src=/etc/ansible/conf_dir/ckl.conf dest=/etc/{{ ser_name }}/conf.d/ owner=niao group=niao
        notify:
             - call in copy action
      - name: copy {{ ser_name }} config file zld
        copy: class="lazy" data-src=/etc/ansible/conf_dir/zld.conf dest=/etc/{{ ser_name }}/conf.d/ owner=niao group=niao
        notify:
             - call in copy action
  handlers:
      - name: call in copy action
        service: name={{ ser_name }} state=started

运行结果:

wKiom1hlTZnzM4kUAAA28qw77jU962.png

action是Changed ,才会执行handler

只有当TASKS种的action的执行状态是changed时,才会触发notify handler的执行。

下面的脚本执行两次,执行结果是不同的:


上面的次执行是,tasks的状态都是changed,会触发两个handler


2.4.2.下面的执行是:

第一个task的状态是changed,触发了handlers"call in copy action"

第二个task的状态是OK,那么不会触发handlers"call in add user action"

# vim call_by.yml 
- hosts: webserver
  remote_user: root
  vars:
      ser_name: httpd
  tasks:
      - name: copy {{ ser_name }} config file ckl
        copy: class="lazy" data-src=/etc/ansible/conf_dir/ckl.conf dest=/etc/{{ ser_name }}/conf.d/ owner=niao group=niao
        notify:
             - call in copy action
      - name: add user niao
        user: name='niao' uid=1008
        notify:
             - call in add user action

  handlers:
      - name: call in copy action
        service: name={{ ser_name }} state=started
      - name: call in add user action
        service: name={{ ser_name }} state=started

运行结果:

wKioL1hlTc3hoV5gAAA1xSYM0WM476.png

2.5.主机的系统变量(facts)

2.5.1.收集变量

ansible会通过module setup来收集主机的系统信息,这些收集到的系统信息叫做facts,这些facts信息可以直接以变量的形式使用。

ansible dbserver -m setup -u root
...
 "ipv4": {
                "address": "172.16.110.49", 
                "broadcast": "172.16.110.255", 
                "netmask": "255.255.255.0", 
                "network": "172.16.110.0"
            }, 
            "ipv6": [
                {
                    "address": "fe80::4986:a223:c2d8:0", 
                    "prefix": "64", 
                    "scope": "link"
                }, 
....
  "ansible_hostname": "localhost", 
        "ansible_interfaces": [
            "lo", 
            "ens33"
        ], 
....
   "ansible_nodename": "localhost.localdomain", 
        "ansible_os_family": "RedHat", 
        "ansible_pkg_mgr": "yum", 
        "ansible_processor": [
            "GenuineIntel", 
            "Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz"
        ], 
...

2.5.2.使用facts变量示例:

- hosts: dbserver
  user: root
  tasks:
  - name: echo system
    shell: echo {{ ansible_os_family }}
  - name install ntp on RedHat linux
    yum: name=ntp state=installed
    when: ansible_os_family == "RedHat"

2.5.3.变量子属性访问

那么可以通过下面的两种方式访问复杂的变量中的子属性:

中括号:

{{ ansible_ens3["ipv4"]["address"] }}

点号:

{{ ansible_ens3.ipv4.address }}

关闭facts

- hosts: whatever
  gather_facts: no

2.6.使用命令行变量

在命令行里面传值得的方法:

ansible-playbook ckl.yml --extra-vars "hosts=web user=root"

还可以用json格式传递参数:

ansible-playbook ckl.yml --extra-vars "{'hosts':'ckl1.com', 'user':'root'}"

还可以将参数放在文件里面:

ansible-playbook ckl.yml --extra-vars "@vars.json"

2.7.include调用

很简单,看例子就行

Include语句的功能,基本的代码重用机制。主要重用tasks。

主配置yml:

# cat main.yml 
- hosts: webserver
  remote_user: root
  vars:
      ser_name: httpd
  tasks:
      - include: taks/call_by.yml

需要include的yml文件:

# cat taks/call_by.yml 
- name: copy {{ ser_name }} config file ckl
  copy: class="lazy" data-src=/etc/ansible/conf_dir/ckl.conf dest=/etc/{{ ser_name }}/conf.d/ owner=niao group=niao
  notify:
       - call in copy action
- name: add user niao 
  user: name='niao' uid=1008 
  notify:
       - call in add user action

主配置的变量可以在include文件中使用

运行结果:

wKioL1hlTmSDqSLKAAAnY5pYfzo385.png

三、roles说明及配置

比include更强大的代码重用机制。一个role可以包含vars_files, tasks, and handlers等等. 通常一个role定义了如何完成一个特定的功能,比如安装Webservers可以写成一个role, 安装Database可以写成一个role.

role的目录结构

site.yml
roles/
   dbserver/  
     files/
     templates/
     tasks/
     handlers/
     vars/
     defaults/
     meta/
   webserver/
     files/
     templates/
     tasks/
     handlers/
     vars/
     defaults/
     meta/

每个角色都会遵循以下原则:

- 如果'roles/x/tasks/main.yml'存在,里面的任务列表会被添加到`play`中。

- 如果'roles/x/handlers/main.yml'存在,里面的`handlers`会被添加到`play`中。

- 如果'roles/x/vars/main.yml'存在,里面的变量会被添加到`play`中。

- 如果'roles/x/meta/main.yml'存在,里面的角色依赖会被添加到角色列表中。

- 在'roles/x/files'任务所需要被复制的文件,无需绝对路径或者相对路径都可以引用该文件。

- 在'roles/x/files'中的任务脚本都可以直接使用该文件,无需指定绝对路径或者是相对路径。

- 在'roles/x/templates'中的模板,无需指定绝对路径或者相对路径,都可以直接使用文件名引用该文件。

- 需要包含在`roles/x/tasks'中的任务文件时,无需指定绝对路径或者相对路径,可以直接使用文件名包含。


测试示例:

目标:apache服务器组安装httpd并拷贝配置文件,启动程序

      dbserver服务器组安装maridb并拷贝配置文件,启动程序


1.配置webserver

# cd roles
# mkdir -p webserver/{files,templates,tasks,handlers,vars,defaults,meta}

1.1.拷贝配置文件:

cp httpd.conf webserver/files

1.2.配置tasks:

# cat roles/webserver/tasks/main.yml 
- name: add run user
  user: name='niao' uid=1008 state=present
- name: install package httpd
  yum: name=httpd state=present
- name: copy httpd config file
  copy: class="lazy" data-src=httpd.conf dest=/etc/httpd/conf/ owner=niao group=niao

1.3.配置handlers

# cat roles/webserver/handlers/main.yml 
- name: start httpd server
  service: name=httpd state=started

2.配置dbserver

# mkdir -p dbserver/{files,templates,tasks,handlers,vars,defaults,meta}

2.1.拷贝配置文件

cp my.cnf dbserver/files

2.2.配置tasks:

# cat roles/dbserver/tasks/main.yml                   
- name: install mariadb package
  yum: name=mariadb-server state=present
- name: copy config file
  copy: class="lazy" data-src=my.cnf dest=/etc/

2.3.配置handlers

# cat roles/dbserver/handlers/main.yml      
- name: start mariadb server
  service: name=mariadb state=started

3.整体结构

# tree
├── roles
│   ├── dbserver
│   │   ├── defaults
│   │   ├── files
│   │   │   └── my.cnf
│   │   ├── handlers
│   │   │   └── main.yml
│   │   ├── meta
│   │   ├── tasks
│   │   │   └── main.yml
│   │   ├── templates
│   │   └── vars
│   └── webserver
│       ├── defaults
│       ├── files
│       │   └── httpd.conf
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       └── vars
├── site.retry
├── site.yml

4.site配置

# cat site.yml 
- hosts: webserver
  remote_user: root
  roles:
     - webserver
- hosts: dbserver
  remote_user: root
  roles:
     - dbserver

5.运行结果:

wKioL1hlTxyh7RYwAABXxJadL80906.png

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ansile(3)playbook 使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ansile(3)playbook 使用

一、playbook介绍二、palybook使用说明三、roles说明及配置一、playbook介绍1.playbook介绍顾名思义,playbook就是类似演戏的剧本一样,将所有的戏码全部放在一起,官方说明如下:Playbooks是Ans
2023-01-31

ansible中playbook怎么使用

在Ansible中,Playbooks是用来描述任务和配置的YAML文件。使用Playbooks可以实现任务的自动化部署和配置。以下是使用Playbooks的一般步骤:创建一个Playbook文件:使用文本编辑器创建一个以`.yml`或`
2023-10-24

使用 iptables 3

<< Back to man.ChinaUnix.net 红帽企业 Linux 4: 安全指南后退第 7章 . 防火墙前进使用 iptables 的第一步是启动 iptables 服务。这可以使用以下命令进行:service iptable
2023-01-31

FusionChart使用3

12、Zero plan相关属性zeroPlaneColor设置零线(面)的颜色 zeroPlaneThickness设置零线(面)的粗细 zeroPlaneAlpha设置零线(面)的透明度 zeroPlaneShowBorder是否显示零
2023-01-31

MyCat - 使用篇(3)

全局序列号数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)。 全局序列号有很多实现的方式,比如本地配置文件,或者拿
2023-01-31

Sublime Text 3 使用

Sublime Text 3Emmet快速编写HTML代码共3图>01初始化文档HTML文档需要包含一些固定的标签,比如、、等,现在你只需要1秒钟就可以输入这些标签。比如输入“!”或“html:5”,然后
2023-01-31

codeigniter 3.X使用red

学习redis正好用codeigniter来练习CI3.X自带redis库并且在两个地方使用了这个功能,前提系统安装phpredis 这个PHP扩展1、储存session的驱动支持redishttp://codeigniter.org.cn
2023-01-31

python 3 使用pymysql 连

pymysql 连接Inception ,在判断版本时会出现value error 问题。原因是pymysql通过‘.’进行分割,但是Inception的版本信息是这样的 ./mysql -V Ver 14.14 Distrib Incep
2023-01-31

cxGrid 使用指南 3

现在特将收集的一些文章与大家分享,也希望大家不要重蹈我的覆辙.    http://www.delphibbs.com/keylife/iblog_show.asp?xid=19911大富翁论坛-富翁笔记-cxgrid (数据库控件)控件
2023-01-31

ehcache 3.* 使用介绍

官网地址:http://×××w.ehcache.org/documentation/3.6/getting-started.html    根据官网的说明使用起来非常简单,尤其是在3.0之后, 不管事xml配置文件还是链式编码配置。先看示
2023-01-31

使用 OpenAI API 和 Python 使用 GPT-3

这篇文章主要介绍了使用 OpenAI API 和 Python 使用 GPT-3,在本文中,我们将使用GPT-3。我将向您展示如何访问它,并提供一些示例来说明您可以使用它做什么,以及您可以使用它构建什么样的应用程序,需要的朋友可以参考下
2023-03-06

Node.js的基本使用3

koa是express超集(进阶版)面向过程 -》 面向对象 --》 面向服务分类: 关系型数据库: MySql非关系型数据库: MongoDB环境变量设置系统服务添加有问题安装系统不太支持高版本、 降版本 3.2 3.4 写在mong
2023-01-31

JDBC系列:(3)使用Prepared

执行sql语句的接口接口作用Statement接口用于执行静态的sql语句PreparedStatement接口用于执行预编译sql语句CallableStatement接口用于执行存储过程的sql语句(call xxx)PreparedS
2023-01-31

Python 3 进阶 —— 使用 P

PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。安装pip
2023-01-31

Linux工具使用(3)——Telnet

检查系统是否安装telnet,如果没有安装去网上下载或linux安装盘中安装#rpm –qa |grep telnettelnet-server-0.17-31.EL4.5telnet-0.17-31.EL4.5安装完后,即可启动telne
2023-01-31

使用 Spring 3 来创建 REST

原文出处:http://www.ibm.com/developerworks/cn/web/wa-spring3webserv/index.html在 Java 中,您可以使用以下几种方法来创建 RESTful Web Service:使用
2023-01-31

使用Silverlight 3实现3D三

Silverlight 3的3D特性实实的让很多Silverlighter瞪大了眼睛,但微软却也没有推出一些酷点整站程序或是源代码实例给大家学习,这不得不说是一个遗憾,本人原创一个基于Silverlight 3的3D特性实现的三维立体图像实
2023-01-31

Sublime Text 3安装与使用

本文是Sublime Text 全程指引 by Lucida (http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html)的笔记,并添加了自己整理的一些内容,感谢原作
2023-01-31

Exchange 2007使用初体验(3

大家可以看到,在Exchange 2007中,邮箱的种类多了很多,在这里我们只是选择默认的“用户邮箱”,然后点“下一步”: 如果该用户在AD中已存在,那么请选“现有用户”,并点击“浏览”,我在这里选择“新建用户”,因为我想看看Exchang
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录