首页 > 其他分享 >4 Ansible Playbook

4 Ansible Playbook

时间:2024-07-09 12:31:49浏览次数:13  
标签:play tasks name user ansible Ansible Playbook playbook

1 Ansible Playbook简介

Ansible 靠ansible命令是撑不起自动化管理这把大伞的,Ansible真正强大的是playbook,它才是Ansible撬动自动化管理的结实杠杆。

ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写。playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。

playbook通过ansible-playbook命令使用,它的参数和ansible命令类似,如参数-k(–ask-pass) 和 -K (–ask-sudo) 来询问ssh密码和sudo密码,-u指定用户,这些指令也可以通过规定的单元写在playbook 。

ansible-playbook的简单使用方法: ansible-playbook example-play.yml 。

 playbook、play和task的关系

  • playbook中可以定义一个或多个play
  • 每个play中可以定义一个或多个task
  • 每个play都需要通过hosts指令指定要执行改play的目标主机
  • 每个play都可以设置一些该play的环境控制行为,比如定义play级别的变量

其中还可以定义两类特殊的task:pre_tasks和post_tasks

  • pre_tasks表示执行执行普通任务之前执行的任务列表
  • post_tasks表示普通任务执行完之后执行的任务列表

2 Playbook基本语法

下面是一个简单的ansible-playbook示例,可以了解其构成:

# cat user.yml
- name: create user
  hosts: all
  remote_user: root
  gather_facts: false
  vars:
    user:"test"
  tasks:
    - name: create  user
      user: name="{{ user }}"
 

配置项说明:

  • name:对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值

  • hosts:指定对哪些被管理机进行操作;

  • remote_user:指定在远程被管理机上执行操作时使用什么用户,如不指定,则使用ansible.cfg中配置的remote_user

  • gather_facts:指定在执行任务之前,是否先执行setup模块获取主机相关信息,如未用到,可不指定

  • vars:定义后续任务中会使用到的变量,如未用到,可不指定

  • tasks
    
     

    :定义具体需要执行的任务

    • name:对任务的描述,在执行过程中会打印出来。
    • user:指定调用user模块;
      • name:user模块里的一个参数,用于指定创建的用户名称

同样,如果想实现把这个新增的用户删除,只需将该playbook文件的最后一行替换为如下行再执行相应的playbook即可:

user: name="{{ user }}" state=absent remove=yes
 

3 Playbook简单示例

下面通过playbook管理一个httpd服务器来简单了解下playbook的应用:

  1. 创建playbook
# cat manage_apache.yml
- name: play to setup web server
  hosts: all
  tasks:
    - name: latest httpd version installed
      yum:
        name: httpd
        state: latest
        
    - name: correct index.html is present
      copy: 
        src: files/index.html
        dest: /var/www/html/index.html
        
    - name: start httpd service
      service:
        name: httpd
        state: started
        enabled: true
 
  1. 执行playbook
# ansible-playbook  manage_apache.yml 

PLAY [play to setup web server] *********************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [10.1.61.187]

TASK [latest httpd version installed] ***************************************************************************************************************************************
changed: [10.1.61.187]

TASK [correct index.html is present] ****************************************************************************************************************************************
changed: [10.1.61.187]

TASK [start httpd service] **************************************************************************************************************************************************
changed: [10.1.61.187]

PLAY RECAP ******************************************************************************************************************************************************************
10.1.61.187                : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
 

 4 ansible-playbook常用选项

4.1 打印详细信息

  • -v:打印任务运行结果
  • -vv:打印任务运行结果以及任务的配置信息
  • -vvv:包含了远程连接的一些信息
  • -vvvv:Adds extra verbosity options to the connection plug-ins,including the users being used in the managed hosts to execute scripts, and what scripts have been executed
# ansible-playbook  manage_apache.yml  -vv
 

4.2 校验playbook语法

# ansible-playbook --syntax-check  manage_apache.yml   

playbook: manage_apache.yml
 

Todo: 测试使用 ansible-lint

4.3 测试运行playbook

通过-C选项可以测试playbook的执行情况,但不会真的执行:

# ansible-playbook -C  manage_apache.yml  

PLAY [play to setup web server] *********************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [10.1.61.187]

TASK [latest httpd version installed] ***************************************************************************************************************************************
ok: [10.1.61.187]

TASK [correct index.html is present] ****************************************************************************************************************************************
ok: [10.1.61.187]

TASK [start httpd service] **************************************************************************************************************************************************
ok: [10.1.61.187]

PLAY RECAP ******************************************************************************************************************************************************************
10.1.61.187                : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 

 4.4 playbook模块参数的传递方式

copy模块的参数传递方式如下

tasks:
  - name: copy /etc/passwd to /tmp
    copy: src=/etc/passwd dest=/tmp
 

这是标准的yaml语法,参数部分src=/etc/passwd dest=/tmp是一个字符串,当作copy对应的值。根据4_8 yaml介绍的yaml语法,还可以换行书写。有以下几种方式:

---
- name: first play
  hosts: nginx
  gather_facts: false
  tasks:
  - copy:
    src=/etc/passwd dest=/tmp

  - copy:
    src=/etc/passwd
    dest=/tmp

  - copy: >
    src=/etc/passwd
    dest=/tmp

  - copy: |
    src=/etc/passwd
    dest=/tmp
 

除此之外,Ansible还提供了另外两种传递参数的方式:

(1).将参数和参数值写成key: value的方式

(2).使用args参数声明接下来的是参数

通过示例便可对其用法一目了然:

---
- name: first play
  hosts: nginx
  gather_facts: false
  tasks:
  - name: copy1
    copy:
      src: /etc/passwd
      dest: /tmp

  - name: copy2
    copy:
    args:
      src: /etc/passwd
      dest: /tmp
 

大多数时候,使用何种方式传递参数并无关紧要,只要个人觉得可读性高、方便、美观即可。

 5 Multiple Plays

# This is a simple playbook with two plays

- name: first play
  hosts: web.example.com
  tasks:
    - name: first task
      yum:
        name: httpd
        status: present
    - name: second task
      service:
        name: httpd
        state: started
    
- name: second play
  hosts: db.example.com
  tasks:
    - name: first task
      yum:
        name: mariadb-server
        status: present
    - name: second task
      service:
        name: mariadb
        state: started
 

标签:play,tasks,name,user,ansible,Ansible,Playbook,playbook
From: https://www.cnblogs.com/david-cloud/p/18291540

相关文章

  • 5 Ansible变量
    变量优先级这些变量定义的方法,它们的优先级如下:在命令行中定义的变量(即用-e或--extra-vars定义的变量);在Inventory中定义的连接变量(比如:ansible_ssh_user);大多数的其他变量(命令行转换、play中的变量、included的变量、role中的变量等);在Inventory中定义的其他变量;Facts变量;......
  • 6 Ansible使用优化
    1加大forks的值默认forks=5,即最多5个Ansible工作进程。即便是只有6个目标节点,对于"效率"常挂嘴边的21世纪IT人来说,这么一点数量的工作进程,也显然是杯水车薪。对于Ansible来说,它的的大多数任务都是分派给目标节点去执行的,所以控制端通常比较闲暇。换句话说,控制端在浪费宝贵的资......
  • 实践1-使用 ansible 快速安装 k8s 机器
    推荐:kubeadm安装用:kubesprayopeninnewwindow二进制安装用:kubeaszopeninnewwindow此安装方式参考上面两个项目创建,如果刚开始搭建,直接使用上面的安装方式即可,可根据实际情况微调项目地址:https://github.com/clay-wangzhi/ansible-collection-k8s 相关支持支......
  • 1初识Ansible
    1Ansible简介Ansible官方文档:https://docs.ansible.com/Ansible是一个IT自动化工具。它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。Ansible用python编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如Salt,Puppet,Chef等),但它们......
  • 2 Ansible Inventory配置详解
    在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单。AnsibleInventory是包含静态Inventory和动态Inventory两部分的,静态Inventory指的是在文件中指定的主机和组,动态Inventory......
  • ansible使用手册
    Connectionmethodsanddetails—AnsibleCommunityDocumentation1buildyourinventory1.1Thedefaultlocationforthisfileis/etc/ansible/hosts.Youcanspecifyadifferentinventoryfileatthecommandlineusingthe-i<path>optionorinco......
  • Ansible 最佳实践:现代 IT 运维的利器
    Ansible最佳实践:现代IT运维的利器Ansible是一种开源的IT自动化工具,通过SSH协议实现远程节点和管理节点之间的通信,适用于配置管理、应用程序部署、任务自动化等多个场景。本文将介绍Ansible的基本架构、主要功能以及最佳实践,帮助企业更高效地进行IT运维管理。......
  • ANSIBLE
    ANSIBLE云计算核心职能搭建平台架构日常运营保障性能效率优化相关工具代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion构建工具:maven、Ant、Gradle自动部署:Capistrano、CodeDeploy持续集成(CI):Jenkins、Travis配置管理:Ansible、SaltStack、Chef、Puppet容器:Docke......
  • 自动化部署ansible
    ANSIBLE自动化部署安装ANSIBLE########yum源安装###############[[email protected]]#vimCentOS-Base.repo#加入epel源[epel]name=gnbaseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64https://mirrors.cloud.tencent.com/epel/$releasever/x86_6......
  • Playbook条件语句
    目录Playbook条件语句1.when的基本使用1.1when的基本示例1.2比较运算符1.3比较运算符示例1.4逻辑运算符1.5逻辑运算符示例2.条件判断与block2.1block示例2.2rescue2.3alwaysPlaybook条件语句在有的时候play会依赖于变量,fact或者前一个任务的执行结果,或者基于上一个任......