Day 25:Ansible Playbook

昨天有成功使用 Ansible 执行一个 echo 印出东西了,这在 Ansible 里面称作 ad hoc 模式,可以用来执行单个 task。不过在实际的应用场景里面,我们应该都会需要执行多个命令,才能完成整个流程,这种时候就是 playbook 派上用场的时候了。

简介

playbook 由多个 "play" 组成,每个 play 表示我们预计完成的「目标」,并且里面会包一些 task,也就是为了达成目标所需要做的事情。一个简单的范例如下面所示(取自官方文件)。

---
- name: Update web servers
  hosts: webservers
  remote_user: root

  tasks:
  - name: Ensure apache is at the latest version
    ansible.builtin.yum:
      name: httpd
      state: latest
  - name: Write the apache config file
    ansible.builtin.template:
      src: /srv/httpd.j2
      dest: /etc/httpd.conf

- name: Update db servers
  hosts: databases
  remote_user: root

  tasks:
  - name: Ensure postgresql is at the latest version
    ansible.builtin.yum:
      name: postgresql
      state: latest
  - name: Ensure that postgresql is started
    ansible.builtin.service:
      name: postgresql
      state: started

最上层的 Update web serversUpdate db servers 就是这份 playbook 包含的两个 play,底下透过 hostsremote_user 分别定义需要执行这份 play 的 host,还有 ssh 连线所使用的 user。

而实际需要执行的 task 就被定义在 tasks 这个 array 里面,对於每个 task,我们也需要给他一个 name 作为识别,接下来底下就是执行了什麽操作,这边的 ansible.builtin.template 还有 ansible.builtin.service 等字串在 Ansible 里面被称作 module,是会实际给 Ansible 执行的东西,相关的文件可以在这边找到

幂等 (idempotency)

讲到 playbook,这边还要谈谈有关幂等,因为我们可能会需要执行多次 playbook(像是更新版本的时候),所以需要确保重复执行不会产生意料之外的後果。在 Ansible 中,module 通常会被设计成「让 host 变成期望的状态」而不是「执行特定的操作」,所以会比较容易实现幂等。但也不是所有的 module 都遵守这个原则,所以官方建议在使用前还是开个沙盒环境测试一下。

小结

今天翻了好多 Ansible 官方文件,对於一些名词的定义还不是很清楚,像是 module, collection, role... 之类的,或许我还要再多使用一段时间才能搞懂。


<<:  [第二十五天]从0开始的UnityAR手机游戏开发-输出32位元APP

>>:  Day-28 Breadth-First Search(BFS), 广度优先搜寻

Day01 - 系列文介绍、规划

前言 大家好,我是 Leo,这是我第一次参加 IT 铁人,心里满是期待。过去只有在 Medium (...

【Day 20】深度学习(Deep Learning)--- Tip(五)

今天要介绍的是,假设你已经在训练资料上得到很好的结果,但是在测试资料上却得到不好的结果的3种解决方法...

Day20-D3 基础图表:圆饼图

本篇大纲:选择最合适的图表、圆饼图、本次范例的画面与互动效果、pie( ) 与 arc( )、绘制...

Day 12 - Rancher 专案管理指南 - Project 概念介绍

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

Navigation (1)

经过了两个多星期後,我们终於开始进入 presentation layer 的部分。Presenta...