ansible-playbook详解与简单应用(代码片段)

comprehensive comprehensive     2023-04-28     136

关键词:

一、什么是playbook

playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。 简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。 Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。 值得注意的是playbook是通过YAML格式来进行描述定义的。 playbook是由一个或多个模块组成的,使用多个不同的模块,完成一件事情。 playbook通过yaml语法识别描述的状态文件。扩展名是yaml

二、YAML语法

缩进:

YAML使用一个固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用tab

冒号:

以冒号结尾的除外,其他所有冒号后面所有必须有空格。

短横线:

表示列表项,使用一个短横杠加一个空格。 多个项使用同样的缩进级别作为同一列表。

 三、核心元素

Tasks:任务,由模板定义的操作列表

Variables:变量

Templates:模板,即使用模板语法的文件

Handlers:处理器 ,当某条件满足时,触发执行的操作

Roles:角色

四、hosts和users介绍

--- - hosts: all          #可以是一个主机组、主机、多个主机,中间以冒号分隔,也可以用all参数表示所有主机

remote_user: root              #表示执行的用户账号

become: yes                      #2.6版本以后的参数,之前是sudo,意思为切换用户运行

become_user: mysql         #指定sudo用户为mysql

become 和become_user    #作为指定远程主机sudo切换用

五、常用命令

 

ansible-playbook first.yml --syntax-check     #检查yaml文件的语法是否正确

ansible-playbook test.yml --list-task       #检查tasks任务

ansible-playbook test.yml --list-hosts     #检查生效的主机

ansible-playbook test.yml --start-at-task=‘Copy Nginx.conf‘ #指定从某个task开始运行

ansible-playbook test.yml -k     #用来交互输入ssh密码

ansible-playbook test.yml -K    #用来交互输入sudo密码

ansible-playbook test.yml -u    #指定用户

六、playbook变量

变量定义有三种方式

(1) --extra-vars执行参数赋给变量,优先级最高;

[root@LB02 ansible]# vim test1.yml 

---
  - hosts: web
    remote_user: root
    tasks:
      - name: #create new file
        file: path=/tmp/ file  state=touch
[root@LB02 ansible]# ansible-playbook test1.yml --extra-vars "file=abc" #在/tmp目录下创建abc的文件;

 

(2) playbook的yaml文件中定义变量赋值,优先级其次;

[root@LB02 ansible]# vim test2.yml 

---
  - hosts: web
    vars:
     file: hello
    remote_user: root
    tasks:
      - name:
        file: path=/tmp/ file  state=touch
#执行ansible命令,在客户端主机上面/tmp目录中创建hello这个文件。

(3) 在/etc/ansible/hosts主机组中定义变量,优先级最低;

[root@LB02 ansible]# vim hosts
[web01]
192.168.11.206

[web02]
192.168.11.207

[web]
192.168.11.206
192.168.11.207

[web:vars]
file=fileone    #此处定义变量名称
[root@LB02 ansible]# vim test3.yml 

---
  - hosts: web
    tasks:
    - name: create file
      file: path=/tmp/ file  state=touch
#执行ansible命令后,在/tmp目录下创建fileone的文件;

注册变量: register关键字可以存储指定命令的输出结果到一个自定义的变量中

[root@LB02 ansible]# vim test4.yml 

---
  - hosts: web
    tasks:
    - name:
      shell: netstat -tunlp
      register: system_status
    - name: Get System Status
      debug: msg= system_status.stdout_lines 

七、条件判断(when)

[root@LB02 ansible]# vim whenone.yml 

---
  - hosts: web
    remote_user: root
    tasks:
    - name: create file #如果系统中存在主机名为web01或者server的主机,则创建文件
      file: path=/tmp/this_is_ ansible_hostname _file state=touch
      when: (ansible_hostname == "web01") or (ansible_hostname == "server")

    - name: centos install httpd  #系统为centos的主机才会执行
      yum: name=httpd state=present
      when: (ansible_distribution == "CentOS")

    - name: ubuntu install tree #系统为ubuntu的主机才会执行
      yum: name=tree state=present
      when: (ansible_distribution == "Ubuntu")

八、循环语句(item)

(1)标准循环使用场景,批量安装软件;

[root@LB02 ansible]# vim item.yml 

---
 - hosts: web
   remote_user: root
   tasks:
   - name: installed pkg
     yum: name= item  state=present
     with_items:
        - wget
        - vsftpd
        - tree
#客户主机会安装以上三种软件;

(2)标准循环使用场景,批量创建用户;

[root@LB02 ansible]# vim itemcreate.yml 

---
  - hosts: web
    remote_user: root
    tasks:
     - name: add users
       user: name= item.name  groups= item.group  state=present
       with_items:
         -  name: user1,group: root
         -  name: user2,group: root

(3)标准循环使用场景,拷贝多个目录;

[root@LB02 ansible]# vim itemcopy.yml 

---
 - hosts: web
   remote_user: root
   tasks:
     - name: configure rsync server
       copy: src= item.src  dest=/tmp/ item.dest  mode= item.mode 
       with_items:
       -  src: "item.yml",dest: "item.yml",mode: "0644"
       -  src: "itemcreate.yml",dest: "itemcreate.yml",mode: "0600"
#把本地(管理端)文件复制到远程客户端主机/tmp目录下;路径可为绝对或相对路径;

异常处理,加入参数: ignore_errors: yes 忽略错误 

[root@LB02 ansible]# vim errorignore.yml 

---
 - hosts: web
   remote_user: root
   tasks:
    - name: ignore error
      command: /bin/false
      ignore_errors: yes

    - name: touch new file
      file: path=/tmp/errortest state=touch
#执行ansible后,在提示中有...ignoring 的显示;

九、tags标签

标签使用,通过tags和任务对象进行捆绑,控制部分或者指定的task执行

-t: 执行指定的tag标签任务

--skip-tags: 执行--skip-tags之外的标签任务

[root@LB02 ansible]# vim tag.yml

---
- hosts: web
  remote_user: root

  tasks:
    - name: install httpd
      yum: name=httpd state=installed
      tags: install_httpd

    - name: start httpd
      service: name=httpd state=started
      tags: start_httpd

    - name: restart httpd
      service: name=httpd state=restarted
      tags: restart_httpd
[root@LB02 ansible]# ansible
-playbook -t install_httpd #只执行安装程序的操作;-t 参数只执行指定的标签运行; [root@LB02 ansible]# ansible-playbook --skip-tags install_httpd #执行启动httpd程序后,再重启httpd; --skip-tags 参数是忽略此标签操作,执行其它操作。

原创ansible-playbook详解

YAML的语法和其他高阶语言类似并且可以简单表达清单、散列表、标量等数据结构。(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对)YAML文件扩展名通常为.yaml或者.yml。下面为示例一定要对齐,只能使... 查看详情

1.ansible-playbook变量定义与引用(代码片段)

简单的playbookplaybook是ansible的核心组件,使用的是YAML语法.下面请看简单的playbook代码[[email protected]playb]#catnginx.yaml-hosts:alltasks:-name:InstallNginxPackageapt:name=nginxstate=present-name:CopyNginx.conftemplate 查看详情

ansible-playbook剧本

一、playbookplaybook是剧本的意思通过task调用ansible的模块将多个play组织在一个playbook中运行。playbook本身由以下各部分组成:Tasks:任务,即调用模块完成的某操作Variables:变量Templates:模板Handlers:处理器,当某条件满足时,触发执行... 查看详情

ansible-playbook

ansible-playbook(1) Ansible组成部分InventoryModulesAdHocCommandsplaybooksplaybooks:Tasks:任务,即调用的模块完成的某操作variables:变量Templates:模版Roles:角色 基本结构:-host:webserverremote_user:tasks:-task1 module_name:MODULE_NAME-task2 简单... 查看详情

ansible-playbook一键化部署apache服务

原创chaos_oper最后发布于2019-06-1321:31:44阅读数463收藏展开Playbook(任务剧本)playbook是简单易用的自动化语言编排定义ansible任务集的配置文件,由ansible顺序依次执行,通常是JSON格式的*YML文件playbook是一个非常简单的配置管理和多... 查看详情

wrapper配置详解及高级应用(转)

   转自:http://286.iteye.com/blog/1921414  将一个简单的程度如HelloWorld的应用包装秤Wrapper服务并不复杂,甚至可以认为非常简单。但是实际项目应用过程中我们的程序一般较庞大,运行环境也较复杂。    通过W... 查看详情

git应用详解第五讲:远程仓库github与git图形化界面

第五讲:远程仓库Github与Git图形化界面前言这一节将会介绍本地仓库与远程仓库的一些简单互动以及几款常用的Git图形化界面,让你更加方便地使用git。一、Git裸库简单来说git裸库就是没有工作区的git仓库。比如服务器,只起到... 查看详情

运维自动化工具ansible-playbook(代码片段)

一、简介playbook是一个非常简单的配置管理和多主机部署系统。可作为一个适合部署复杂应用程序的基础。playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式。playbook是通过YAML格式来进行描述定义的,... 查看详情

ansible-playbook批量部署zabbix

一、需求  机房每次增加一批服务器,一些初始环境变量,监控端,脚本,时间校对,配置文件参数修改等一系操作,刚开始按步就班,也用到一些脚本,高效性没能体现出来。现在升级到ansible,自动化部署应用,配置,... 查看详情

docker详解与部署微服务实战

2013年发布至今,Docker一直广受瞩目,被认为可能会改变软件行业。但是,许多人并不清楚Docker到底是什么,要解决什么问题,好处又在哪里?今天就来详细解释,帮助大家理解它,还带有简单易懂的实例,教你如何将它用于日... 查看详情

gc之详解cms收集过程和日志分析(代码片段)

话题引入让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重讲的内容:ParNewandCMS"ConcurrentMarkandSweep"是CMS的全称,官方给予的名称... 查看详情

jvm之年轻代(新生代)老年代永久代以及gc原理详解gc优化

关于JVM,也许你听过这些术语:年轻代(新生代)、老年代、永久代、minorgc(younggc)、majorgc、fullgc不要急,先上图,这是jvm堆内存结构图  仔细的你发现了图中有些分数8/10和1/10,这是默认配置下各个代内存分配比例。举... 查看详情

jvm面试题,看这篇就足够了(87题详解)

@目录1、java中会存在内存泄漏吗,请简单描述。2、64位JVM中,int的长度是多数?3、Serial与ParallelGC之间的不同之处?4、32位和64位的JVM,int类型变量的长度是多数?5、Java中WeakReference与SoftReference的区别?6、JVM选项-XX:+UseCompressedOop... 查看详情

jvm面试题,看这篇就足够了(87题详解)

@目录1、java中会存在内存泄漏吗,请简单描述。2、64位JVM中,int的长度是多数?3、Serial与ParallelGC之间的不同之处?4、32位和64位的JVM,int类型变量的长度是多数?5、Java中WeakReference与SoftReference的区别?6、JVM选项-XX:+UseCompressedOop... 查看详情

jdbc应用简介及详解_项海涛(代码片段)

本篇博客内容主要是如何实现一个JDBC应用的开发:引言:1.JDBC的简介。2.JDBC中的简单应用。首先我们来了解一下什么是JDBC?1.JDBC是Java应用程序的接口,主要用于与关系型数据库的连接、与交互。2.JDBC是一组API的... 查看详情

无线充电技术(四种主要方式)原理与应用实例图文详解

转自网络  查看详情

基于prometheus的jvm监控指标详解(代码片段)

使用Prometheus监控Springboot应用参考PrometheusOperator实战——Prometheus、Alertmanager、Grafana监控Springboot服务下面来看看jvm的监控指标#HELPjvm_gc_collection_secondsTimespentinagivenJVMgarbagecollectorinseconds.#TYPEjvm_gc_collection_secondssummary#这是一个Summary指... 查看详情

:statistics统计工具功能详解与应用

(七):Statistics统计工具功能详解与应用Wireshark一个强大的功能在于它的统计工具。使用Wireshark的时候,我们有各种类型的工具可供选择,从简单的如显示终端节点和会话到复杂的如Flow和IO图表。本文将介绍... 查看详情