Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

BashでChefっぽいこと


photo by Éole

Itamae便利説

Chefっぽいことと言っておきながら、軽量ChefのItamaeしか触ったことありません。 しかし便利ですよね。

Itamae - Infra as Code 現状確認会 // Speaker Deck

しかしChefにせよ、itamaeにせよ、環境を入れないと使えません。 とくにローカルの環境を構築したいとき、Rubyの環境やらgemやらを入れる必要があるので、本末転倒感ある。 そこでBashのChefっぽいのを試作してみした。

Bachef - ChefっぽいBash

ItamaeやChefのいいところは、RubysでDSLを書くことで、読みやすく管理しやすい点だと思います。 そこでBashをつかってDSLっぽいことにも挑戦してみました。

#!/bin/bash
 
source 'bachef.sh'
 
remote_file '/etc/nginx/nginx.conf' $(
  source 'templates/nginx.conf'
  mode '755'
)
 
remote_file '/etc/ssh/sshd_config' $(
  source 'templates/nginx.conf'
  mode '700'
  owner 'root'
  group 'root'
)

Chefっぽいし、DSLっぽいし、いい感じに。 実行結果はこんな感じ。

$ ./test.sh
remote_file[/etc/nginx/nginx.conf]
  - cp templates/nginx.conf /etc/nginx/nginx.conf
  - chmod 755 /etc/nginx/nginx.conf
remote_file[/etc/ssh/sshd_config]
  - cp templates/nginx.conf /etc/ssh/sshd_config
  - chmod 700 /etc/ssh/sshd_config
  - chown root /etc/ssh/sshd_config
  - chgrp root /etc/ssh/sshd_config

Gist貼っておきます

Gist貼っておきます。このコード、まだechoするだけで実ファイルには手を出しません。

https://gist.github.com/ueokande/0b37a673b63781e65ed3