OpenStackのconfigファイルをcrudiniで操作する

OpenStackはどのプロジェクトも規模が大きく、豊富な機能が用意されている。それに伴い、各コンポーネントのconfigファイルで設定できる設定値が多種多様にある。chefやansibleによるデプロイの時に事前にconfigファイルのテンプレートを作成する方法もあるのだが、リリースごとに新規に追加される項目や破棄される項目が出てくるのでその都度テンプレートを管理するのは大変である。

本番環境のデプロイにはもちろんchefやansibleが向いているが、開発環境でさくっとOpenStackを試したいときにはcrudiniというツールを使ってconfigを操作するほうが便利である。

# INI形式ファイルとは?

Microsoft Windows のINIファイルに見られるような構造をもつ基礎的な設定ファイルである。INIファイルは、OpenStackの他にsystemdやmysqlで採用されている。なお、現在のWindows レジストリにはINI形式の拡張版が用いられている。

# crudiniとは?

上記INI形式ファイルを操作するシンプルなツールである。
詳細はこちらhttp://www.pixelbeat.org/programs/crudini/

参考
[crudini](http://www.pixelbeat.org/programs/crudini/)

# OpenStack novaのINI形式ファイルをcrudiniで操作する

Ubuntu 14.04を使ってnova-api(juno release)が動くところまでをやってみる。なお、MySQL、RabbitMQ、Keystone、Glance、Neutronも同一ホストで稼働しており、かつKeystoneのエンドポイントも設定済みであることを前提とする。

crudiniは基本的には各ディストリビューションのリポジトリにあるはず

```bash:crudiniインストール
apt-get -y install crudini
```

最新はkiloリリースだが、今回はjunoリリースを使う。

```bash:junoリポジトリを導入
apt-get -y install ubuntu-cloud-keyring
echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" "trusty-updates/juno main" > /etc/apt/sources.list.d/cloudarchive-juno.list
apt-get update && apt-get -y dist-upgrade
```

```bash:nova-apiインストール
apt-get -y install nova-api python-novaclient
```

crudiniで`/etc/nova/nova.conf`を操作する。

```bash
CONFIG_FILE=/etc/nova/nova.conf
crudini --set $CONFIG_FILE DEFAULT verbose true
crudini --set $CONFIG_FILE DEFAULT debug true
crudini --set $CONFIG_FILE DEFAULT my_ip $(hostname -i)
crudini --set $CONFIG_FILE DEFAULT auth_strategy keystone
crudini --set $CONFIG_FILE DEFAULT security_group_api neutron
crudini --set $CONFIG_FILE DEFAULT network_api_class nova.network.neutronv2.api.API
crudini --set $CONFIG_FILE DEFAULT rabbit_host $(hostname -i)
crudini --set $CONFIG_FILE DEFAULT rabbit_userid openstack
crudini --set $CONFIG_FILE DEFAULT rabbit_password openstack
crudini --set $CONFIG_FILE DEFAULT linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
crudini --set $CONFIG_FILE DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
crudini --set $CONFIG_FILE glance host $(hostname -i)
crudini --set $CONFIG_FILE database connection mysql://nova:nova@$(hostname -i)/nova
crudini --set $CONFIG_FILE keystone_authtoken auth_uri http://$(hostname -i):5000/v2.0
crudini --set $CONFIG_FILE keystone_authtoken identity_uri http://$(hostname -i):35357
crudini --set $CONFIG_FILE keystone_authtoken admin_tenant_name service
crudini --set $CONFIG_FILE keystone_authtoken admin_user nova
crudini --set $CONFIG_FILE keystone_authtoken admin_password nova
crudini --set $CONFIG_FILE neutron url http://$(hostname -i):9696
crudini --set $CONFIG_FILE neutron auth_strategy keystone
crudini --set $CONFIG_FILE neutron admin_auth_url http://$(hostname -i):35357/v2.0
crudini --set $CONFIG_FILE neutron admin_tenant_name service
crudini --set $CONFIG_FILE neutron admin_username neutron
crudini --set $CONFIG_FILE neutron admin_password neutron
crudini --set $CONFIG_FILE neutron service_metadata_proxy true
```

```bash:データベースのテーブル作成
su -s /bin/sh -c "nova-manage db sync" nova
```

```bash:nova-api再起動
service nova-api restart
```

MySQLを利用する前提なのでsqliteのファイルを削除する。

```bash:sqlite削除
rm /var/lib/nova/nova.sqlite
```

chefやansibleを使うほど仰々しくなく、かつviで編集するのもめんどくさいって時にcrudiniを使うという選択肢もある。

なお、RedHat系OSにはRDOリポジトリにopenstack-utilsというパッケージがあり、内部的にcrudiniを利用している。