Invokeを少し触ってみた
Invokeとは?
Python製のタスクランナーだそう。make, rake, gulpみたいな。
↓みたいにタスクを書いて、invoke clean build
みたいに実行できると。
from invoke import run, task @task def clean(docs=False, bytecode=False, extra=''): patterns = ['build'] if docs: patterns.append('docs/_build') if bytecode: patterns.append('**/*.pyc') if extra: patterns.append(extra) for pattern in patterns: run("rm -rf %s" % pattern) @task def build(docs=False): run("python setup.py build") if docs: run("sphinx-build docs docs/_build")
どこで使われている?
Fabric(https://github.com/fabric/fabric/)で。
http://www.pyinvoke.org/faq.html#why-was-invoke-split-off-from-the-fabric-project
↑を読むと、Fabricが仕事し過ぎなため、ライブラリを分割した模様。
サンプルは?
非常にシンプルで直感的に使えるのですが、事例が少ない。。
日本語ではこちらのサイトくらい www.hexacosa.net
一番いいのはFabricの事例と、作者のタスク集みたいなのを見ること。
実戦で使ってみる?
ちょっと悩む。
makeとかrakeで何とかならんこともないし。
While fully usable, Invoke is still pre-1.0 software and has no backwards compatibility
なので、API変更もあり得るし。
どうしてもPythonで全部統一したい人は使ってみたらよいのではないでしょうか・・・
Google Cloud DNSで設定ファイルをimport/exportする
Cloud Deployment Manager にはGoogle Cloud DNSを設定する機能がないっぽいですが、代わりにgcloud dns
コマンドが使えそうです。
コマンド例
エクスポート
↓のコマンドを打つと
gcloud dns record-sets export -z example-com-zone example-com-zone.yml
↓のようなYAML形式で出力されます。
--- kind: dns#resourceRecordSet name: example.com. rrdatas: - ns-cloud-c1.googledomains.com. - ns-cloud-c2.googledomains.com. - ns-cloud-c3.googledomains.com. - ns-cloud-c4.googledomains.com. ttl: 21600 type: NS --- kind: dns#resourceRecordSet name: example.com. rrdatas: - ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 3 21600 3600 1209600 300 ttl: 21600 type: SOA
インポート
↓のコマンドでYAML形式のファイルをインポートできます。
gcloud dns record-sets import --delete-all-existing -z example-com-zone example-com-zone.yml
ポイント
- インポート時には
--delete-all-existing
を指定しないとダメなよう - 書式にエラーがある場合は更新されないので、中途半端な状態にならないかは気にしなくて大丈夫なよう
Slackで絵文字をskin-toneを変えた絵文字全てをクリップボードにコピー
ESLintで拡張子をみてテキストをゴニョゴニョできる話
久しぶりにESLintの話題を。
公式ドキュメントに書いてあるのですが、ESLintプラグインでは拡張子毎にprocessorを設定できるそう。
http://eslint.org/docs/developer-guide/working-with-plugins#processors-in-plugins
processor is 何?
このeslint-plugin-markdownがわかりやすいかもしれません。
markdownからJavaScriptのコード部分だけを抜き出し、lintできるというプラグインです。
↓のpreprocess
という関数の部分を見ればわかりますが、markdownのテキストからJavaScriptのコード部分だけを抜き出すということをやっています。
https://github.com/eslint/eslint-plugin-markdown/blob/f97e0c01beb7cc6dad21d828ea80e4fbe55317af/lib/processor.js#L43
抜き出したコード部分を配列で返せば、ESLint本体側でそれらをlintしてくれる挙動になっています。
※ちなみにmarkdownをパースする箇所では、昨日の記事で書いたプレゼンテーションツールのremarkが使われていましたw
どんな場合に使えるか?
ぱっとプラグインが見つからなかったですが、HTMLファイルの
<script>〜</script>
の中身のチェックにも使えそう
→ ありました eslint-plugin-html - npm (mysticateaさん、ありがとうございます)テキストの中身をみて、pluginをOFFにするとか (eslint-plugin-disable がまさにそれ)
/* eslint no-var: 0 */
みたいなコメントを一行目に強引につけて、ファイルの中身に応じて、動的にルールをON/OFFする(ES2015とES5が混じっている環境で使いたい)
など。
まとめ
使いたい(使うかも)
Github Pages + Markdownで楽々プレゼン生活
の記事の内容ほぼままなのですが、
自分的にはライフチェインジングな発見だったのでご紹介。
Github Pagesとremarkを組み合わせるとプレゼン資料作成が捗るよというお話です。
Github Pagesとは?
みなさん知っていると思いますが、Github上で、yukidarake.github.io
みたいなリポジトリを作ると、https://yukidarake.github.io/にWebページを公開できるという機能です。
が、上記のようなユーザ/オーガニゼーションだけでなく、gh-pages
ブランチを作成すれば、プロジェクト毎にも作れるそう!(これ知らなかった)
その場合、URLは https://yukidarake.github.io/presentations みたいになります。
詳しくは↓をご覧ください。
remarkとは?
HTML and CSSを使って、ブラウザ上で表示できる(よくありそうな)プレゼンテーション用ツールです。
が、このremarkの良い所は、スライドの内容を別ファイルにmarkdownで書くことができるということ。
さらに、一枚、index.htmlを準備し、パラメータでスライド用ファイルを読み分けるよう細工すれば、都度HTMLやCSSを触る必要ありません!
では、Github Pagesとremarkを組み合わせてみましょう
で、こんな感じになりました。
画像キャプチャ
https://yukidarake.github.io/presentations/?my-first-presentation
TIPS
- Githubのリポジトリの設定より、デフォルトブランチをgh-pagesに変更しておくとよい
- README.mdを各資料へのインデックスページとして利用するとよい https://yukidarake.github.io/presentations/
- ローカルでの動作確認は
python -m SimpleHTTPServer 8000
が便利だった - 絵文字を使うと見栄えが良くなる(気がする)
こんなところで。
一発ネタ。ワンライナーでDynamic Inventory
このままでは使えないですが、何かのヒントにはなるかもしれません。
GCPなんかで、AnsibleのDynamic Inventoryを使う場合、↓の公式ページによれば
http://docs.ansible.com/ansible/guide_gce.html#gce-dynamic-inventory
gcp.py
でやるのをオススメしてます。
が、Dynamic Inverntoryを実現するスクリプトを作るのは結構簡単です。
↓のルールを守って、JSON形式の標準出力でホスト一覧を返せばよいと。
Developing dynamic inventory — Ansible Documentation
このレベルであれば、gcloudコマンドとjqを組み合わせればあっさりいけそうな感じ。
#!/bin/sh gcloud compute instances list --format json --project project_name \ | jq 'map(select(.tags.items | any(. == "jenkins"))) | {jenkins:{hosts:map(.networkInterfaces[0].networkIP)}}'
とかでも動くっちゃ動く(冒頭でもいってますが、このままじゃ使えませんが・・・)
上記のコマンドで「タグにjenkinsを含むホストのインターナルIPを抜き出して整形」ができるという感じです。
本日NginxでSSLの設定をする際に参考になったサイト
本日、バックエンドのJenkinsおじさんをSSLで終端させるためにNginxを設定したので、その過程のメモを。
多分、どなたかの参考にはなるはず・・・
Mozilla SSL Configuration Generatorが便利
Redirecting to ssl-config.mozilla.org...
各種ミドルウェア(Apache, Nginx, Lighttpd, HAProxy, AWS ELB )のオススメの設定が生成されます。
勉強になるし、いい感じ。
OCSP Staplingの設定がわかりづらかった
ssl_trusted_certificate
に指定する証明書のところ。
http://blog.mylibs.jp/archives/173blog.mylibs.jp
のサイトにお世話になりました。
ルート証明書とCA中間証明書を結合したファイルが必要だと。。
proxy_pass設定時の注意点
今回はNginxとJenkinsおじさんが同一インスタンスにいるので、必要なかったんですが、いちおうメモ。
要は、proxy_passでホスト名を指定する場合、下記設定をしないとDNSに変更があった際に、キャッシュが悪さして困ると。
- resoloverの設定が必要(例:
resolver 127.0.0.1;
) set
でホスト名を変数にしないといけない(例:set $api_backend "api.oreno";
)
こんなところで。