openstack congress and datalog (japanese)
TRANSCRIPT
© 2015 VMware Inc. All rights reserved.
OpenStack Congress & Datalog
Motonori Shindo (@motonori_shindo) CTO Ambassador / Technical Leader VMware
自己紹介 • 進藤 資訓(しんどう もとのり)
• 略歴
– 東京電力、カーネギーメロン大学、アセンド、コサイン、プロキシム、 ファイブ・フロント、ニシラ、ヴイエムウェア
• 目標 – 歌って踊れるエンジニア
2
OpenStack Congress とは? • OpenStack の中で Policy as a Service を担うプロジェクト
• なぜ “Congress” ? – “ポリシー”が作られるところだから J
3
なぜ Congress は OpenStack Project なの? • Congress は汎用的なポリシーエンジンなので、Standalone でも動作する
• ポリシーを定義するにはデータソースが必要
• OpenStack は豊富なデータソースを提供してくれるので、Congress にとっては非常に都合が良い場所である!
4
ポリシーとは?? • 何かしらによって課される制約に対してどうあるべきかを規定するもの
– 法律・条例
– ビジネスルール
– アプリケーション要求
– 地域的制約
– セキュリティ的要件
– …
5
これらを記述する汎用的な Policy Language が必要!
Datalog • 一階述語論理にもとづいた宣言的論プログラミング言語
– しばしば Query Language として使われる
• 文法的には Prolog に似ているが、Prolog と違い – Function symbolがない – 停止することが保証されている – 節の順序は無関係 – リストの概念がない – カット(!)や fail オペレータがない
6
Safety Properties of Datalog • ルール中のヘッドに現れる変数は、非算術かつ肯定形のリテラル中に現れなければいけない。
• ボディの否定形リテラル中に現れる変数はすべて、他の肯定形リテラルの中に現れなければらなない。
• Safety でない例 – q(X, Y, Z) :- r1(X,Y), X < Z. – q(X, Y, Z) :- r1(X,Y), not r2(X, Y, Z).
• Safety な例 – q(X, Y, Z) :- r1(X, Y), r2(Y, Z), X < Z. – q(X, Y, Z) :- r1(X,Y), not r2(X, Y, Z), r3(Y, Z).
8
Datalog (Prolog) の例1
9
parent(motonori, manzo). parent(motonori, keiko). male(manzo). male(motonori). female(keiko). father(X, Y) :- parent(X,Y), male(Y). mother(X, Y) :- parent(X,Y), female(Y). ?- father(motonori, X). father(motonori, manzo).
Datalog (Prolog) の例2
10
adjacent(a, b). adjacent(b, c). adjacent(c, d). adjacent(a, d). adjacent(e, f). reachable(X, Y) :- adjacent(X, Y). reachable(X, Y) :- adjacent(X, Z), reachable(Z, Y). ?- reachable(b, d). reachable(b, d). ?- reachable(a, f).
a b
d
f
c
e
Congress でできる(予定の)こと • Monitoring
– クラウドの現在の状態とポリシーを照らし合わせ、もしミスマッチがあればレポートする
• Enforcement – Policy 違反を回避するためになにか「アクション」を取る – Proactively / Reactively / Interactively
• Auditing – Policy や Policy 違反の履歴管理
11
Congress における Datalog
• 文法
• 制限 – 再帰は(今のところ)サポートしていない
12
<policy> ::= <rule>* <rule> ::= <head> COLONMINUS <literal> (COMMA <literal>)* <head> ::= <atom> <head> ::= EXECUTE[<atom>] <literal> ::= <atom> <literal> ::= NOT <atom> <atom> ::= TABLENAME LPAREN <arg> (COMMA <arg>)* RPAREN <arg> ::= <term> <arg> ::= COLUMNNAME=<term> <term> ::= INTEGER | FLOAT | STRING | VARIABLE
Congress における拡張 • データソースが持つテーブルの中にはたくさんのカラムを持つものがある。それらをすべて記述するの
は面倒である。
• フルに書いた場合:
• 簡易記法を使った場合:
13
port(id) :- neutron:ports(id, tenant_id, name, network_id, mac_address, admin_state_up, status, device_owner, fixed_ips, security_groups).
port(id) :- neutron:ports(id=x).
現在サポートされている Congress 用ドライバ • OpenStack Ceilometer • OpenStack Cinder
• OpenStack Glance (v2) • OpenStack Ironic
• OpenStack Keystone
• OpenStack Murano
• OpenStack Neutron (v2) • OpenStack Nova
• OpenStack Switft • Cloud Foundry
• Plexxi
• vCenter
14
Congress の Policy 例 (monitoring)
15
error(vm, network) :- nova:virtual_machine(vm) nova:network(vm, network) nova:owner(vm, vm_owner) neutron:owner(network, network_owner) not neutron:public_network(network) not same_group(vm_owner, network_owner) same_group(user1, user2) :- ad:group(user1, group) ad:group(user2, group)
Congress の Policy 例 (enforcement)
16
Execute[neutron:disconnectNetwork(vm, network)] :- error(vm, network)
Execute[nova:pause(x)] :- nova:servers(id=x, status=“ACTIVE”)