Twigのforまとめ
Twigでループ処理を書きたいときに使う for
は結構いろんな書き方ができるのでまとめとく。
とは言っても、ドキュメント見れば全部載ってるけども。
連続した値を扱いたいとき
https://twig.symfony.com/doc/2.x/tags/for.html#for
..
演算子を使うと便利。
{% for i in 0..10 %} {{ i }}, {% endfor %} {# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, #} {% for i in 'a'..'z' %} {{ i }}, {% endfor %} {# a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, #} {% for i in 'a'|upper..'z'|upper %} {{ i }}, {% endfor %} {# A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, #}
ループ内で使える変数
https://twig.symfony.com/doc/2.x/tags/for.html#the-loop-variable
{% for i in '0'..'10' %} {{ loop.index }} {% endfor %} {# 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, #} {% for i in '0'..'10' %} {{ loop.index0 }} {% endfor %} {# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, #} {% for i in '0'..'10' %} {{ loop.revindex }} {% endfor %} {# 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, #} {% for i in '0'..'10' %} {{ loop.revindex0 }} {% endfor %} {# 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, #} {# 最初の要素のときだけtrue #} {% for i in '0'..'10' %} {{ loop.first }}, {% endfor %} {# 1, , , , , , , , , , , #} {# 最後の要素のときだけtrue #} {% for i in '0'..'10' %} {{ loop.last }}, {% endfor %} {# , , , , , , , , , , 1, #} {# 配列の長さを返す #} {% for i in '0'..'10' %} {{ loop.length }}, {% endfor %} {# 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, #}
loop.parent
はちょっとわかりづらい。
ループがネストしている場合に外側のループにアクセスできる。
{% for i in 0..3 %} {% for j in 'a'..'c' %} [{{ loop.parent.loop.index }}, {{ loop.index }}]<br> {% endfor %} {% endfor %} {# [1, 1] [1, 2] [1, 3] [2, 1] [2, 2] [2, 3] [3, 1] [3, 2] [3, 3] [4, 1] [4, 2] [4, 3] #}
条件を指定してループをまわす
https://twig.symfony.com/doc/2.x/tags/for.html#adding-a-condition
if
を使うことで条件を指定できる。
{% for i in 0..10 if i % 2 == 0 %} {{ i }}, {% endfor %} {# 0, 2, 4, 6, 8, 10, #}
そのほかのおべんりなやつ
else
を使うと空配列だったときの処理が書ける。
{% for i in [] %} {{ i }} {% else %} empty! {% endfor %} {# empty! #}
キーを取得したいとき。
キーだけの取得もできるけど大抵は値とセットで欲しい。
{% for key in ['taro', 'ichiro', 'hanako']|keys %} {{ key }} {% endfor %} {# 0 1 2 #} {% for key, value in ['taro', 'ichiro', 'hanako'] %} {{ key }}:{{ value }} {% endfor %} {# 0:taro 1:ichiro 2:hanako #}
slice
とかと組み合わせたり。
{% for key, value in ['太郎', '次郎', '三郎', '四郎', '五郎']|slice(2, 4) %} {{ key }}:{{ value }} {% endfor %} {# 0:三郎 1:四郎 2:五郎 #}
ざっとまとめたけど色々できるな。。
ディスク使用量を確認するコマンド
ディスク容量のアラートが出たときに。
まず最初にやってみよう的な df -h
。
# df -h
さらにディレクトリ別に使用量を確認したいときは du
。
# du -h -s /* | sort -nr # du -s /var/* | sort -nr
sort
を使って使用量の降順で並べ替えてやるとわかりやすい。
そして指定したサイズよりも大きいファイルを見つけるときに find
を使う。
# find /var/log -size +1024k -ls | sort -nr
Chef ClientだけでNginxをインストールして起動するまでの最小限の流れ
Chef DKのインストールはしない。
当然 chef generate
や knife cookbook create
も使わない。
Chef ClientだけでNginxをインストールして起動までやる。
今回はAmazon Linux 2のEC2インスタンスを用意した。
まずはChef Clientのインストール。
$ sudo yum update -y $ wget https://packages.chef.io/files/stable/chef/13.7.16/el/7/chef-13.7.16-1.el7.x86_64.rpm $ sudo rpm -ivh chef-13.7.16-1.el7.x86_64.rpm $ chef-client --version $ rm chef-13.7.16-1.el7.x86_64.rpm
Chef Clientのインストールが終わったらRecipeを手動で作っていく。
先にディレクトリを準備。
$ mkdir chef-example-repository $ cd chef-example-repository $ mkdir -p cookbooks/nginx/recipes $ mkdir roles
Roleの作成。
$ vim roles/web.json
こんな感じで記述。
{ "run_list": [ "recipe[nginx]" ] }
Recipeの作成。
$ vim cookbooks/nginx/recipes/default.rb
Amazon Linux 2は最初の状態だとNginxがyumでインストールできない。
なので、ここでは bash
リソースを使って code
に直接コマンドを書く。
bash 'install nginx' do code 'sudo amazon-linux-extras install nginx1.12' not_if { File.exists?("/usr/sbin/nginx") } end bash 'start nginx' do code <<-EOC sudo systemctl start nginx.service sudo systemctl enable nginx.service EOC end
作成できたら --why-run
で実行内容を確認して、問題なければ実行。
$ chef-client -z -j roles/web.json --why-run $ chef-client -z -j roles/web.json
Nginxの起動を確認できればOK。
$ systemctl status nginx.service
$ systemctl is-enabled nginx.service