Rundeck の実行内容を Slack に通知する方法

結論

プラグインを入れます。以下のフォークプロダクトが Webhook を用いるプラグインで良い感じなので、こちらを利用しましょう。

具体的な方法

1. インストール

libext というディレクトリの配下に、releases から落としてきた jar ファイルを置けば OK です。libext に移動して wget するのが手軽でいいのではないでしょうか。

インストール後に Rundeck の再起動は不要です。

2. Project Configuration File の編集(行の追加)

ドキュメントにも記載があるように この設定は 必須 です。

メニューから PROJECT SETTINGS -> Edit Configuration... とたどります。その後に右上の Edit Configuration File のリンクをたどります。すると設定ファイルを編集するエディタが立ち上がりますので、以下の行を追加します。

project.plugin.Notification.SlackNotification.webhook_url=https://hooks.slack.com/services/FOO/BAR/hogefuga

繰り返しますがこの設定は 必須 です。Webhook のアドレスや、ポストするチャンネルは上書きはできるのですが、この設定あっての上書きです*1

補足

*1:ここに少々ハマりました

*2:これ最高にハマりました

*3:確証は持てないのですが……

go get しても GOPATH 以下に入らないで ~/go 以下に入ってしまう場合(goenv 使用時)

結論

以下の行が .bashrc.zshrc などに書かれていませんでした。

export PATH="$GOROOT/bin:$PATH"

状況

printenv | grep GO の結果は以下のように問題ないように見えましたが、go get すると ~/go/1.12.1 配下に入ってしまっていました。

GOENV_ROOT=/Users/FOOBAR/.goenv
GOENV_SHELL=zsh
GOROOT=/Users/FOOBAR/.goenv/versions/1.12.1
GOPATH=/Users/FOOBAR/.go

そこで冒頭の一行を以下のように含ませることで、go get した結果 GOPATH 以下に入るようになりました。

export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$GOPATH/bin:$PATH"

補足

  • 環境は Mac + goenv です
  • $GOROOT を明示的に指定してはいません

ドキュメント

サイトをそのままローカルに保存する方法(wget を用いる)

一番最初に注意点を1つ

保存したサイトが外部CDNなどを利用している場合は、wgetしたファイルをローカルファイルシステム上ではなく、Webサーバ経由で閲覧しないと部分的に正しく表示されません。file:// としてWebブラウザで開いた場合は正しく動作しないからです。

動機

方法

wget を用います。オプションがやたらめったら多いので、どのオプションを使うのかを検討します。末尾に 1.20.1--help で表示されるヘルプを添付しますので(長いですが)ご参照ください。

追記結論: 結局、こちらのコマンドのほうが良さそう

  • もろもろハマった結果、@suin さんが示しているコマンド(をベースにして)が手っ取り早そうです……
    • 取得漏れも見た感じなかったので……
    • で、できたコマンドが次のとおりです
$ wget --mirror --page-requisites --span-hosts --show-progress --no-parent --convert-links --adjust-extension --execute robots=off --verbose --output-file=wget_log.log --tries=2 --no-if-modified-since --random-wait --waitretry=5 --backup-converted --domain=example.com https://foobar.example.com/

最初に出した結論

結論ですが、私の場合は以下のようなコマンドになりました。

$ wget --output-file=wget_log.log --verbose --tries=2 --timestamping --no-if-modified-since --random-wait --waitretry=5 --adjust-extension --referer="http://www.geocities.co.jp/" --recursive --level=5 --convert-links --backup-converted --page-requisites "http://www.geocities.co.jp/FOOBAR/"

ひとつひとつ説明します。

続きを読む

Ruby で ブロック引数 を引数として受け取るように定義した場合(& を使って定義した場合)には、その引数をカッコでくくって与えるとエラーになる

結論

標題のとおりなのですが、実際の例を見るのが早いかと思います。

1. まずはメソッドを定義する

  • foobar というメソッドを定義します
  • 引数として「ブロック引数*1」を受け取るように定義します
def foobar(&block_hikisu)
  block_hikisu.call
end

2-1. OKな場合: foobar メソッドの引数として { puts 'Hello, Block Hikisu!' } を与えて実行する場合

  • この場合は OK です
> foobar { puts 'Hello, Block Hikisu!' }
Hello, Block Hikisu!

2-2. NGな場合: 2-1. と同様に foobar メソッドの引数として { puts 'Hello, Block Hikisu!' } を与えるけれども、カッコつきで与えて実行する場合

  • この場合はエラーが出ます
> foobar ({ puts 'Hello, Block Hikisu!' })
SyntaxError: unexpected '}', expecting end-of-input
...oobar ({ puts 'Hello, Block Hikisu!' })

補足

&block_hikisu の形で引数を定義した場合は、引数として Procオブジェクトを与えてもエラーとなります。

*1:ここでは &block_hikisu

ConoHa の Ubuntu 18.04 を Itamae でプロビジョニングする際に locale を設定してないと git コマンドでコケる

状況

以下のようになります*1

(省略)
DEBUG :         Executing `sudo -H -u foobar -- /bin/sh -c cd\ \~foobar\ \;\ cd\ /home/foobar/.rbenv\ \&\&\ git\ checkout\ bash:\\\ warning:\\\ setlocale:\\\ LC_ALL:\\\ cannot\\\ change\\\ locale\\\ \\\(ja_JP.UTF-8\\\)\''
'\'483e7f9bdf618ad25af6cab566982e1165274d99\ -b\ deploy`...
DEBUG :           stdout | bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
DEBUG :           stdout | fatal: 'bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
DEBUG :           stdout | 483e7f9bdf618ad25af6cab566982e1165274d99' is not a commit and a branch 'deploy' cannot be created from it
(省略)

どうするか

こんな感じのレシピを予め実行すれば OK でした。sudo はパスなしで実行できる環境*2です。

%w(language-pack-ja language-pack-ja-base).each do |pkg|
  package pkg do
    action :install
  end
end

execute 'update locale to ja' do
  command 'sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"'
end

execute 'Change Timezone to Asia/Tokyo' do
  command 'sudo timedatectl set-timezone Asia/Tokyo'
end

execute '. /etc/default/locale' do
  action :run
end

*1:おま環の疑いはあります

*2:ConoHa だと root

Powered by はてなブログ