Hello community,
here is the log from the commit of package python-pycadf for openSUSE:Factory checked in at 2016-05-04 08:19:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pycadf (Old)
and /work/SRC/openSUSE:Factory/.python-pycadf.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pycadf"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pycadf/python-pycadf.changes 2015-10-30 13:42:11.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-pycadf.new/python-pycadf.changes 2016-05-04 08:19:26.000000000 +0200
@@ -1,0 +2,34 @@
+Thu Mar 3 14:56:01 UTC 2016 - tbechtold@suse.com
+
+- update to 2.1.0:
+ * Updated from global requirements
+ * Add docstring validation
+ * Adding ironic api specific audit map configuration
+ * Updated from global requirements
+ * Updated from global requirements
+ * Enable cadf support for Heat
+ * Fix wrong use of comma
+ * Updated from global requirements
+ * remove suport for py33
+ * Put py34 first in the env order of tox
+ * relax id validation
+ * Updated from global requirements
+ * Remove Python 2.6 classifier
+ * Remove python 2.6 and cleanup tox.ini
+ * make generate_uuid return valid uuid
+ * Updated from global requirements
+ * Add authenticate and evaluate actions
+ * Change ceilometer endpoint name from telemetry to metering
+ * No need for Oslo Incubator Sync
+ * Document and update existing hacking violations
+ * Add shields.io version/downloads links/badges into README.rst
+ * Include changelog/history in docs
+ * Fix event example
+ * Add event name
+ * Event doc indentation issue
+ * Updated from global requirements
+ * Updated from global requirements
+ * Fixed typo error
+- Adjust Requires according to requirements.txt
+
+-------------------------------------------------------------------
Old:
----
pycadf-1.1.0.tar.gz
New:
----
pycadf-2.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pycadf.spec ++++++
--- /var/tmp/diff_new_pack.138BZC/_old 2016-05-04 08:19:27.000000000 +0200
+++ /var/tmp/diff_new_pack.138BZC/_new 2016-05-04 08:19:27.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pycadf
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-pycadf
-Version: 1.1.0
+Version: 2.1.0
Release: 0
Summary: DMTF Cloud Audit (CADF) data mode
License: Apache-2.0
@@ -28,25 +28,19 @@
BuildRequires: python-pbr
# Test dependencies
BuildRequires: python-Babel >= 1.3
-BuildRequires: python-WebOb >= 1.2.3
-BuildRequires: python-fixtures >= 0.3.14
-BuildRequires: python-iso8601 >= 0.1.8
-BuildRequires: python-mock >= 1.0
-BuildRequires: python-mox >= 0.5.3
-BuildRequires: python-netaddr >= 0.7.6
-BuildRequires: python-oslo.config >= 1.2.0
-BuildRequires: python-oslo.messaging
-BuildRequires: python-oslotest
+BuildRequires: python-fixtures >= 1.3.1
+BuildRequires: python-oslo.config >= 3.4.0
+BuildRequires: python-oslo.serialization >= 1.10.0
+BuildRequires: python-oslotest >= 1.10.0
BuildRequires: python-python-subunit >= 0.0.18
-BuildRequires: python-six >= 1.4.1
-BuildRequires: python-testrepository >= 0.0.17
+BuildRequires: python-six >= 1.9.0
+BuildRequires: python-testrepository >= 0.0.18
BuildRequires: python-testscenarios >= 0.4
-BuildRequires: python-testtools >= 0.9.34
+BuildRequires: python-testtools >= 1.4.0
Requires: python-Babel >= 1.3
-Requires: python-WebOb >= 1.2.3
-Requires: python-netaddr >= 0.7.6
-Requires: python-oslo.config >= 2.1.0
-Requires: python-oslo.serialization >= 1.4.0
+Requires: python-debtcollector >= 1.2.0
+Requires: python-oslo.config >= 3.4.0
+Requires: python-oslo.serialization >= 1.10.0
Requires: python-pytz >= 2013.6
Requires: python-six >= 1.9.0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
++++++ pycadf-1.1.0.tar.gz -> pycadf-2.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/AUTHORS new/pycadf-2.1.0/AUTHORS
--- old/pycadf-1.1.0/AUTHORS 2015-08-24 17:42:18.000000000 +0200
+++ new/pycadf-2.1.0/AUTHORS 2016-02-17 19:02:00.000000000 +0100
@@ -1,5 +1,6 @@
Arun Kant
Brad Topol
+ChangBo Guo(gcb)
Christian Berendt
Cyril Roelandt
Davanum Srinivas
@@ -8,15 +9,23 @@
Dolph Mathews
Doug Hellmann
Doug Hellmann
+Einst Crazy
Fernando Diaz
Gordon Chung
+JUNJIE NAN
James E. Blair
+Janonymous
Jeremy Stanley
+Joshua Harlow
+Lokesh S
Martin Geisler
Matt Riedemann
+Rakesh H S
Sascha Peilicke
+Stanisław Pitucha
Steve Martinelli
bgsilva
gordon chung
lin-hua-cheng
mariamj@us.ibm.com
+reedip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/ChangeLog new/pycadf-2.1.0/ChangeLog
--- old/pycadf-1.1.0/ChangeLog 2015-08-24 17:42:18.000000000 +0200
+++ new/pycadf-2.1.0/ChangeLog 2016-02-17 19:02:00.000000000 +0100
@@ -1,6 +1,46 @@
CHANGES
=======
+2.1.0
+-----
+
+* Updated from global requirements
+* Add docstring validation
+* Adding ironic api specific audit map configuration
+* Updated from global requirements
+* Updated from global requirements
+* Enable cadf support for Heat
+* Fix wrong use of comma
+* Updated from global requirements
+* remove suport for py33
+* Put py34 first in the env order of tox
+
+2.0.1
+-----
+
+* relax id validation
+
+2.0.0
+-----
+
+* Updated from global requirements
+* Remove Python 2.6 classifier
+* Remove python 2.6 and cleanup tox.ini
+* make generate_uuid return valid uuid
+* Updated from global requirements
+* Add authenticate and evaluate actions
+* Change ceilometer endpoint name from telemetry to metering
+* No need for Oslo Incubator Sync
+* Document and update existing hacking violations
+* Add shields.io version/downloads links/badges into README.rst
+* Include changelog/history in docs
+* Fix event example
+* Add event name
+* Event doc indentation issue
+* Updated from global requirements
+* Updated from global requirements
+* Fixed typo error
+
1.1.0
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/PKG-INFO new/pycadf-2.1.0/PKG-INFO
--- old/pycadf-1.1.0/PKG-INFO 2015-08-24 17:42:19.000000000 +0200
+++ new/pycadf-2.1.0/PKG-INFO 2016-02-17 19:02:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: pycadf
-Version: 1.1.0
+Version: 2.1.0
Summary: CADF Library
Home-page: https://launchpad.net/pycadf
Author: OpenStack
@@ -10,6 +10,14 @@
PyCADF
======
+ .. image:: https://img.shields.io/pypi/v/pycadf.svg
+ :target: https://pypi.python.org/pypi/pycadf/
+ :alt: Latest Version
+
+ .. image:: https://img.shields.io/pypi/dm/pycadf.svg
+ :target: https://pypi.python.org/pypi/pycadf/
+ :alt: Downloads
+
This library provides an auditing data model based on the `Cloud Auditing Data
Federation http://www.dmtf.org/standards/cadf`_ specification, primarily for
use by OpenStack. The goal is to establish strict expectations about what
@@ -38,7 +46,5 @@
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/README.rst new/pycadf-2.1.0/README.rst
--- old/pycadf-1.1.0/README.rst 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/README.rst 2016-02-17 19:01:37.000000000 +0100
@@ -2,6 +2,14 @@
PyCADF
======
+.. image:: https://img.shields.io/pypi/v/pycadf.svg
+ :target: https://pypi.python.org/pypi/pycadf/
+ :alt: Latest Version
+
+.. image:: https://img.shields.io/pypi/dm/pycadf.svg
+ :target: https://pypi.python.org/pypi/pycadf/
+ :alt: Downloads
+
This library provides an auditing data model based on the `Cloud Auditing Data
Federation http://www.dmtf.org/standards/cadf`_ specification, primarily for
use by OpenStack. The goal is to establish strict expectations about what
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/doc/source/audit_maps.rst new/pycadf-2.1.0/doc/source/audit_maps.rst
--- old/pycadf-1.1.0/doc/source/audit_maps.rst 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/doc/source/audit_maps.rst 2016-02-17 19:01:37.000000000 +0100
@@ -27,6 +27,8 @@
* `neutron_api_audit_map.conf`_
* `nova_api_audit_map.conf`_
* `trove_api_audit_map.conf`_
+* `heat_api_audit_map.conf`_
+* `ironic_api_audit_map.conf`_
These files are hosted under the `etc/pycadf`_ directory of pyCADF. For more
information on how to use these mapping files, refer to the `Audit middleware`_
@@ -40,3 +42,5 @@
.. _`neutron_api_audit_map.conf`: https://github.com/openstack/pycadf/blob/master/etc/pycadf/neutron_api_audit...
.. _`nova_api_audit_map.conf`: https://github.com/openstack/pycadf/blob/master/etc/pycadf/nova_api_audit_ma...
.. _`trove_api_audit_map.conf`: https://github.com/openstack/pycadf/blob/master/etc/pycadf/trove_api_audit_m...
+.. _`heat_api_audit_map.conf`: https://github.com/openstack/pycadf/blob/master/etc/pycadf/heat_api_audit_ma...
+.. _`ironic_api_audit_map.conf`: https://github.com/openstack/pycadf/blob/master/etc/pycadf/ironic_api_audit_...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/doc/source/event_concept.rst new/pycadf-2.1.0/doc/source/event_concept.rst
--- old/pycadf-1.1.0/doc/source/event_concept.rst 2015-08-24 17:41:44.000000000 +0200
+++ new/pycadf-2.1.0/doc/source/event_concept.rst 2016-02-17 19:01:37.000000000 +0100
@@ -104,7 +104,7 @@
"name": "public"
}
],
- "id": "openstack:06747855d62547d4bfd707f75b8a1c54",
+ "id": "06747855d62547d4bfd707f75b8a1c54",
"name": "nova"
},
"observer": {
@@ -112,7 +112,7 @@
},
# tags use to query events on,
"tags": [
- "correlation_id?value=openstack:56cdde6f-6b4e-48a4-94e6-defb40522fb2"
+ "correlation_id?value=56cdde6f-6b4e-48a4-94e6-defb40522fb2"
],
"eventType": "activity",
"initiator": {
@@ -128,16 +128,16 @@
"agent": "python-novaclient",
"address": "9.26.26.250"
},
- "project_id": "openstack:e7e2bcc9c0df4f3eabcd412ae62503f6",
- "id": "openstack:68a3f50705a54f799ce94380fc02ed8a"
+ "project_id": "e7e2bcc9c0df4f3eabcd412ae62503f6",
+ "id": "68a3f50705a54f799ce94380fc02ed8a"
},
# optional Reason for activity event,
"reason": {
"reasonCode": "200",
"reasonType": "HTTP"
},
- # list of Resources which edited event,
- "reporterchain": [
+ # list of Resources which edited event,
+ "reporterchain": [
{
"reporterTime": "2014-02-27T19:29:31.043902+0000",
"role": "modifier",
@@ -148,7 +148,7 @@
],
"action": "authenticate/logon",
"outcome": "success",
- "id": "openstack:0a196053-95de-48f8-9890-4527b25b5007",
+ "id": "0a196053-95de-48f8-9890-4527b25b5007",
# Event model is extensible so additional attributes may be added to describe model,
"requestPath": "/v2/e7e2bcc9c0df4f3eabcd412ae62503f6/os-certificates"
}
@@ -188,7 +188,7 @@
"eventTime": "2014-02-27T19:29:30.855665+0000",
"target": {
"typeURI": "service/compute/cpu",
- "id": "openstack:06747855d62547d4bfd707f75b8a1c54",
+ "id": "06747855d62547d4bfd707f75b8a1c54",
"name": "instance"
},
"observer": {
@@ -198,20 +198,21 @@
"initiator": {
"typeURI": "service/oss/monitoring",
"name": "ceilometer-pollster",
- "id": "openstack:68a3f50705a54f799ce94380fc02ed8a"
+ "id": "68a3f50705a54f799ce94380fc02ed8a"
},
"measurement": [
{
"result": "80",
"metric": {
- "metricId": "openstack:",
+ "metricId": "",
"unit": "%",
"name": "CPU utilisation metric"
}
}
- ]"action": "monitor",
+ ],
+ "action": "monitor",
"outcome": "success",
- "id": "openstack:0a196053-95de-48f8-9890-4527b25b5007"
+ "id": "0a196053-95de-48f8-9890-4527b25b5007"
}
.. note::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/doc/source/history.rst new/pycadf-2.1.0/doc/source/history.rst
--- old/pycadf-1.1.0/doc/source/history.rst 1970-01-01 01:00:00.000000000 +0100
+++ new/pycadf-2.1.0/doc/source/history.rst 2016-02-17 19:01:37.000000000 +0100
@@ -0,0 +1 @@
+.. include:: ../../ChangeLog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/doc/source/index.rst new/pycadf-2.1.0/doc/source/index.rst
--- old/pycadf-1.1.0/doc/source/index.rst 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/doc/source/index.rst 2016-02-17 19:01:37.000000000 +0100
@@ -66,9 +66,16 @@
.. toctree::
:maxdepth: 1
- releases
api/modules
+Release Notes
+=============
+
+.. toctree::
+ :maxdepth: 1
+
+ history
+
Indices and tables
==================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/doc/source/releases.rst new/pycadf-2.1.0/doc/source/releases.rst
--- old/pycadf-1.1.0/doc/source/releases.rst 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/doc/source/releases.rst 1970-01-01 01:00:00.000000000 +0100
@@ -1,220 +0,0 @@
-=============
-Release Notes
-=============
-
-0.8.0 (Feb 16 2015)
-===================
-
-* add helper module
-* Add a new CADF type for keystone trusts
-* Use oslo namespaces
-* Use oslo_context
-* Add deprecation message to Audit API
-* cleanup documentation
-* Bug 1347868_: Do not depend on endpoint id existing in the service catalog
-
-.. _1347868: https://bugs.launchpad.net/pycadf/+bug/1347868
-
-0.7.1 (Jan 28 2015)
-===================
-
-* Pull out some CADF taxonomy to be constants
-* Add new CADF taxonomy types
-
-0.7.0 (Jan 19 2015)
-===================
-
-* Work toward Python 3.4 support and testing
-* Use oslo_debug_helper and remove our own version
-* Stop using intersphinx
-* Remove dependencies from docs test env in tox.ini
-* Use correct name of oslo debugger script
-* Remove unused dependencies from pycadf
-* Use oslo tests fixture
-* Use oslo.serialization
-* Sync oslo libraries
-* upgrade hacking to 0.10.0
-* Bug 1336976_: PyCADF docs do not include the changelog
-* Bug 1398411_: deprecate audit middleware
-
-.. _1336976: https://bugs.launchpad.net/pycadf/+bug/1336976
-.. _1398411: https://bugs.launchpad.net/pycadf/+bug/1398411
-
-0.6.0 (Aug 23 2014)
-===================
-
-* Bump hacking to 0.9.2 series
-* Remove docutils pin
-* Enabled hacking checks H305 and H307
-* Fix typo comments
-* Fix a grammatical error in contributing doc
-* Debug env for tox
-* clean up license headers
-* add CONTRIBUTING doc
-* revise readme with a project description
-* Enable PEP8 checks E128, E251 and E265
-* define the project goal
-* Blueprint audit-all-apis_: add audit support for all openstack components
-* Bug 1359495_: Federated credential metadata
-
-.. _audit-all-apis: https://blueprints.launchpad.net/pycadf/+spec/audit-all-apis
-.. _1359495: https://bugs.launchpad.net/pycadf/+bug/1359495
-
-0.5.1 (May 26 2014)
-===================
-
-* import run_cross_tests.sh from incubator
-* reorder documentation
-* sync oslo
-* Bug 1321080_: [OSSA 2014-021] auth token is exposed in meter http.request (CVE-2014-4615)
-
-.. _1321080: https://bugs.launchpad.net/pycadf/+bug/1321080
-
-0.5 (Apr 1 2014)
-================
-
-* add docstrings to functions
-* Bug 1279951_: need to publish developer documentation
-
-.. _1279951: https://bugs.launchpad.net/pycadf/+bug/1279951
-
-0.4.1 (Feb 21 2014)
-===================
-
-* catch empty json body
-
-0.4 (Feb 20 2014)
-=================
-
-* Update .gitreview after repo rename
-* Install configs into /etc, not /usr/etc
-* Rollback change to that Install configs into /etc
-* oslo common code sync and requirements cleanup
-* add constant for security service
-* Bug 1280327_: notifier middleware broken by oslo.messaging
-
-.. _1280327: https://bugs.launchpad.net/pycadf/+bug/1280327
-
-0.3.1 (Feb 4 2014)
-==================
-
-* update audit_map
-* update build_typeURI to drop query string
-* sync common code and requirements
-* adjust typeURI to capture target better
-* Python 3: update setup.cfg to advertise python 3 compatibility
-* Bug 1262393_: mask token values
-* Bug 1267500_: add REST request URL path to event
-
-.. _1262393: https://bugs.launchpad.net/pycadf/+bug/1262393
-.. _1267500: https://bugs.launchpad.net/pycadf/+bug/1267500
-
-0.3 (Jan 10 2014)
-=================
-
-* Python 3: do not index a dict_keys object
-* Python 3: use six.moves.urllib.parse instead of urlparse
-* Python 3: the request body should be bytes in test_api.py
-* Python 3: use six.with_metaclass
-* Python 3: replace 'basestring' by 'six.string_types'
-* Python 3: Use six.moves.configparser rather than ConfigParser
-* sync requirements and oslo
-
-0.2.2 (Oct 29 2013)
-===================
-
-* update oslo requirement
-* do not set typeURI in resource shortform
-* add namespace to all ids
-* improve model validation
-
-0.2.1 (Oct 21 2013)
-===================
-
-* support namespace prefix in id
-* switch list action to read/list
-* Bug 1240067_: observer should be implemented as resource
-
-.. _1240067: https://bugs.launchpad.net/pycadf/+bug/1240067
-
-0.2 (Oct 4 2013)
-================
-
-* Bug 1229977_: Switch to oslo.config 1.2.0 final
-* Bug 1226870_: target_endpoint_type conf value not tested properly
-* Bug 1228199_: conf options are not optional
-
-.. _1229977: https://bugs.launchpad.net/pycadf/+bug/1229977
-.. _1226870: https://bugs.launchpad.net/pycadf/+bug/1226870
-.. _1228199: https://bugs.launchpad.net/pycadf/+bug/1228199
-
-0.1.9 (Sep 19 2013)
-===================
-
-* Bug 1227634_: pycadf 0.1.8 broke oslo
-
-.. _1227634: https://bugs.launchpad.net/pycadf/+bug/1227634
-
-0.1.8 (Sep 18 2013)
-===================
-
-* update tox to 1.6
-* Bug 1226722_: DNS names may not map to service catalog values
-
-.. _1226722: https://bugs.launchpad.net/pycadf/+bug/1226722
-
-0.1.7 (Sep 5 2013)
-==================
-
-* Bug 1221379_: Ceilometer CADF_EVENT.id and CADF_EVENT.eventTime stay the
- same for two different events
-
-.. _1221379: https://bugs.launchpad.net/pycadf/+bug/1221379
-
-0.1.6 (Sep 4 2013)
-===================
-
-* bump oslo.config req to 1.2.0a3
-
-0.1.5 (Aug 26 2013)
-===================
-
-* Bug 1214097_: update cadf spec to support new data model
-
- * support credentials, hosts, endpoints
- * add observer attr to event
-
-* Bug 1214407_: api_audit_map.conf is not getting packaged
-
-.. _1214097: https://bugs.launchpad.net/pycadf/+bug/1214097
-.. _1214407: https://bugs.launchpad.net/pycadf/+bug/1214407
-
-0.1.4 (Aug 20 2013)
-===================
-
-* add event to CADF_EVENT
-
-0.1.3 (Aug 15 2013)
-===================
-
-* add support for no response and failed request audit
-
-0.1.2 (Aug 14 2013)
-===================
-
-* move cadf correlation id under req.environ
-* append cadf event to req.environ
-* Bug 1209387_: attribute validation fails against unicode
-
-.. _1209387: https://bugs.launchpad.net/pycadf/+bug/1209387
-
-0.1.1 (Aug 8 2013)
-==================
-
-* validate attributes against basestring
-* add support for audit api middleware
-
-0.1 (Aug 6 2013)
-================
-
-* initial project setup
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/doc/source/specification/events.rst new/pycadf-2.1.0/doc/source/specification/events.rst
--- old/pycadf-1.1.0/doc/source/specification/events.rst 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/doc/source/specification/events.rst 2016-02-17 19:01:37.000000000 +0100
@@ -54,7 +54,7 @@
{
"typeURI": "http://schemas.dmtf.org/cloud/audit/1.0/event",
- "id": "openstack:a80dc5ee-be83-48ad-ad5e-6577f2217637",
+ "id": "a80dc5ee-be83-48ad-ad5e-6577f2217637",
"eventType": "activity",
"action": "read",
"outcome": "success",
@@ -64,9 +64,10 @@
},
"eventTime": "2014-01-17T23:23:38.109989+0000",
"initiator": {
- "id": "openstack:95f12d248a234a969f456cd2c794f29a""typeURI": "service/security/account/user",
+ "id": "95f12d248a234a969f456cd2c794f29a",
+ "typeURI": "service/security/account/user",
"name": "admin",
- "project_id": "openstack:e55b158759854ea6a7852aa76632c6c1",
+ "project_id": "e55b158759854ea6a7852aa76632c6c1",
"credential": {
"token": "MIIQBgYJKoZIhvcNAQcCoIIP9z xxxxxx KoZIhvcIP9z=",
"identity_status": "Confirmed"
@@ -77,7 +78,7 @@
}
},
"target": {
- "id": "openstack:0f126160203748a5b4923f2eb6e3b7db",
+ "id": "0f126160203748a5b4923f2eb6e3b7db",
"typeURI": "service/compute/servers",
"name": "nova",
"addresses": [
@@ -109,6 +110,6 @@
],
"requestPath": "/v2/56600971-90f3-4370-807f-ab79339381a9/servers",
"tags": [
- "correlation_id?value=openstack:bcac04dc-e0be-4110-862c-347088a7836a"
+ "correlation_id?value=bcac04dc-e0be-4110-862c-347088a7836a"
]
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/etc/pycadf/ceilometer_api_audit_map.conf new/pycadf-2.1.0/etc/pycadf/ceilometer_api_audit_map.conf
--- old/pycadf-1.1.0/etc/pycadf/ceilometer_api_audit_map.conf 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/etc/pycadf/ceilometer_api_audit_map.conf 2016-02-17 19:01:37.000000000 +0100
@@ -19,4 +19,4 @@
# map endpoint type defined in service catalog to CADF typeURI
[service_endpoints]
-telemetry = service/telemetry
+metering = service/metering
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/etc/pycadf/heat_api_audit_map.conf new/pycadf-2.1.0/etc/pycadf/heat_api_audit_map.conf
--- old/pycadf-1.1.0/etc/pycadf/heat_api_audit_map.conf 1970-01-01 01:00:00.000000000 +0100
+++ new/pycadf-2.1.0/etc/pycadf/heat_api_audit_map.conf 2016-02-17 19:01:37.000000000 +0100
@@ -0,0 +1,32 @@
+[DEFAULT]
+# default target endpoint type
+# should match the endpoint type defined in service catalog
+target_endpoint_type = None
+
+# possible end path of api requests
+[path_keywords]
+stacks = stack
+resources = resource
+preview = None
+detail = None
+abandon = None
+snapshots = snapshot
+restore = None
+outputs = output
+metadata = server
+signal = None
+events = event
+template = None
+template_versions = template_version
+functions = None
+validate = None
+resource_types = resource_type
+build_info = None
+actions = None
+software_configs = software_config
+software_deployments = software_deployment
+services = None
+
+# map endpoint type defined in service catalog to CADF typeURI
+[service_endpoints]
+orchestration = service/orchestration
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/etc/pycadf/ironic_api_audit_map.conf new/pycadf-2.1.0/etc/pycadf/ironic_api_audit_map.conf
--- old/pycadf-1.1.0/etc/pycadf/ironic_api_audit_map.conf 1970-01-01 01:00:00.000000000 +0100
+++ new/pycadf-2.1.0/etc/pycadf/ironic_api_audit_map.conf 2016-02-17 19:01:37.000000000 +0100
@@ -0,0 +1,25 @@
+[DEFAULT]
+# default target endpoint type
+# should match the endpoint type defined in service catalog
+target_endpoint_type = None
+
+# possible end path of api requests
+[path_keywords]
+nodes = node
+drivers = driver
+chassis = chassis
+ports = port
+states = state
+power = None
+provision = None
+maintenance = None
+validate = None
+boot_device = None
+supported = None
+console = None
+vendor_passthrus = vendor_passthru
+
+
+# map endpoint type defined in service catalog to CADF typeURI
+[service_endpoints]
+baremetal = service/compute/baremetal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/openstack-common.conf new/pycadf-2.1.0/openstack-common.conf
--- old/pycadf-1.1.0/openstack-common.conf 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/openstack-common.conf 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-[DEFAULT]
-base=pycadf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf/cadftaxonomy.py new/pycadf-2.1.0/pycadf/cadftaxonomy.py
--- old/pycadf-1.1.0/pycadf/cadftaxonomy.py 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/pycadf/cadftaxonomy.py 2016-02-17 19:01:37.000000000 +0100
@@ -23,6 +23,9 @@
ACTION_READ = 'read'
ACTION_UPDATE = 'update'
ACTION_DELETE = 'delete'
+# Other CADF actions
+ACTION_AUTHENTICATE = 'authenticate'
+ACTION_EVALUATE = 'evaluate'
# OpenStack specific, Profile or change CADF spec. to add this action
ACTION_LIST = 'read/list'
@@ -45,12 +48,12 @@
'disable',
'send',
'receive',
- 'authenticate',
+ ACTION_AUTHENTICATE,
'authenticate/login',
'revoke',
'renew',
'restore',
- 'evaluate',
+ ACTION_EVALUATE,
'allow',
'deny',
'notify',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf/event.py new/pycadf-2.1.0/pycadf/event.py
--- old/pycadf-1.1.0/pycadf/event.py 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/pycadf/event.py 2016-02-17 19:01:37.000000000 +0100
@@ -40,6 +40,7 @@
EVENT_KEYNAME_OUTCOME = "outcome"
EVENT_KEYNAME_REASON = "reason"
EVENT_KEYNAME_SEVERITY = "severity"
+EVENT_KEYNAME_NAME = "name"
EVENT_KEYNAME_MEASUREMENTS = "measurements"
EVENT_KEYNAME_TAGS = "tags"
EVENT_KEYNAME_ATTACHMENTS = "attachments"
@@ -59,6 +60,7 @@
EVENT_KEYNAME_OUTCOME,
EVENT_KEYNAME_REASON,
EVENT_KEYNAME_SEVERITY,
+ EVENT_KEYNAME_NAME,
EVENT_KEYNAME_MEASUREMENTS,
EVENT_KEYNAME_TAGS,
EVENT_KEYNAME_ATTACHMENTS,
@@ -94,6 +96,9 @@
reason = cadftype.ValidatorDescriptor(
EVENT_KEYNAME_REASON,
lambda x: isinstance(x, reason.Reason) and x.is_valid())
+ name = cadftype.ValidatorDescriptor(EVENT_KEYNAME_NAME,
+ lambda x: isinstance(
+ x, six.string_types))
severity = cadftype.ValidatorDescriptor(EVENT_KEYNAME_SEVERITY,
lambda x: isinstance(
x, six.string_types))
@@ -107,7 +112,8 @@
id=None, eventTime=None,
action=cadftaxonomy.UNKNOWN, outcome=cadftaxonomy.UNKNOWN,
initiator=None, initiatorId=None, target=None, targetId=None,
- severity=None, reason=None, observer=None, observerId=None):
+ severity=None, reason=None, observer=None, observerId=None,
+ name=None):
"""Create an Event
:param eventType: eventType of Event. Defaults to 'activity' type
@@ -123,6 +129,7 @@
:param reason: domain-specific Reason type
:param observer: Event's Observer Resource
:param observerId: Event's Observer Resource id
+ :param name: descriptive name for the event
"""
# Establish typeURI for the CADF Event data type
# TODO(mrutkows): support extended typeURIs for Event subtypes
@@ -165,6 +172,10 @@
if targetId is not None:
setattr(self, EVENT_KEYNAME_TARGETID, targetId)
+ # Event.name (Optional)
+ if name is not None:
+ setattr(self, EVENT_KEYNAME_NAME, name)
+
# Event.severity (Optional)
if severity is not None:
setattr(self, EVENT_KEYNAME_SEVERITY, severity)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf/eventfactory.py new/pycadf-2.1.0/pycadf/eventfactory.py
--- old/pycadf-1.1.0/pycadf/eventfactory.py 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/pycadf/eventfactory.py 2016-02-17 19:01:37.000000000 +0100
@@ -42,7 +42,7 @@
event_val.eventType = eventType
# TODO(mrutkows): CADF is only being used for basic
- # 'activity' auditing (on APIs), An IF-ELIF will
+ # 'activity' auditing (on APIs). An IF-ELIF will
# become more meaningful as we add support for other
# event types.
# elif eventType == cadftype.EVENTTYPE_MONITOR:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf/identifier.py new/pycadf-2.1.0/pycadf/identifier.py
--- old/pycadf-1.1.0/pycadf/identifier.py 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/pycadf/identifier.py 2016-02-17 19:01:37.000000000 +0100
@@ -11,9 +11,11 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
-
+import hashlib
import uuid
+import warnings
+from debtcollector import removals
from oslo_config import cfg
import six
@@ -26,29 +28,35 @@
CONF.register_opts(opts, group='audit')
-# TODO(mrutkows): make the namespace prefix configurable and have it resolve to
-# a full openstack namespace/domain value via some declaration (e.g.
-# "openstack:" == "http:\\www.openstack.org\")...
+AUDIT_NS = None
+if CONF.audit.namespace:
+ md5_hash = hashlib.md5(CONF.audit.namespace.encode('utf-8'))
+ AUDIT_NS = uuid.UUID(md5_hash.hexdigest())
+
+
def generate_uuid():
- """Generate a CADF identifier
- """
- return norm_ns(str(uuid.uuid4()))
+ """Generate a CADF identifier."""
+ if AUDIT_NS:
+ return str(uuid.uuid5(AUDIT_NS, str(uuid.uuid4())))
+ return str(uuid.uuid4())
+@removals.remove
def norm_ns(str_id):
- """Apply a namespace to the identifier
- """
+ """Apply a namespace to the identifier."""
prefix = CONF.audit.namespace + ':' if CONF.audit.namespace else ''
return prefix + str_id
-# TODO(mrutkows): validate any cadf:Identifier (type) record against
-# CADF schema. This would include schema validation as an optional parm.
def is_valid(value):
- """Validation to ensure Identifier is correct.
- """
- if not isinstance(value, six.string_types):
- raise TypeError
- elif not value:
- return False
+ """Validation to ensure Identifier is correct."""
+ if value in ['target', 'initiator', 'observer']:
+ return True
+ try:
+ uuid.UUID(value)
+ except (ValueError, TypeError):
+ if not isinstance(value, six.string_types) or not value:
+ return False
+ warnings.warn('Invalid uuid. To ensure interoperability, identifiers'
+ 'should be a valid uuid.')
return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf/tests/test_cadf_spec.py new/pycadf-2.1.0/pycadf/tests/test_cadf_spec.py
--- old/pycadf-1.1.0/pycadf/tests/test_cadf_spec.py 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/pycadf/tests/test_cadf_spec.py 2016-02-17 19:01:37.000000000 +0100
@@ -15,6 +15,8 @@
import time
import uuid
+import mock
+
from pycadf import attachment
from pycadf import cadftype
from pycadf import credential
@@ -35,9 +37,16 @@
class TestCADFSpec(base.TestCase):
- def test_identifier_empty(self):
+ @mock.patch('pycadf.identifier.warnings.warn')
+ def test_identifier(self, warning_mock):
+ # empty string
self.assertFalse(identifier.is_valid(''))
+ # generated uuid
self.assertTrue(identifier.is_valid(identifier.generate_uuid()))
+ self.assertFalse(warning_mock.called)
+ # any string
+ self.assertTrue(identifier.is_valid('blah'))
+ self.assertTrue(warning_mock.called)
def test_endpoint(self):
endp = endpoint.Endpoint(url='http://192.168.0.1',
@@ -219,7 +228,8 @@
outcome='success',
reason=reason.Reason(reasonType='HTTP',
reasonCode='200'),
- severity='high')
+ severity='high',
+ name='descriptive name')
ev.add_measurement(
measurement.Measurement(result='100',
metricId=identifier.generate_uuid())),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf.egg-info/PKG-INFO new/pycadf-2.1.0/pycadf.egg-info/PKG-INFO
--- old/pycadf-1.1.0/pycadf.egg-info/PKG-INFO 2015-08-24 17:42:18.000000000 +0200
+++ new/pycadf-2.1.0/pycadf.egg-info/PKG-INFO 2016-02-17 19:02:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: pycadf
-Version: 1.1.0
+Version: 2.1.0
Summary: CADF Library
Home-page: https://launchpad.net/pycadf
Author: OpenStack
@@ -10,6 +10,14 @@
PyCADF
======
+ .. image:: https://img.shields.io/pypi/v/pycadf.svg
+ :target: https://pypi.python.org/pypi/pycadf/
+ :alt: Latest Version
+
+ .. image:: https://img.shields.io/pypi/dm/pycadf.svg
+ :target: https://pypi.python.org/pypi/pycadf/
+ :alt: Downloads
+
This library provides an auditing data model based on the `Cloud Auditing Data
Federation http://www.dmtf.org/standards/cadf`_ specification, primarily for
use by OpenStack. The goal is to establish strict expectations about what
@@ -38,7 +46,5 @@
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf.egg-info/SOURCES.txt new/pycadf-2.1.0/pycadf.egg-info/SOURCES.txt
--- old/pycadf-1.1.0/pycadf.egg-info/SOURCES.txt 2015-08-24 17:42:19.000000000 +0200
+++ new/pycadf-2.1.0/pycadf.egg-info/SOURCES.txt 2016-02-17 19:02:00.000000000 +0100
@@ -4,7 +4,6 @@
ChangeLog
LICENSE
README.rst
-openstack-common.conf
requirements.txt
setup.cfg
setup.py
@@ -16,9 +15,9 @@
doc/source/audit_maps.rst
doc/source/conf.py
doc/source/event_concept.rst
+doc/source/history.rst
doc/source/index.rst
doc/source/middleware.rst
-doc/source/releases.rst
doc/source/images/audit_event.png
doc/source/images/middleware.png
doc/source/images/monitor_event.png
@@ -42,6 +41,8 @@
etc/pycadf/ceilometer_api_audit_map.conf
etc/pycadf/cinder_api_audit_map.conf
etc/pycadf/glance_api_audit_map.conf
+etc/pycadf/heat_api_audit_map.conf
+etc/pycadf/ironic_api_audit_map.conf
etc/pycadf/neutron_api_audit_map.conf
etc/pycadf/nova_api_audit_map.conf
etc/pycadf/trove_api_audit_map.conf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf.egg-info/pbr.json new/pycadf-2.1.0/pycadf.egg-info/pbr.json
--- old/pycadf-1.1.0/pycadf.egg-info/pbr.json 2015-08-24 17:42:18.000000000 +0200
+++ new/pycadf-2.1.0/pycadf.egg-info/pbr.json 2016-02-17 19:02:00.000000000 +0100
@@ -1 +1 @@
-{"git_version": "c5dc0d9", "is_release": true}
\ No newline at end of file
+{"git_version": "fb81d12", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/pycadf.egg-info/requires.txt new/pycadf-2.1.0/pycadf.egg-info/requires.txt
--- old/pycadf-1.1.0/pycadf.egg-info/requires.txt 2015-08-24 17:42:18.000000000 +0200
+++ new/pycadf-2.1.0/pycadf.egg-info/requires.txt 2016-02-17 19:02:00.000000000 +0100
@@ -1,4 +1,5 @@
-oslo.config>=2.1.0 # Apache-2.0
-oslo.serialization>=1.4.0 # Apache-2.0
+oslo.config>=3.4.0
+oslo.serialization>=1.10.0
pytz>=2013.6
six>=1.9.0
+debtcollector>=1.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/requirements.txt new/pycadf-2.1.0/requirements.txt
--- old/pycadf-1.1.0/requirements.txt 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/requirements.txt 2016-02-17 19:01:37.000000000 +0100
@@ -1,7 +1,8 @@
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-oslo.config>=2.1.0 # Apache-2.0
-oslo.serialization>=1.4.0 # Apache-2.0
-pytz>=2013.6
-six>=1.9.0
+oslo.config>=3.4.0 # Apache-2.0
+oslo.serialization>=1.10.0 # Apache-2.0
+pytz>=2013.6 # MIT
+six>=1.9.0 # MIT
+debtcollector>=1.2.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/setup.cfg new/pycadf-2.1.0/setup.cfg
--- old/pycadf-1.1.0/setup.cfg 2015-08-24 17:42:19.000000000 +0200
+++ new/pycadf-2.1.0/setup.cfg 2016-02-17 19:02:00.000000000 +0100
@@ -14,9 +14,7 @@
License :: OSI Approved :: Apache Software License
Operating System :: OS Independent
Programming Language :: Python
- Programming Language :: Python :: 2.6
Programming Language :: Python :: 2.7
- Programming Language :: Python :: 3.3
Programming Language :: Python :: 3.4
[files]
@@ -47,7 +45,7 @@
warnerrors = True
[egg_info]
-tag_build =
-tag_svn_revision = 0
tag_date = 0
+tag_svn_revision = 0
+tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/setup.py new/pycadf-2.1.0/setup.py
--- old/pycadf-1.1.0/setup.py 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/setup.py 2016-02-17 19:01:37.000000000 +0100
@@ -25,5 +25,5 @@
pass
setuptools.setup(
- setup_requires=['pbr>=1.3'],
+ setup_requires=['pbr>=1.8'],
pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/test-requirements.txt new/pycadf-2.1.0/test-requirements.txt
--- old/pycadf-1.1.0/test-requirements.txt 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/test-requirements.txt 2016-02-17 19:01:37.000000000 +0100
@@ -3,15 +3,16 @@
# process, which may cause wedges in the gate later.
# Hacking already pins down pep8, pyflakes and flake8
hacking<0.11,>=0.10.0
+flake8-docstrings==0.2.1.post1 # MIT
-coverage>=3.6
-discover
-fixtures>=1.3.1
+coverage>=3.6 # Apache-2.0
+discover # BSD
+fixtures>=1.3.1 # Apache-2.0/BSD
oslotest>=1.10.0 # Apache-2.0
-python-subunit>=0.0.18
-testrepository>=0.0.18
-testtools>=1.4.0
+python-subunit>=0.0.18 # Apache-2.0/BSD
+testrepository>=0.0.18 # Apache-2.0/BSD
+testtools>=1.4.0 # MIT
# this is required for the docs build jobs
-oslosphinx>=2.5.0 # Apache-2.0
-sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2
+oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0
+sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 # BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycadf-1.1.0/tox.ini new/pycadf-2.1.0/tox.ini
--- old/pycadf-1.1.0/tox.ini 2015-08-24 17:41:43.000000000 +0200
+++ new/pycadf-2.1.0/tox.ini 2016-02-17 19:01:37.000000000 +0100
@@ -1,14 +1,9 @@
[tox]
minversion = 1.6
-skipsdist = True
-envlist = py26,py27,py33,py34,pep8
+envlist = py34,py27,pep8
[testenv]
-setenv = VIRTUAL_ENV={envdir}
-deps = -r{toxinidir}/requirements.txt
- -r{toxinidir}/test-requirements.txt
-install_command = pip install -U {opts} {packages}
-usedevelop = True
+deps = -r{toxinidir}/test-requirements.txt
commands = python setup.py testr --slowest --testr-args='{posargs}'
[testenv:pep8]
@@ -18,7 +13,6 @@
commands = python setup.py build_sphinx
[testenv:cover]
-setenv = VIRTUAL_ENV={envdir}
commands = python setup.py testr --coverage
[testenv:venv]
@@ -29,7 +23,23 @@
[flake8]
show-source = True
-ignore = H405,H904
+# H405: Multi line docstrings should start with a one line summary followed by
+# an empty line.
+# D100: Missing docstring in public module
+# D101: Missing docstring in public class
+# D102: Missing docstring in public method
+# D103: Missing docstring in public function
+# D104: Missing docstring in public package
+# D105: Missing docstring in magic method
+# D200: One-line docstring should fit on one line with quotes
+# D202: No blank lines allowed after function docstring
+# D203: 1 blank required before class docstring
+# D204: 1 blank line required after class docstring
+# D205: 1 blank line required between summary line and description
+# D208: Docstring is over-indented
+# D400: First line should end with a period
+# D401: First line should be in imperative mood
+ignore = H405,D100,D101,D102,D103,D104,D105,D200,D202,D203,D204,D205,D208,D400,D401
exclude = .tox,dist,doc,*.egg,build,./pycadf/openstack/common
[hacking]