首页 > 其他分享 >Ansible playbook

Ansible playbook

时间:2024-06-20 16:12:58浏览次数:13  
标签:name ansible 192.168 yaml Ansible playbook 执行

目录

Playbook(剧本)

我们之前执行ansble是通过ad-hoc的方式来执行的,这样执行的好处就是我的任务只有1个的时候非常的方便,坏处那就是一次只能执行一个任务

如果我现在有这样一种场景:我要根据我上一个任务执行的结果来决定下一个任务是否执行,这个ad-hoc能做到吗?是不可以的,我们只能自行判断他是否执行成功,是否要继续下一个任务

说更直白一点,playbook就是一系列ad-hoc的集合,你可以把你想执行的所有任务都写到里面去,他会从上至下的执行,并且playbook还有很多ad-hoc做不到的

1. yaml

playbook使用yaml语法来编写

1.1 yaml的语法规则

  1. 大小写敏感
  2. 使用缩进标识层级关系
  3. 使用缩进时必须是空格,不能是Tab键
  4. 缩进的空格数不重要,只要同一层级保持一致就可以

1.2 yaml的数据类型

  1. 纯量:单个的,已经是最小个体,无法再拆分

  2. 数组:一组按次序排列的值,数组元素使用 短横线开头

    - var01

    - var02

  3. 字典:采用键值对的方式

1.3 yaml的示例

基本信息:
  名称: 张三
  年龄: 30
  性别: 男

地址:
  国家: 中国
  省份: 广东
  城市: 广州
  街道: 中山路
  邮编: 510000

联系方式:
  电话: 
    - 类型: 手机
      号码: 13800000000
    - 类型: 工作
      号码: 020-88888888
  邮箱: [email protected]

技能:
  编程语言:
    - Python
    - Java
    - JavaScript
  工具:
    - Git

这就是一个yaml语法的示例了

2. ansible-playbook

2.1 playbook入门

我们现在来编写一个简单的playbook

[ansible@master ansible]$ vim first_playbook.yaml
- name: This is first ansible playbook
  hosts: all
  tasks:
    - name: This is the First task
      shell: whoami

这就是一个简单的playbook了,我们先来逐行分析

  • 第一行 - name: 代表这个play的名字,一个playbook里面可以包含多个play
  • hosts:指定要运行的主机
  • tasks:指定任务
  • 第四行 - name :指定这个任务的名字
  • shell:这个是我们要使用的模块名
  • whoami:是我们需要执行的命令

2.2 执行playbook

我们写完剧本之后如何去执行呢?

[ansible@master ansible]$ ansible-playbook first_playbook.yaml

PLAY [This is first ansible playbook] ******************************************

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

TASK [This is the First task] **************************************************
changed: [192.168.200.210]

PLAY RECAP *********************************************************************
192.168.200.210            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

使用ansible-playbook 然后去指定这个剧本就可以执行他了,剧本执行完之后下面是有汇总的,ok表示没有发生更改,changed表示命令执行成功并且主机发生了更改

2.3 使用playbook安装软件

- name: Install sotfware
  hosts: all
  tasks:
    - name: start install
      yum:
        name: redis
        state: present

去执行这个剧本

[ansible@master ansible]$ ansible-playbook second.yaml 

PLAY [Install sotfware] ********************************************************

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

TASK [start install] ***********************************************************
changed: [192.168.200.210]

PLAY RECAP *********************************************************************
192.168.200.210            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

如果你自己正在操作的话你就能很直观的看见OK的部分是绿色的,发生改变的地方是黄色的

修改这个剧本,让redis开机自启

[ansible@master ansible]$ vim second.yaml 
- name: Install sotfware
  hosts: all
  tasks:
    - name: start install
      yum:
        name: redis
        state: present
    - name: enabled redis
      systemd:
        name: redis
        enabled: yes
        state: started

注意了,这里有2个任务了,所以任务名前面也是需要加上短横线的

[ansible@master ansible]$ ansible-playbook second.yaml 

PLAY [Install sotfware] ********************************************************

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

TASK [start install] ***********************************************************
ok: [192.168.200.210]

TASK [enabled redis] ***********************************************************
changed: [192.168.200.210]

PLAY RECAP *********************************************************************
192.168.200.210            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

我们可以看见,start install 这个任务现在变成了 ok ,之前执行的时候都是changed的,这是因为ansible的模块具有幂等性,也就说无论你执行多少次,他只有第一次执行的时候会发生改变,你后续再去执行,他一看,你要安装的软件我的主机上有,那我就不执行这个了

3. 更多示例

再多写几个yaml的示例大家应该也就能看懂了

---
- name: Ansible Playbook Example for Creating Users and Groups
  hosts: all
  become: yes
  tasks:
    - name: Create the first group
      group:
        name: group1
        state: present

    - name: Create the second group
      group:
        name: group2
        state: present

    - name: Create a user and add to both groups
      user:
        name: demo_user
        groups: group1,group2
        append: yes
        state: present

这个剧本就是 使用group模块创建了group1和group2,并且使用user模块创建了一个用户,并且group1和group2作为这个用户的附属组

- name: Ansible Playbook Example for Package Installation and Configuration
  hosts: all
  tasks:
    - name: Install nginx package
      package:
        name: nginx
        state: present

    - name: Copy nginx configuration file
      copy:
        src: /path/to/local/nginx.conf
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: '0644'

    - name: Restart nginx service
      service:
        name: nginx
        state: restarted

这个剧本就是说先安装一个nginx,然后使用copy模块将本地的文件发送到远程主机,最后重启nginx服务

多写一点就熟练了
我就说一个事:剧本里面不要按Tab键,虽然现在最新版的vim可以将你的tab转换为空格,但是我也不建议按tab

标签:name,ansible,192.168,yaml,Ansible,playbook,执行
From: https://www.cnblogs.com/fsdstudy/p/18258859

相关文章

  • Ansible的常用模块
    目录ansible常用模块1.file模块1.1file模块的选项1.2file模块的使用1.2.1使用file模块在远程主机创建文件1.2.2创建目录1.2.3删除文件/目录2.copy模块2.1copy模块的选项2.2copy模块的使用3.yum_repository模块3.1yum_repository的选项3.2yum_repository的使用4.yum......
  • Ansible笔记
    1、Ansible基本介绍Ansible是一个自动化的管理IT资源的工具。1)Ansible基本介绍Ansible功能Ansbile优点Ansible缺点系统环境配置无客户的效率低、易挂起安装仁济推送式持续集成丰富的module热回滚基于YAML的Playbook2)Ansible与其他软件的对比......
  • 10、ansible-YAML-非标记语言-剧本的编写-.yaml -剧本执行ansible-playbook-handlers
     ============================================================剧本的编写==================================================通过YAML编写一个剧本,完成web的部署,配置,启动的全过程1、先将目标主机的网站服务卸载ansibleall-myum-a'name=httpdstate=removed'-o·a......
  • 9、ansible-Ad-Hoc-点对点模式--m shell-shell模块(执行的就是linux命令)
    作用:可以执行任何有效的shell命令,包括管道、重定向和其他shell特性。该模块将在远程主机上启动一个shell,然后在该shell中执行命令。执行结果可以作为任务的输出返回,也可以将其保存到文件或变量中供后续任务使用。请注意,与其他模块相比,shell模块的执行效率较低,因为它需要在......
  • 13、ansible-shell、command、script使用
    command模块简介command模块用于在给的的节点上运行系统命令,比如echohello。它不会通过shell处理命令,因此不支持像$HOME这样的变量和,以及<, >, |, ;和&等都是无效的。也就是在command模块中无法使用管道符。模块参数名称必选备注chdirno运行command命令前......
  • Ansible(ubuntu)
    1.安装Ansiblesudoaptupdatesudoaptinstallansible2.配置ansible主机1.将本机的密钥添加到目标服务器上2.追加公钥echo'$(cat~/.ssh/id_rsa.pub)'>>~/.ssh/authorized_keys远程追加sshusername@remote_host"echo'$(cat~/.ssh/id_rsa.pub)'>>~......
  • Linux——ansible的应用
    要让ansible管理业务里的主机1.得先知道,有哪些主机  用IP地址,用主机名2.知道了有哪些主机以后,精细、细分管理  主机要用某些办法,分组管理在ansible里,要用一个东西:清单->inventoryinventory这个东西的存在形式ansible是为了人方便使用,为了简单所以,inventory,就是个......
  • Ansible离线部署 之 Zabbix
    Ansible介绍Ansible是一个自动化平台,用于IT自动化,如配置管理、应用部署、任务自动化等。Ansible使用SSH来连接到远程机器,并执行预定义的任务。Ansible的主要特点是其简单性、易用性和强大的功能集。以下是Ansible的一些关键特性和优点:无需代理:Ansible不需要在远程......
  • Playbook编写循环
     目录基本循环使用with_items高级循环使用with_dict使用with_list使用with_fileglob使用with_nested注册变量与循环循环中注册变量循环控制与条件使用when条件使用loop_control设置标签使用loop关键字使用loop和复杂数据结构在AnsiblePlaybook中,编写循环(lo......
  • ansible高级操作 serial滚动更新
    1.异步操作和轮询默认情况下,剧本中的任务会一直处于打开状态,直到任务在每个节点上完成。这样可以会造成阻塞和超时,因此我们可以使用异步模式一次运行所有任务,然后轮询直到它们完成为止。Ansible本身就是采用的多线程来操作多个主机节点,可以使用-P来异步操作。现在所说的异步操作......