)]}'
{"etc/neutron.conf":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"cb50d0d5cc3bb840ec4984c3aedba89594266b17","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"# Default Subnet Pool to be used for IPv6 subnet-allocation."},{"line_number":150,"context_line":"# Specifies by UUID the pool to be used in case of subnet-create being"},{"line_number":151,"context_line":"# called without CIDR or subnet-pool ID. Set to \"prefix_delegation\""},{"line_number":152,"context_line":"# to enable IPv6 Prefix Delegation in a PD-capable environment."},{"line_number":153,"context_line":"# default_ipv6_subnet_pool \u003d"},{"line_number":154,"context_line":""}],"source_content_type":"text/plain","patch_set":3,"id":"fa963961_b6a68bbf","side":"PARENT","line":151,"updated":"2015-03-27 18:39:08.000000000","message":"I didn\u0027t catch this in the review that added this.  The semantics aren\u0027t quite described correctly here and I didn\u0027t realize it until I went to add the implementation.  If a default pool is configured here, it will be used even if a CIDR *is* also specified with the subnet create.  It would be very strange to use a different pool depending on if a CIDR was specified or not.","commit_id":"97e90b4efa35da5510da120f508a7652093790d1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"47ecdef47c13871430937cf4175f225b4470ad46","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"# Default Subnet Pool to be used for IPv6 subnet-allocation."},{"line_number":150,"context_line":"# Specifies by UUID the pool to be used in case of subnet-create being"},{"line_number":151,"context_line":"# called without CIDR or subnet-pool ID. Set to \"prefix_delegation\""},{"line_number":152,"context_line":"# to enable IPv6 Prefix Delegation in a PD-capable environment."},{"line_number":153,"context_line":"# default_ipv6_subnet_pool \u003d"},{"line_number":154,"context_line":""}],"source_content_type":"text/plain","patch_set":3,"id":"fa963961_f6d8931f","side":"PARENT","line":151,"in_reply_to":"fa963961_b6a68bbf","updated":"2015-03-27 18:40:47.000000000","message":"I did not quite close my last comment.  This may not make sense with prefix delegation.  What PD code will need to do is add a constraint that a CIDR is not present in the subnet create request by raising a bad request exception on its own.","commit_id":"97e90b4efa35da5510da120f508a7652093790d1"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95a8759cd4d3021ccf7a35733eef6727e8f8e226","unresolved":false,"context_lines":[{"line_number":160,"context_line":"# called without a subnet-pool ID.  Set to \"prefix_delegation\""},{"line_number":161,"context_line":"# to enable IPv6 Prefix Delegation in a PD-capable environment."},{"line_number":162,"context_line":"# See the description for default_ipv4_subnet_pool for more information."},{"line_number":163,"context_line":"# default_ipv6_subnet_pool \u003d"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d items for MTU selection and advertisement \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":166,"context_line":"# Advertise MTU.  If True, effort is made to advertise MTU"}],"source_content_type":"text/plain","patch_set":4,"id":"da9b358b_437316b2","line":163,"updated":"2015-03-30 11:28:53.000000000","message":"In previous blueprints (in particular service type) we faced a similar situation - configuration values dependent on database entries.\nThis has resulted in endless discussions, reverts, and angry people getting angrier and angrier...\n\nThe point that was being made was simply that configuration files are usually generated and managed through tools like puppet, chef or ansible, and then pushed to the respective hosts. Adding a step that requires database access prior to compiling the configuration files added complexity to the workflow.\n\nIn other work items where I had to implement a \"default\" object, I used two different approaches which you might consider:\n1 - set a \"default\" boolean attribute on the subnet pools table. You will also need to implement the logic to ensure only one record at each time can be default (or use a unique constraint but set the value to the pool\u0027s id when default is false)\n2 - specify in the config file a list of prefixes for the default subnet pool, and then use it for building or updating the default pool, which will have a predefined identifier - like \u0027default_pool\u0027","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"004ca0f50489f0d5c553724a89f7041a1570f2e1","unresolved":false,"context_lines":[{"line_number":160,"context_line":"# called without a subnet-pool ID.  Set to \"prefix_delegation\""},{"line_number":161,"context_line":"# to enable IPv6 Prefix Delegation in a PD-capable environment."},{"line_number":162,"context_line":"# See the description for default_ipv4_subnet_pool for more information."},{"line_number":163,"context_line":"# default_ipv6_subnet_pool \u003d"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d items for MTU selection and advertisement \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":166,"context_line":"# Advertise MTU.  If True, effort is made to advertise MTU"}],"source_content_type":"text/plain","patch_set":4,"id":"da9b358b_3135eed9","line":163,"in_reply_to":"da9b358b_437316b2","updated":"2015-03-30 17:38:19.000000000","message":"In my experience as a deployer, the database and the configuration files are never finished.  They are both a work in progress.  I\u0027m sure that someone who insists that the config files be written in stone is facing other, more serious problems.\n\nI can\u0027t keep angry people from getting angry.  It really isn\u0027t feasible to make this change and get this in for Kilo.  So, we can either do this and support the use case for Kilo or keep it out.  At this point, I don\u0027t have the fight in me for this, so whatever happens will happen.","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"edbde2b2d263034f117dc9374a2d9fa5b10f7248","unresolved":false,"context_lines":[{"line_number":146,"context_line":"# Maximum number of routes per router"},{"line_number":147,"context_line":"# max_routes \u003d 30"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"# Default Subnet Pool to be used for IPv4 subnet-allocation."},{"line_number":150,"context_line":"# Specifies by UUID the pool to be used in case of subnet-create being called"},{"line_number":151,"context_line":"# without a subnet-pool ID.  The default of None means that no pool will be"},{"line_number":152,"context_line":"# used unless passed explicitly to subnet create.  If no pool is used, then a"}],"source_content_type":"text/plain","patch_set":5,"id":"da9b358b_ca04c07f","line":149,"updated":"2015-03-31 21:13:59.000000000","message":"At different places, I\u0027ve installed internal add-ons to Neutron relied on this type of behavior.  When we embed references to database data in the config files we create a strange bootstrapping problem.  Basically the only way to bring up the system is start enough of it to get the necessary resource UUIDs to then stop/reconfig/restart the process.  Different config management systems handle this with varying ease/success.\n\nI think as we continue work, we should look at ways of actually encoding the default in database and have the database enforce this constraint.","commit_id":"7d2fd3877c67a9ab1c4219e4aafd35bac317c01d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"81eb5efa411712139ec0802c5da9a6f212bc4a73","unresolved":false,"context_lines":[{"line_number":146,"context_line":"# Maximum number of routes per router"},{"line_number":147,"context_line":"# max_routes \u003d 30"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"# Default Subnet Pool to be used for IPv4 subnet-allocation."},{"line_number":150,"context_line":"# Specifies by UUID the pool to be used in case of subnet-create being called"},{"line_number":151,"context_line":"# without a subnet-pool ID.  The default of None means that no pool will be"},{"line_number":152,"context_line":"# used unless passed explicitly to subnet create.  If no pool is used, then a"}],"source_content_type":"text/plain","patch_set":5,"id":"da9b358b_2dff9435","line":149,"in_reply_to":"da9b358b_0d3610e6","updated":"2015-03-31 22:02:32.000000000","message":"Kevin, I agree with you.  When I get a few other things buttoned up, I will revisit this.  For now, I\u0027m constrained from going very far with this.\n\nMaybe there is consolation in knowing that this is an optional new extra feature.  Neutron can be fully functional -- minus this feature -- before creating the pool.","commit_id":"7d2fd3877c67a9ab1c4219e4aafd35bac317c01d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4b26ad046aaf2c0f6d207960cff6ee2cc4bee32f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"# Maximum number of routes per router"},{"line_number":147,"context_line":"# max_routes \u003d 30"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"# Default Subnet Pool to be used for IPv4 subnet-allocation."},{"line_number":150,"context_line":"# Specifies by UUID the pool to be used in case of subnet-create being called"},{"line_number":151,"context_line":"# without a subnet-pool ID.  The default of None means that no pool will be"},{"line_number":152,"context_line":"# used unless passed explicitly to subnet create.  If no pool is used, then a"}],"source_content_type":"text/plain","patch_set":5,"id":"da9b358b_0dacd032","line":149,"in_reply_to":"da9b358b_2dff9435","updated":"2015-03-31 22:05:15.000000000","message":"Sorry, I meant @Mark.  @Kevin\u0027s reply snuck in there and made me address the wrong person.  :|","commit_id":"7d2fd3877c67a9ab1c4219e4aafd35bac317c01d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a53bdf3582729cbfca7428c9f0d31ab33b8fe1dc","unresolved":false,"context_lines":[{"line_number":146,"context_line":"# Maximum number of routes per router"},{"line_number":147,"context_line":"# max_routes \u003d 30"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"# Default Subnet Pool to be used for IPv4 subnet-allocation."},{"line_number":150,"context_line":"# Specifies by UUID the pool to be used in case of subnet-create being called"},{"line_number":151,"context_line":"# without a subnet-pool ID.  The default of None means that no pool will be"},{"line_number":152,"context_line":"# used unless passed explicitly to subnet create.  If no pool is used, then a"}],"source_content_type":"text/plain","patch_set":5,"id":"da9b358b_0d3610e6","line":149,"in_reply_to":"da9b358b_ca04c07f","updated":"2015-03-31 21:45:47.000000000","message":"an admin API for setting defaults!","commit_id":"7d2fd3877c67a9ab1c4219e4aafd35bac317c01d"}],"neutron/api/v2/attributes.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95a8759cd4d3021ccf7a35733eef6727e8f8e226","unresolved":false,"context_lines":[{"line_number":773,"context_line":"                          \u0027allow_put\u0027: False,"},{"line_number":774,"context_line":"                          \u0027default\u0027: ATTR_NOT_SPECIFIED,"},{"line_number":775,"context_line":"                          \u0027required_by_policy\u0027: False,"},{"line_number":776,"context_line":"                          \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":777,"context_line":"                          \u0027is_visible\u0027: True},"},{"line_number":778,"context_line":"        \u0027prefixlen\u0027: {\u0027allow_post\u0027: True,"},{"line_number":779,"context_line":"                      \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_63261a6a","line":776,"updated":"2015-03-30 11:28:53.000000000","message":"none should always been allowed?","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"004ca0f50489f0d5c553724a89f7041a1570f2e1","unresolved":false,"context_lines":[{"line_number":773,"context_line":"                          \u0027allow_put\u0027: False,"},{"line_number":774,"context_line":"                          \u0027default\u0027: ATTR_NOT_SPECIFIED,"},{"line_number":775,"context_line":"                          \u0027required_by_policy\u0027: False,"},{"line_number":776,"context_line":"                          \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":777,"context_line":"                          \u0027is_visible\u0027: True},"},{"line_number":778,"context_line":"        \u0027prefixlen\u0027: {\u0027allow_post\u0027: True,"},{"line_number":779,"context_line":"                      \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_71b01644","line":776,"in_reply_to":"da9b358b_63261a6a","updated":"2015-03-30 17:38:19.000000000","message":"I don\u0027t understand.  As far as I know, \"not specified\" was always allowed but if the value was specified explicitly then it would be validated as a uuid.  Now, we need to allow explicitly specifying None.","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"}],"neutron/common/config.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95a8759cd4d3021ccf7a35733eef6727e8f8e226","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               help\u003d_(\"Maximum number of fixed ips per port\")),"},{"line_number":74,"context_line":"    cfg.StrOpt(\u0027default_ipv4_subnet_pool\u0027, default\u003dNone,"},{"line_number":75,"context_line":"               help\u003d_(\"Default IPv4 subnet-pool to be used for automatic \""},{"line_number":76,"context_line":"                      \"subnet CIDR allocation\")),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027default_ipv6_subnet_pool\u0027, default\u003dNone,"},{"line_number":78,"context_line":"               help\u003d_(\"Default IPv6 subnet-pool to be used for automatic \""},{"line_number":79,"context_line":"                      \"subnet CIDR allocation\")),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_03e50e08","line":76,"updated":"2015-03-30 11:28:53.000000000","message":"Could the \u0027Value\u0027 none be interpreted as stating that your default pool is the whole address space?\nIn that case I would probably set that as default address pool, and perhaps this could lead to a simpler logic.","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"54d111376dc5ab5d8e494ddc47b1950f9f1e30aa","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               help\u003d_(\"Maximum number of fixed ips per port\")),"},{"line_number":74,"context_line":"    cfg.StrOpt(\u0027default_ipv4_subnet_pool\u0027, default\u003dNone,"},{"line_number":75,"context_line":"               help\u003d_(\"Default IPv4 subnet-pool to be used for automatic \""},{"line_number":76,"context_line":"                      \"subnet CIDR allocation\")),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027default_ipv6_subnet_pool\u0027, default\u003dNone,"},{"line_number":78,"context_line":"               help\u003d_(\"Default IPv6 subnet-pool to be used for automatic \""},{"line_number":79,"context_line":"                      \"subnet CIDR allocation\")),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_756807f6","line":76,"in_reply_to":"da9b358b_03e50e08","updated":"2015-03-30 17:06:47.000000000","message":"I don\u0027t understand.  Do you want to ping me later?","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95a8759cd4d3021ccf7a35733eef6727e8f8e226","unresolved":false,"context_lines":[{"line_number":1265,"context_line":"                ip_version \u003d s.get(\u0027ip_version\u0027, attributes.ATTR_NOT_SPECIFIED)"},{"line_number":1266,"context_line":"                if not attributes.is_attr_set(ip_version):"},{"line_number":1267,"context_line":"                    msg \u003d _(\u0027ip_version must be specified in the absence of \u0027"},{"line_number":1268,"context_line":"                            \u0027cidr and subnetpool_id\u0027)"},{"line_number":1269,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027subnets\u0027, msg\u003dmsg)"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"            if ip_version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_63829a02","line":1268,"updated":"2015-03-30 11:28:53.000000000","message":"This message might be misleading if there is no default subnet pool configured, because the user will retry with an ip_version and then receive the error message at line 1278","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"004ca0f50489f0d5c553724a89f7041a1570f2e1","unresolved":false,"context_lines":[{"line_number":1265,"context_line":"                ip_version \u003d s.get(\u0027ip_version\u0027, attributes.ATTR_NOT_SPECIFIED)"},{"line_number":1266,"context_line":"                if not attributes.is_attr_set(ip_version):"},{"line_number":1267,"context_line":"                    msg \u003d _(\u0027ip_version must be specified in the absence of \u0027"},{"line_number":1268,"context_line":"                            \u0027cidr and subnetpool_id\u0027)"},{"line_number":1269,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027subnets\u0027, msg\u003dmsg)"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"            if ip_version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_11bc2a04","line":1268,"in_reply_to":"da9b358b_63829a02","updated":"2015-03-30 17:38:19.000000000","message":"That is true but I don\u0027t know how to do better.  Do you see a better way?  I can\u0027t choose which config value to look at until I know the ip_version.  I won\u0027t know that the configured subnet pool is None until I look at the config value.","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95a8759cd4d3021ccf7a35733eef6727e8f8e226","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"            else:"},{"line_number":1274,"context_line":"                subnetpool_id \u003d cfg.CONF.default_ipv6_subnet_pool"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"        if not attributes.is_attr_set(subnetpool_id):"},{"line_number":1277,"context_line":"            if not has_cidr:"},{"line_number":1278,"context_line":"                msg \u003d _(\u0027A cidr must be specified in the absence of a \u0027"},{"line_number":1279,"context_line":"                        \u0027subnet pool\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_63abba8a","line":1276,"updated":"2015-03-30 11:28:53.000000000","message":"At this stage you can just write:\n\nif not subnetpool_id:\n\nbecause the previous if block will either put a uuid or none in subnetpool_id","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"004ca0f50489f0d5c553724a89f7041a1570f2e1","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"            else:"},{"line_number":1274,"context_line":"                subnetpool_id \u003d cfg.CONF.default_ipv6_subnet_pool"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"        if not attributes.is_attr_set(subnetpool_id):"},{"line_number":1277,"context_line":"            if not has_cidr:"},{"line_number":1278,"context_line":"                msg \u003d _(\u0027A cidr must be specified in the absence of a \u0027"},{"line_number":1279,"context_line":"                        \u0027subnet pool\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_915f1a72","line":1276,"in_reply_to":"da9b358b_63abba8a","updated":"2015-03-30 17:38:19.000000000","message":"Done","commit_id":"d341bac719650ed4cc1d62193c3a476086ca029c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a5b14ba4225df6954fbc62c255f0a37d3f65b96e","unresolved":false,"context_lines":[{"line_number":1291,"context_line":"            subnet[\u0027subnet\u0027][\u0027cidr\u0027] \u003d \u0027%s/%s\u0027 % (net.network, net.prefixlen)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"        subnetpool_id \u003d s.get(\u0027subnetpool_id\u0027, attributes.ATTR_NOT_SPECIFIED)"},{"line_number":1294,"context_line":"        if subnetpool_id \u003d\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1295,"context_line":"            if has_cidr:"},{"line_number":1296,"context_line":"                ip_version \u003d net.version"},{"line_number":1297,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da9b358b_488be6c3","line":1294,"updated":"2015-03-31 22:32:18.000000000","message":"can you separate L1294-1308 out into a _get_subnetpool_id helper? Lot\u0027s of logic here not related too much to the rest of the function.","commit_id":"0a3edb8f38746323331d8f7ea4b098bbd643a5fc"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"12ca2e46ea333eef49b2fab9ba05dfc1baca11f2","unresolved":false,"context_lines":[{"line_number":1291,"context_line":"            subnet[\u0027subnet\u0027][\u0027cidr\u0027] \u003d \u0027%s/%s\u0027 % (net.network, net.prefixlen)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"        subnetpool_id \u003d s.get(\u0027subnetpool_id\u0027, attributes.ATTR_NOT_SPECIFIED)"},{"line_number":1294,"context_line":"        if subnetpool_id \u003d\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1295,"context_line":"            if has_cidr:"},{"line_number":1296,"context_line":"                ip_version \u003d net.version"},{"line_number":1297,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_8fdde172","line":1294,"in_reply_to":"da9b358b_488be6c3","updated":"2015-04-01 15:24:47.000000000","message":"Done","commit_id":"0a3edb8f38746323331d8f7ea4b098bbd643a5fc"}]}
