Day 22:Ansible

今天来讲讲 Ansible。记得我在第二天的时候曾经讲过,自动化在 SRE 里面是很重要的一环。让机械化的重复工作可以被电脑自动化的解决,可以大大地降低人力成本,也避免人为疏失造成的错误。

在目前的设计里面,NOJ 可以连接多个沙盒存在,以提高 judge 的容量。然而目前尚且需要解决的是部署沙盒的问题,目前至少需要下列步骤:

  1. ssh 连上机器
  2. clone 沙盒 repo(如果不存在的话)
  3. 更新 repo
  4. 设定或是更新 token(第一次或是有需要的时候)
  5. 把沙盒跑起来或是重开
  6. 替 NOJ 设定新的沙盒(填 token 跟 URL)

可以看到,上面的步骤还挺麻烦的,另外恼人的一点就是它还没有被自动化,因为之前需求不高,所以仅是我手动去处理。然而身为懒惰的资工系学生,这种事情真是做个一两次就受不了了,所以为了後来维护的人着想(如果有的话),应该要让它变得更简单才行。

写 shell script 或许是个做法,可以帮助我们把指令变成档案,这样每次要执行特定操作的时候,只要执行对应脚本就好了。不过这样在某些时候会有些问题,shell script 是指令式 (imperative) 的,也就是说里面描述的是我们希望执行那些动作,然而这在机器比较多或是比较复杂的环境下,因为我们难以掌握目前的状态,所以多次执行脚本可能会对系统造成一些危害。

虽然可以尽量将脚本设计成幂等的 (idempotent),让它就算被多次执行也可以达到一样的效果,不过因为需要撰写许多检查的逻辑,这通常会让脚本变得比较复杂。因此在这方面,采用宣告式 (declarative) 脚本的 Ansible 等工具便显得较有优势,可以方便撰写容易用於维运的脚本。

另外还有一点比较重要的是模组化,shell script 通常就是由维运工程师等人撰写需要执行的指令,或许有同一个人写出来的会有一定程度的重用,但是在不同人之间,就容易产生各式各样的写法。然而像是 Ansible 就有提供 Ansible Galaxy 这种 market place,可以让大家去共享一些模组,因此降低维运的门槛。

因此,这几天的目标就是让沙盒可以透过 Ansible 部署。


<<:  第15章:管理与设定网路介绍(一)

>>:  [Day 25] 中场休息 - 没信用卡的学生福星,heroku

DAY13 - 档案类的物件关系厘清(2) - Object URL, Data URI

Object URL 基本定义 Object URL(MDN定义名称) 又称 Blob URL(W3...

【我可以你也可以的Node.js】第二五篇 - 蛞蝓能不能变蜗牛 #租房是残忍的 #我好想要有个家

事情是这样的,我最近一直都在忙找新的租屋处, 不续租的原因有很多,最主要的原因是目前的房子会漏水啊...

23.unity储存文字内容(List、foreach)

今天要用List来储存记事本内的对话资料 0.和昨天一样,先准备好对话.txt 1.写脚本,先检查有...

[Day 14] Audit perfomance — 模型也要期末稽核༼ಢ_ಢ༽

It is only our conception of time that makes us c...

如何自己设计一套ERP程序 前传-写ERP之前要决定的20件事 决定ERP主要编写程序语言

第2个决定 决定ERP主要编写程序语言 理论上所有程序语言只要能读取资料库的都可拿来设计一套ERP软...