Skip to content

Instantly share code, notes, and snippets.

@hryk
Created August 9, 2012 13:35
Show Gist options
  • Select an option

  • Save hryk/3304215 to your computer and use it in GitHub Desktop.

Select an option

Save hryk/3304215 to your computer and use it in GitHub Desktop.
nova dns-create-public-domain --project hogeproject hoge.com
| dns_domains | CREATE TABLE `dns_domains` (
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`deleted` tinyint(1) DEFAULT NULL,
`domain` varchar(512) CHARACTER SET latin1 NOT NULL,
`scope` varchar(255) DEFAULT NULL,
`availability_zone` varchar(255) DEFAULT NULL,
`project_id` varchar(255) DEFAULT NULL,
PRIMARY KEY (`domain`),
KEY `project_id` (`project_id`),
CONSTRAINT `dns_domains_ibfk_1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Cannot add or update a child row: a foreign key constraint fails
(`nova`.`dns_domains`, CONSTRAINT `dns_domains_ibfk_1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`))')
INSERT INTO dns_domains (created_at,
updated_at,
deleted_at,
deleted,
domain,
scope,
availability_zone,
project_id) VALUES
(datetime.datetime(),
None,
None,
0,
'hoge.com',
'public',
None,
'hogeproject')
novaのprojectsテーブルにプロジェクトが入ってないのが原因だった。OpenStack Dashboardで使われてるProjectはkeystoneテーブルのtenantを見ていて、普通にセットアップしたつもりだけどnova.projectsは空になってた。dns_domainsにはproject_idがprojects.idを見ている事を保証するconstraintがついているので失敗する。
そもそもnovaのprojectが何に使われているかいまいちわからない。いまいちわからなかった人もいるみたいで、MLにスレッドがたってた。
https://lists.launchpad.net/openstack/msg02966.html
Keystoneはユーザが1つのテナントに紐づけられている事を仮定しているけれど、これはnovaのユーザが複数のプロジェクトに所属できることとコンフリクトしてるような気がするけどどっちが正しいようになる?
https://lists.launchpad.net/openstack/msg03158.html
ゴールはnovaのユースケース(ユーザが複数プロジェクトに所属できる)をサポートすることだよー。
けどこれだと"暗黙のロール"問題が起こってしまうんだよね。なんかいい方法ない?
その後はえんえんTenantの話してる。結局novaのprojectが何に使われているかよくわからなかった。
https://bugs.launchpad.net/nova/+bug/922465
バグとして上がってる
nova clientが"Project ID"っていってるものは結局KeystoneのTenant Nameじゃないか!
nova clientはTenantNameを使ってkeystoneからtokenを受け取っている。novaのproject nameがtenant nameに対応しているのは混乱する。
回答に上げられていたBluePrint
http://wiki.openstack.org/CLIAuth
これはCLI経由の認証に関する提案。まだドラフト段階。
で、結局ProjectIDってなんなの?必要なの?
computeのドキュメントにはこうある。
http://docs.openstack.org/trunk/openstack-compute/admin/content/users-and-projects.html
Earlier versions of OpenStack used the term "project" instead of "tenant".
Because of this legacy terminology, some command-line tools use --project_id
when a tenant ID is expected.
これを見る限りprojectはdeprecatedな扱いのように見える。ただ、まだ残ってるって事は何か理由があって残ってるっぽい。
http://docs.openstack.org/developer/nova/runnova/managing.projects.html
Projects are isolated resource containers forming the principal organizational
structure within Nova. They consist of a separate vlan, volumes, instances,
images, keys, and users.
どうやらnova.dns_domainsがよくわからないconstraintをつけているのが悪いみたい。instancesテーブルにはuser_id,
project_idというカラムがあるけど、これはkeystone.usersを参照している。ここは1つconstraintを外してinstanceテーブルのようにuser_idもproject_idもkeystoneを見るようにしたほうがよさそう。ところでnova
listみたいなコマンドはどうしているのか。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment