Slide 1

Slide 1 text

© 2015 VMware Inc. All rights reserved. OpenStack Congress & Datalog Motonori Shindo (@motonori_shindo) CTO Ambassador / Technical Leader VMware

Slide 2

Slide 2 text

自己紹介 • 進藤 資訓(しんどう もとのり) • 略歴 – 東京電力、カーネギーメロン大学、アセンド、コサイン、プロキシム、 ファイブ・フロント、ニシラ、ヴイエムウェア • 目標 – 歌って踊れるエンジニア 2

Slide 3

Slide 3 text

OpenStack Congress とは? • OpenStack の中で Policy as a Service を担うプロジェクト • なぜ “Congress” ? – “ポリシー”が作られるところだから J 3

Slide 4

Slide 4 text

なぜ Congress は OpenStack Project なの? • Congress は汎用的なポリシーエンジンなので、Standalone でも動作する • ポリシーを定義するにはデータソースが必要 • OpenStack は豊富なデータソースを提供してくれるので、Congress にとっては非常に都合が良い場 所である! 4

Slide 5

Slide 5 text

ポリシーとは?? • 何かしらによって課される制約に対してどうあるべきかを規定するもの – 法律・条例 – ビジネスルール – アプリケーション要求 – 地域的制約 – セキュリティ的要件 – … 5 これらを記述する汎用的な Policy Language が必要!

Slide 6

Slide 6 text

Datalog • 一階述語論理にもとづいた宣言的論プログラミング言語 – しばしば Query Language として使われる • 文法的には Prolog に似ているが、Prolog と違い – Function symbolがない – 停止することが保証されている – 節の順序は無関係 – リストの概念がない – カット(!)や fail オペレータがない 6

Slide 7

Slide 7 text

Datalog Syntax 7 :- , , … , . Head Body

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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).

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Congress でできる(予定の)こと • Monitoring – クラウドの現在の状態とポリシーを照らし合わせ、もしミスマッチがあればレポートする • Enforcement – Policy 違反を回避するためになにか「アクション」を取る – Proactively / Reactively / Interactively • Auditing – Policy や Policy 違反の履歴管理 11

Slide 12

Slide 12 text

Congress における Datalog • 文法 • 制限 – 再帰は(今のところ)サポートしていない 12 ::= * ::= COLONMINUS (COMMA )* ::= ::= EXECUTE[] ::= ::= NOT ::= TABLENAME LPAREN (COMMA )* RPAREN ::= ::= COLUMNNAME= ::= INTEGER | FLOAT | STRING | VARIABLE

Slide 13

Slide 13 text

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=id).

Slide 14

Slide 14 text

現在サポートされている 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

Slide 15

Slide 15 text

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)

Slide 16

Slide 16 text

Congress の Policy 例 (enforcement) 16 Execute[neutron:disconnectNetwork(vm, network)] :- error(vm, network) Execute[nova:pause(x)] :- nova:servers(id=x, status=“ACTIVE”)

Slide 17

Slide 17 text

Congress -- Policies 17

Slide 18

Slide 18 text

Congress – Data Sources 18

Slide 19

Slide 19 text

Congress – Data Sources 19

Slide 20

Slide 20 text

Congress – Data Sources 20

Slide 21

Slide 21 text

Questions