[openstack-dev] [Congress] simulate examples

Tim Hinrichs thinrichs at vmware.com
Tue Dec 23 20:40:55 UTC 2014


Here's a description.  We need to get this added to the docs.


Below is a full description of how you might utilize the Action-centric version of simulate.  The idea is that if you describe the effects that an action/API-call will have on the basic tables of nova/neutron/etc. (below called an Action Description policy) then you can ask Congress to simulate the execution of that action and answer a query in the resulting state.  The only downside to the action-centric application of simulate is writing the Action Policy for all of the actions you care about.

The other way to utilize simulate is to give it the changes in nova/neutron/etc. directly that you’d like to make.  That is, instead of an action, you’ll tell simulate what rows should be inserted and which ones should be deleted.  An insertion is denoted with a plus (+) and deletion is denoted with a minus (-).

For example, to compute all the errors after

  1.  inserting a row into the nova:servers table with ID uuid1, 2TB of disk, and 10GB of memory (this isn’t the actual schema BTW) and
  2.  deleting the row from neutron:security_groups with the ID “uuid2” and name “alice_default_group” (again not the real schema),

you’d write something like the following.

openstack congress policy simulate classification 'error(x)’ ‘nova:servers+(“uuid1”, “2TB”, “10 GB”) neutron:security_groups-(“uuid2”, “alice_default_group”)' action

But I’d suggest reading the following to see some of the options.

=====================================
1. CREATE ACTION DESCRIPTION POLICY
=====================================

Suppose the table 'p' is a collection of key-value pairs:  p(key, value).

Suppose we have a single action 'set(key, newvalue)’ that changes the existing value of 'key' to 'newvalue' or sets the value of 'key' to 'newvalue' if 'key' was not already assigned.  We can describe the effects of ‘set’ using the following 3 Datalog rules.

p+(x,y) :- set(x,y)
p-(x,oldy) :- set(x,y), p(x,oldy)
action("set")

The first thing we do is add each of these 3 rules to the policy named 'action'.

$ openstack congress policy rule create action 'p+(x,y) :- set(x,y)'
$ openstack congress policy rule create action 'p-(x,oldy) :- set(x,y), p(x,oldy)'
$ openstack congress policy rule create action 'action("set")'


=========================================
2. ADD SOME KEY/VALUE PAIRS FOR TESTING
=========================================

Here’s we’ll populate the ‘classification’ policy with a few key/value pairs.

$ openstack congress policy rule create classification 'p(101, 0)'
$ openstack congress policy rule create classification 'p(202, "abc")'
$ openstack congress policy rule create classification 'p(302, 9)'


==================
3. DEFINE POLICY
==================

There's an error if a key's value is 9.

$ openstack congress policy rule create classification 'error(x) :- p(x, 9)'


===========================
4. RUN SIMULATION QUERIES
===========================

Each of the following is an example of a simulation query you might want to run.

a) Simulate changing the value of key 101 to 5 and query the contents of p.

$ openstack congress policy simulate classification 'p(x,y)' 'set(101, 5)' action
p(101, 5)
p(202, "abc")
p(302, 9)


b) Simulate changing the value of key 101 to 5 and query the error table

$ openstack congress policy simulate classification 'error(x)' 'set(101, 5)' action
error(302)


c) Simulate changing the value of key 101 to 9 and query the error table.

$ openstack congress policy simulate classification 'error(x)' 'set(101, 9)' action
error(302)
error(101)


d) Simulate changing the value of key 101 to 9 and query the *change* in the error table.

$ openstack congress policy simulate classification 'error(x)' 'set(101, 9)' action --delta
error+(101)


e) Simulate changing 101:9, 202:9, 302:1 and query the *change* in the error table.

$ openstack congress policy simulate classification 'error(x)' 'set(101, 9) set(202, 9) set(302, 1)' action --delta
error+(202)
error+(101)
error-(302)


f) Simulate changing 101:9, 202:9, 302:1, and finally 101:15 (in that order).  Then query the *change* in the error table.

$ openstack congress policy simulate classification 'error(x)' 'set(101, 9) set(202, 9) set(302, 1) set(101, 15)' action --delta
error+(202)
error-(302)


g) Simulate changing 101:9 and query the *change* in the error table, while asking for a debug trace of the computation.

$ openstack congress policy simulate classification 'error(x)' 'set(101, 9)' action --delta --trace

error+(101)
RT    : ** Simulate: Querying error(x)
Clas  : Call: error(x)
Clas  : | Call: p(x, 9)
Clas  : | Exit: p(302, 9)
Clas  : Exit: error(302)
Clas  : Redo: error(302)
Clas  : | Redo: p(302, 9)
Clas  : | Fail: p(x, 9)
Clas  : Fail: error(x)
Clas  : Found answer [error(302)]
RT    : Original result of error(x) is [error(302)]
RT    : ** Simulate: Applying sequence [set(101, 9)]
Action: Call: action(x)
...

Tim




________________________________
From: Tran, Steven <steven.tran2 at hp.com>
Sent: Monday, December 22, 2014 10:38 PM
To: openstack-dev at lists.openstack.org
Subject: [openstack-dev] [Congress] simulate examples

Hi,
   Does anyone have an example on how to use ‘simulate’ according to the following command line usage?

usage: openstack congress policy simulate [-h] [--delta] [--trace]
                                          <policy> <query> <sequence>
                                          <action_policy>

  What are the query and sequence? The example under /opt/stack/congress/examples doesn’t mention about query and sequence.  It seems like all 4 parameters are required.
Thanks,
-Steven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20141223/91036fa1/attachment.html>


More information about the OpenStack-dev mailing list