kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

Ansible Galaxyでロールの管理 - Playbookの準備 複数ロール編

前回はAnsible Galaxyのinitコマンドで作成される
testsディレクトリを利用して、ダミーのPlaybookを作りました。
しかし、それだと複数のロールを同時に開発していくときに若干不便です。

複数のロールを開発していく場合は、ダミーのPlaybook用のプロジェクトを利用します。
自分でよく使う設定などをgithubに登録してあるので、
これをcloneして使っています。

このプロジェクトのroles配下に
開発しようとしているロールのシンボリックリンクを貼って開発しています。

ディレクトリツリー

ansible-template
├── ansible.cfg
├── hosts
├── localhost.yml
├── require.yml
└── roles
    ├── role-foo -> ../../role-foo
    └── role-bar -> ../../role-bar
role-foo
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   ├── test.retry
│   └── test.yml
└── vars
    └── main.yml
role-bar
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   ├── test.retry
│   └── test.yml
└── vars
    └── main.yml

シンボリックリンクにしている理由

シンボリックリンクにしているのはAnsible Galaxyのインストールコマンドで
どのようにインストールされるかのテストをすることがあるためです。

ansible-galaxy install -rf require.yml のようにして依存解決の確認などをしたい時に
実態だと、リポジトリの内容で上書きされてしまいます。

一度痛い目にあってから、シンボリックリンクにするようにしました。

Ansible Galaxyでロールの管理 - Playbookの準備

Ansible Galaxyに登録するまでもない
もしくは登録できないようなものでも
Ansible Galaxyでロールを管理したかったので、
その手順を調べました。 今回はとりあえず、ロールを開発するためのPlaybookの準備です。

ロール開発時のPlaybook

最初、Playbookがない状態でどうやって、
ロールを開発していけばよいかとまどいました。
分かってみれば、簡単でダミーのPlaybookを作れば良かったです。

testsディレクトリを使って開発する

ひとつのロールを開発する場合は、testsディレクトリを使ったほうが
すぐに始められるので普段はそうしています。

Ansible Galaxyのinitコマンドを使うと、 testsディレクトリが作成されます。 中身にinventoryとtest.ymlがあるので、これをダミーのplaybookにします。

testsディレクトリが作成されるのはAnsibleのバージョンが2.0以降です。 2.0より前は、自分でダミーのplaybookを作成する必要があります。

tests/test.ymlに手を加える

そのままだと動かないのでちょっと編集します。
ロールのパスだけ直して上げればいいのですが、
最初はVagrant上でlocalhostを対象に実行することが多いので
connection: localも指定しています

@@ -1,5 +1,6 @@
 ---
 - hosts: localhost
+  connection: local
   remote_user: root
   roles:
-    - role-foo2
+    - ../../role-foo

実行してみる

実行してみて下記のようにできたら
あとは、ロールを開発していくだけです。

$ cd path/to/role
$ cd tests
$ ansible-playbook -i inventory test.yml

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

springの導入時にapplication.rbが見つからない

railsのplugin開発をしていてrspecの速度を上げたくてspringを導入しようとしました。 その時にエラーがでました。 その対処法をメモ。

bundle exec spring binstub rspec

上記コマンドを実行した時に下記のエラーが出ました

Spring was unable to find your config/application.rb file. Your project root was detected at /path/to/plugin, so spring looked for /path/to/plugin/config/application.rb but it doesn't exist. You can configure the root of your application by setting Spring.application_root in config/spring.rb.

pluginなのでapplication.rbはないです。 メッセージに表示されているようにconfig/spring.rb を用意します。

vi config/spring.rb

中身は下記のようなものを書きます。

Spring.application_root = './spec/dummy'
Spring.watch 'app/modles', 'lib'

で下記のように実行すれば使えました。

./spec/dummy/bin/rspec  ./spec/path/to/xxxx_spec.rb

参考

規約系ページで使う単語

自分用メモ
新しくサイトを作るにあたり
下記ページを作ることになりました。

URLとしてどのような単語がいいか迷ったので
いろいろなサービスで調べてみました。
各サービスで使っている単語を抜き出しています。

サービス 特定商取引法に基づく表記 利用規約 プライバシーポリシー
line ebiz terms rules
backlog low terms privacy
カカオトーク ebiz terms privacy
メルカリ tokutei tos privacy
awa asct terms privacy
ブクログ - term privacy
クックパッド - term privacy

CentOS5系にansible2.0のインストール

自分用メモ
ゆえあって、CentOS5系にansible2.0を入れました。
その時のメモです。 pipで普通に入れるだけで、2系が入りました。

依存ライブラリのインストール

必要ないものもありますが、
ついでにいろいろといれました。

yum install -y zlib-devel ncurses-devel sqlite-devel openssl-devel tk-devel bzip2-devel gdbm-devel readline-devel

pythonのアップデート

デフォルトで入っているものは、
2.4なので、2.7系の最新にアップデートします。
2.4も一応残しておきたいのでaltinstallします。

cd /usr/local/src/
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
tar xvzf Python-2.7.11.tgz
cd Python-2.7.11
./configure --prefix=/usr/local
make
make altinstall

makeの時点で足りないモジュールがあれば下記のように出てきます。
必要に応じて、yumで追加します。

Python build finished, but the necessary bits to build these modules were not found: _bsddb bsddb185 dl imageop sunaudiodev To find the necessary bits, look in setup.py in detect_modules() for the module's name.

パスを通して、デフォルトで2.7を使うように

シンボリックリンクでコマンド作成

cd /usr/local/bin/
ln -s -i python2.7 python
ln -s -i python2.7-config python-config

パスの編集

vi /root/.bashrc

/usr/bin/usr/local/binの優先順を入れ替えます。

- export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
+ export PATH=/bin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin

再読込して、確認

source /root/.bashrc
python -V #2.7が出てくること

pipのインストール

cd /usr/local/src/
wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py
python get-pip.py

Collecting pip /tmp/tmpDeRUDv/pip.zip/pip/vendor/requests/packages/urllib3/util/ssl.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. Downloading pip-8.0.2-py2.py3-none-any.whl (1.2MB)

100% |################################| 1.2MB 348kB/s Collecting setuptools Downloading setuptools-19.7-py2.py3-none-any.whl (472kB) 100% |################################| 475kB 749kB/s Collecting wheel Downloading wheel-0.28.0-py2.py3-none-any.whl (179kB) 100% |################################| 180kB 2.2MB/s Installing collected packages: pip, setuptools, wheel Successfully installed pip-8.0.2 setuptools-19.7 wheel-0.28.0

場所を確認

which pip
#/usr/local/bin/pip

ansibleのインストール

pip install ansible
ansible --version
#ansible 2.0.0.2

参考

ckeditorでデフォルトをアップロードタブに

自分用メモ
ckeditorで、画像挿入ボタンをクリックした時に
デフォルトのタブをアップロードタブに変更する方法

CKEDITOR.on('dialogDefinition', function (event) {
              var dialogName = event.data.name;
              var dialog = event.data.definition.dialog;

              if (dialogName == 'image') {
                  dialog.on('show', function () {
                      this.selectPage('Upload');
                  });
              }
          });

参考

CentOS6.5にnodejsの4系をインストールするときにエラー

nodebrewを使って、CentOS6.5にnodejsの4系を入れようとしたところ
下記が表示されてインストールに失敗しました。

WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)

nodebrew自体は、この方法であっさりインストールできました。 しかし、

nodebrew install stable

を実行したところで失敗します。
g++のバージョンが低すぎるようです。
いろいろと試行錯誤した挙句、
g++のバージョンを上げることで解決しました。

こちらを参考にバージョンアップします。
その後再度、

nodebrew install stable

を実行したらうまくいきました。