)]}'
{"etc/openstack_deploy/env.d/aio_metal.yml.example":[{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"1aa4f415707f44cac549625a2b6278450e4f22d5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"container_skel:"},{"line_number":3,"context_line":"  aodh_container:"},{"line_number":4,"context_line":"    properties:"}],"source_content_type":"application/octet-stream","patch_set":49,"id":"3fa0c359_01af73e3","line":1,"updated":"2018-02-07 18:50:24.000000000","message":"It\u0027d be nice if we could provide a tool to generate this from the env.d stuff in-tree, rather than carry this static file which will need updating whenever we add more groups/services.","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"e7c388d80a6da71ed4bfd04ac0aa839dfc339484","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"container_skel:"},{"line_number":3,"context_line":"  aodh_container:"},{"line_number":4,"context_line":"    properties:"}],"source_content_type":"application/octet-stream","patch_set":49,"id":"3fa0c359_3c3bb4eb","line":1,"in_reply_to":"3fa0c359_01af73e3","updated":"2018-02-07 19:44:28.000000000","message":"probably for a later patch.","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"}],"playbooks/common-playbooks/nova.yml":[{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"52b4aa06abd7269f90a43e15e0ff8e24fb559a20","unresolved":false,"context_lines":[{"line_number":138,"context_line":"      tags:"},{"line_number":139,"context_line":"        - always"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    - name: Use local repos if present"},{"line_number":142,"context_line":"      stat:"},{"line_number":143,"context_line":"        path: /var/www/repo/openstackgit/"},{"line_number":144,"context_line":"      register: repo_is_local"},{"line_number":145,"context_line":"      tags:"},{"line_number":146,"context_line":"        - always"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    - name: Set urls for nova repos"},{"line_number":149,"context_line":"      set_fact:"},{"line_number":150,"context_line":"        openstack_repo_git_url: \"/var/www/repo/openstackgit\""},{"line_number":151,"context_line":"      when: repo_is_local.stat.isdir is defined and repo_is_local.stat.isdir"},{"line_number":152,"context_line":"      tags:"},{"line_number":153,"context_line":"        - always"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"  roles:"},{"line_number":156,"context_line":"    - role: \"os_nova\""}],"source_content_type":"text/x-yaml","patch_set":47,"id":"3fa0c359_ef211b4f","line":153,"range":{"start_line":141,"start_character":0,"end_line":153,"end_character":16},"updated":"2018-02-07 14:29:14.000000000","message":"Why is this being added?","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"aca585789123ad08e7b99543ae7b819be0743ece","unresolved":false,"context_lines":[{"line_number":138,"context_line":"      tags:"},{"line_number":139,"context_line":"        - always"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    - name: Use local repos if present"},{"line_number":142,"context_line":"      stat:"},{"line_number":143,"context_line":"        path: /var/www/repo/openstackgit/"},{"line_number":144,"context_line":"      register: repo_is_local"},{"line_number":145,"context_line":"      tags:"},{"line_number":146,"context_line":"        - always"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    - name: Set urls for nova repos"},{"line_number":149,"context_line":"      set_fact:"},{"line_number":150,"context_line":"        openstack_repo_git_url: \"/var/www/repo/openstackgit\""},{"line_number":151,"context_line":"      when: repo_is_local.stat.isdir is defined and repo_is_local.stat.isdir"},{"line_number":152,"context_line":"      tags:"},{"line_number":153,"context_line":"        - always"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"  roles:"},{"line_number":156,"context_line":"    - role: \"os_nova\""}],"source_content_type":"text/x-yaml","patch_set":47,"id":"3fa0c359_9a48d3cc","line":153,"range":{"start_line":141,"start_character":0,"end_line":153,"end_character":16},"in_reply_to":"3fa0c359_cfc0df2d","updated":"2018-02-07 15:09:24.000000000","message":"It\u0027s a snowflake, and not necessary for the implementation of an on metal test.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"8e161a8543164b21e92081f205105d0307cdda45","unresolved":false,"context_lines":[{"line_number":138,"context_line":"      tags:"},{"line_number":139,"context_line":"        - always"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    - name: Use local repos if present"},{"line_number":142,"context_line":"      stat:"},{"line_number":143,"context_line":"        path: /var/www/repo/openstackgit/"},{"line_number":144,"context_line":"      register: repo_is_local"},{"line_number":145,"context_line":"      tags:"},{"line_number":146,"context_line":"        - always"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    - name: Set urls for nova repos"},{"line_number":149,"context_line":"      set_fact:"},{"line_number":150,"context_line":"        openstack_repo_git_url: \"/var/www/repo/openstackgit\""},{"line_number":151,"context_line":"      when: repo_is_local.stat.isdir is defined and repo_is_local.stat.isdir"},{"line_number":152,"context_line":"      tags:"},{"line_number":153,"context_line":"        - always"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"  roles:"},{"line_number":156,"context_line":"    - role: \"os_nova\""}],"source_content_type":"text/x-yaml","patch_set":47,"id":"3fa0c359_cfc0df2d","line":153,"range":{"start_line":141,"start_character":0,"end_line":153,"end_character":16},"in_reply_to":"3fa0c359_ef211b4f","updated":"2018-02-07 14:36:17.000000000","message":"Use the local repo if it\u0027s present (because it\u0027s present), instead of cloning it.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"}],"playbooks/common-tasks/set-pip-upstream-url.yml":[{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"1aa4f415707f44cac549625a2b6278450e4f22d5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"- name: Set pip upstream URL"},{"line_number":33,"context_line":"  set_fact:"},{"line_number":34,"context_line":"    pip_upstream_url: \"https://bootstrap.pypa.io/get-pip.py\""},{"line_number":35,"context_line":"    pip_lock_to_internal_repo: false"},{"line_number":36,"context_line":"  when:"},{"line_number":37,"context_line":"    - pip_upstream_url !\u003d \"https://bootstrap.pypa.io/get-pip.py\""},{"line_number":38,"context_line":"    - (_repo_data_check.status | default(503)) !\u003d 200"}],"source_content_type":"text/x-yaml","patch_set":49,"id":"3fa0c359_817623a4","line":35,"updated":"2018-02-07 18:50:24.000000000","message":"I\u0027m a little confused why this is necessary to include in this patch? If this patch does not work without it, then what effect does it have on the container-deployment? Perhaps this needs to be in its own patch with its own explanation rather than mixed into this?","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"}],"scripts/gate-check-commit.sh":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"45e220ad055be13bac2aad1cda58ab2ece5b4ccc","unresolved":false,"context_lines":[{"line_number":146,"context_line":"# of hostnames."},{"line_number":147,"context_line":"# This is mandatory when rabbitmq runs on metal."},{"line_number":148,"context_line":"if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":149,"context_line":"  cat \u003c\u003c EOF \u003e /etc/hosts"},{"line_number":150,"context_line":"127.0.0.1 aio1"},{"line_number":151,"context_line":"127.0.1.1 aio1.openstack.local aio1"},{"line_number":152,"context_line":"EOF"},{"line_number":153,"context_line":"  echo \"aio1\" \u003e /etc/hostname"},{"line_number":154,"context_line":"  hostname aio1"},{"line_number":155,"context_line":"fi"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"if [[ \"${ACTION}\" \u003d\u003d \"varstest\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":38,"id":"7f96bb07_08bd41d7","line":154,"range":{"start_line":149,"start_character":0,"end_line":154,"end_character":15},"updated":"2018-01-15 16:18:59.000000000","message":"If this is required for rabbit we should move this into the rabbitmq role.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"b7f2fe71788d69d1dae309f082e94f54cd87d28f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    # Log some data about the instance and the rest of the system"},{"line_number":170,"context_line":"    log_instance_info"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    # TODO(evrardjp): Remove this."},{"line_number":173,"context_line":"    cat /etc/openstack_deploy/user_variables.yml"},{"line_number":174,"context_line":"    cat /etc/openstack_deploy/openstack_user_config.yml"},{"line_number":175,"context_line":"    cat /etc/openstack_deploy/conf.d/*.yml"}],"source_content_type":"text/x-sh","patch_set":38,"id":"9f91af0f_6be751e6","line":172,"updated":"2018-01-03 17:15:00.000000000","message":"this should be removed.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"eacaf9baf1aa3ebd83ba7eceb7764983b903db9c","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    # Log some data about the instance and the rest of the system"},{"line_number":170,"context_line":"    log_instance_info"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    # TODO(evrardjp): Remove this."},{"line_number":173,"context_line":"    cat /etc/openstack_deploy/user_variables.yml"},{"line_number":174,"context_line":"    cat /etc/openstack_deploy/openstack_user_config.yml"},{"line_number":175,"context_line":"    cat /etc/openstack_deploy/conf.d/*.yml"}],"source_content_type":"text/x-sh","patch_set":38,"id":"9f91af0f_ab62393d","line":172,"in_reply_to":"9f91af0f_6be751e6","updated":"2018-01-03 17:18:12.000000000","message":"agreed. Let\u0027s make this pass gates, and then I can remove it. It came out of a desperate move of finding out WHY it fails. Not really helping tbh.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"b7f2fe71788d69d1dae309f082e94f54cd87d28f","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # Prepare the hosts"},{"line_number":183,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":184,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":185,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":186,"context_line":"        cat /etc/openstack_deploy/openstack_inventory.json"},{"line_number":187,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":38,"id":"9f91af0f_ab06b985","line":184,"updated":"2018-01-03 17:15:00.000000000","message":"why the breakout? the same playbooks should be able to run no matter the scenario.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"a59e4d24caa3f7d7bb1e7248452dd362a31da2d2","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # Prepare the hosts"},{"line_number":183,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":184,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":185,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":186,"context_line":"        cat /etc/openstack_deploy/openstack_inventory.json"},{"line_number":187,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":38,"id":"7f96bb07_8822b151","line":184,"in_reply_to":"7f96bb07_547770a1","updated":"2018-01-15 16:17:51.000000000","message":"Yes i would (and do) run that playbook. The nspawn patch follows the same code path as everything else.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"0e1f68dfc10a09c9e4c9dab28e9dab904eeaffa3","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # Prepare the hosts"},{"line_number":183,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":184,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":185,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":186,"context_line":"        cat /etc/openstack_deploy/openstack_inventory.json"},{"line_number":187,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":38,"id":"7f96bb07_88ccf16a","line":184,"in_reply_to":"7f96bb07_8822b151","updated":"2018-01-15 16:22:45.000000000","message":"From an end user point of view they should be able to use the general purpose \"setup-everything.yml\" playbook and not have to  worry about calling things out of order.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"3384c0584ddf24debaeb6cc645eb706fe2b736c0","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # Prepare the hosts"},{"line_number":183,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":184,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":185,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":186,"context_line":"        cat /etc/openstack_deploy/openstack_inventory.json"},{"line_number":187,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":38,"id":"7f96bb07_547770a1","line":184,"in_reply_to":"7f96bb07_9612f908","updated":"2018-01-15 10:36:20.000000000","message":"Agreed, but the code path is wrong. On metal, do all things relevant to metal. That\u0027s your code path. You wouldn\u0027t run lxc-hosts for nspawn hosts right?","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"06080057920103094154c7df040db90920e0bb93","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # Prepare the hosts"},{"line_number":183,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":184,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":185,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":186,"context_line":"        cat /etc/openstack_deploy/openstack_inventory.json"},{"line_number":187,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":38,"id":"7f96bb07_9612f908","line":184,"in_reply_to":"9f91af0f_4b684d20","updated":"2018-01-12 22:45:02.000000000","message":"simpler or not we should test the system in it\u0027s entirety regardless for a given code path.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"eacaf9baf1aa3ebd83ba7eceb7764983b903db9c","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # Prepare the hosts"},{"line_number":183,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":184,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":185,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":186,"context_line":"        cat /etc/openstack_deploy/openstack_inventory.json"},{"line_number":187,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":38,"id":"9f91af0f_4b684d20","line":184,"in_reply_to":"9f91af0f_ab06b985","updated":"2018-01-03 17:18:12.000000000","message":"because we\u0027d run useless tasks and plays. This just makes things simpler. I expect people to be smart when using the plays anyway if they want to run on metal.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"b7f2fe71788d69d1dae309f082e94f54cd87d28f","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    # Prepare the infrastructure"},{"line_number":203,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-infrastructure.log\""},{"line_number":204,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"all_metal\" ]]; then"},{"line_number":205,"context_line":"        openstack-ansible unbound-install.yml"},{"line_number":206,"context_line":"        openstack-ansible repo-install.yml -e repo_build_git_reclone\u003dTrue"},{"line_number":207,"context_line":"        openstack-ansible memcached-install.yml galera-install.yml rabbitmq-install.yml etcd-install.yml ceph-install.yml"}],"source_content_type":"text/x-sh","patch_set":38,"id":"9f91af0f_cb09bd95","line":204,"updated":"2018-01-03 17:15:00.000000000","message":"same as above.","commit_id":"1a19c824f942af481e71ca4bbed00e8069076e57"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"52b4aa06abd7269f90a43e15e0ff8e24fb559a20","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  fi"},{"line_number":141,"context_line":"popd"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# Before going further, ensure we have consistent configuration"},{"line_number":144,"context_line":"# of hostnames."},{"line_number":145,"context_line":"# This is mandatory when rabbitmq runs on metal."},{"line_number":146,"context_line":"if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":147,"context_line":"  cat \u003c\u003c EOF \u003e /etc/hosts"},{"line_number":148,"context_line":"127.0.0.1 aio1"},{"line_number":149,"context_line":"127.0.1.1 aio1.openstack.local aio1"},{"line_number":150,"context_line":"EOF"},{"line_number":151,"context_line":"  echo \"aio1\" \u003e /etc/hostname"},{"line_number":152,"context_line":"  hostname aio1"},{"line_number":153,"context_line":"fi"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"if [[ \"${ACTION}\" \u003d\u003d \"varstest\" ]]; then"},{"line_number":156,"context_line":"  pushd \"${OSA_CLONE_DIR}/tests\""}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_8fd65727","line":153,"range":{"start_line":143,"start_character":0,"end_line":153,"end_character":2},"updated":"2018-02-07 14:29:14.000000000","message":"Perhaps this is better done in the AIO bootstrap?","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"8e161a8543164b21e92081f205105d0307cdda45","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  fi"},{"line_number":141,"context_line":"popd"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# Before going further, ensure we have consistent configuration"},{"line_number":144,"context_line":"# of hostnames."},{"line_number":145,"context_line":"# This is mandatory when rabbitmq runs on metal."},{"line_number":146,"context_line":"if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":147,"context_line":"  cat \u003c\u003c EOF \u003e /etc/hosts"},{"line_number":148,"context_line":"127.0.0.1 aio1"},{"line_number":149,"context_line":"127.0.1.1 aio1.openstack.local aio1"},{"line_number":150,"context_line":"EOF"},{"line_number":151,"context_line":"  echo \"aio1\" \u003e /etc/hostname"},{"line_number":152,"context_line":"  hostname aio1"},{"line_number":153,"context_line":"fi"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"if [[ \"${ACTION}\" \u003d\u003d \"varstest\" ]]; then"},{"line_number":156,"context_line":"  pushd \"${OSA_CLONE_DIR}/tests\""}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_cfd53fe7","line":153,"range":{"start_line":143,"start_character":0,"end_line":153,"end_character":2},"in_reply_to":"3fa0c359_8fd65727","updated":"2018-02-07 14:36:17.000000000","message":"Ok, but why?","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"9dd7ed90c3ef176845793f2f609fd8f9290b1895","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  fi"},{"line_number":141,"context_line":"popd"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# Before going further, ensure we have consistent configuration"},{"line_number":144,"context_line":"# of hostnames."},{"line_number":145,"context_line":"# This is mandatory when rabbitmq runs on metal."},{"line_number":146,"context_line":"if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":147,"context_line":"  cat \u003c\u003c EOF \u003e /etc/hosts"},{"line_number":148,"context_line":"127.0.0.1 aio1"},{"line_number":149,"context_line":"127.0.1.1 aio1.openstack.local aio1"},{"line_number":150,"context_line":"EOF"},{"line_number":151,"context_line":"  echo \"aio1\" \u003e /etc/hostname"},{"line_number":152,"context_line":"  hostname aio1"},{"line_number":153,"context_line":"fi"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"if [[ \"${ACTION}\" \u003d\u003d \"varstest\" ]]; then"},{"line_number":156,"context_line":"  pushd \"${OSA_CLONE_DIR}/tests\""}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_1b3b65eb","line":153,"range":{"start_line":143,"start_character":0,"end_line":153,"end_character":2},"in_reply_to":"3fa0c359_9a21b3fe","updated":"2018-02-07 16:35:58.000000000","message":"I am fine including this in the bootstrap-aio.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"aca585789123ad08e7b99543ae7b819be0743ece","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  fi"},{"line_number":141,"context_line":"popd"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# Before going further, ensure we have consistent configuration"},{"line_number":144,"context_line":"# of hostnames."},{"line_number":145,"context_line":"# This is mandatory when rabbitmq runs on metal."},{"line_number":146,"context_line":"if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":147,"context_line":"  cat \u003c\u003c EOF \u003e /etc/hosts"},{"line_number":148,"context_line":"127.0.0.1 aio1"},{"line_number":149,"context_line":"127.0.1.1 aio1.openstack.local aio1"},{"line_number":150,"context_line":"EOF"},{"line_number":151,"context_line":"  echo \"aio1\" \u003e /etc/hostname"},{"line_number":152,"context_line":"  hostname aio1"},{"line_number":153,"context_line":"fi"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"if [[ \"${ACTION}\" \u003d\u003d \"varstest\" ]]; then"},{"line_number":156,"context_line":"  pushd \"${OSA_CLONE_DIR}/tests\""}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_9a21b3fe","line":153,"range":{"start_line":143,"start_character":0,"end_line":153,"end_character":2},"in_reply_to":"3fa0c359_cfd53fe7","updated":"2018-02-07 15:09:24.000000000","message":"That way it\u0027s idempotent and as much of the config as possible is handled in ansible, not bash.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"52b4aa06abd7269f90a43e15e0ff8e24fb559a20","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # Prepare the hosts"},{"line_number":176,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":177,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":178,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":179,"context_line":"    else"},{"line_number":180,"context_line":"        openstack-ansible setup-hosts.yml -e osa_gather_facts\u003dFalse"},{"line_number":181,"context_line":"        ansible -m setup -a \u0027gather_subset\u003dnetwork,hardware,virtual\u0027 all 1\u003e${ANSIBLE_LOG_DIR}/facts-all.log"}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_cfc45f62","line":178,"range":{"start_line":177,"start_character":0,"end_line":178,"end_character":51},"updated":"2018-02-07 14:29:14.000000000","message":"This is not what we document as a process - perhaps it\u0027d be better to make setup-hosts.yml do the right things instead of hacking up the gate script?","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"aca585789123ad08e7b99543ae7b819be0743ece","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # Prepare the hosts"},{"line_number":176,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":177,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":178,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":179,"context_line":"    else"},{"line_number":180,"context_line":"        openstack-ansible setup-hosts.yml -e osa_gather_facts\u003dFalse"},{"line_number":181,"context_line":"        ansible -m setup -a \u0027gather_subset\u003dnetwork,hardware,virtual\u0027 all 1\u003e${ANSIBLE_LOG_DIR}/facts-all.log"}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_fa50f760","line":178,"range":{"start_line":177,"start_character":0,"end_line":178,"end_character":51},"in_reply_to":"3fa0c359_6f2bcbea","updated":"2018-02-07 15:09:24.000000000","message":"In order for decisions like that to be made we would have to extend our deploy guide to describe the intimate details of each meta playbook.\n\nThe deployment method should be as consistent as possible regardless of whether it\u0027s one container tech or another, nor no containers.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"8e161a8543164b21e92081f205105d0307cdda45","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # Prepare the hosts"},{"line_number":176,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":177,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":178,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":179,"context_line":"    else"},{"line_number":180,"context_line":"        openstack-ansible setup-hosts.yml -e osa_gather_facts\u003dFalse"},{"line_number":181,"context_line":"        ansible -m setup -a \u0027gather_subset\u003dnetwork,hardware,virtual\u0027 all 1\u003e${ANSIBLE_LOG_DIR}/facts-all.log"}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_6f2bcbea","line":178,"range":{"start_line":177,"start_character":0,"end_line":178,"end_character":51},"in_reply_to":"3fa0c359_cfc45f62","updated":"2018-02-07 14:36:17.000000000","message":"I don\u0027t agree, human brain would do that. \"I don\u0027t need to run x, so I don\u0027t run x\".","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"f84aea3d91706bd72bcc6e188a90ff905cea5e09","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # Prepare the hosts"},{"line_number":176,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":177,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":178,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":179,"context_line":"    else"},{"line_number":180,"context_line":"        openstack-ansible setup-hosts.yml -e osa_gather_facts\u003dFalse"},{"line_number":181,"context_line":"        ansible -m setup -a \u0027gather_subset\u003dnetwork,hardware,virtual\u0027 all 1\u003e${ANSIBLE_LOG_DIR}/facts-all.log"}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_fb71d9df","line":178,"range":{"start_line":177,"start_character":0,"end_line":178,"end_character":51},"in_reply_to":"3fa0c359_fa50f760","updated":"2018-02-07 16:34:57.000000000","message":"I don\u0027t think it\u0027s the way forward to ensure this in the code. I\u0027d rather document properly.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"52b4aa06abd7269f90a43e15e0ff8e24fb559a20","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # Prepare the infrastructure"},{"line_number":188,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-infrastructure.log\""},{"line_number":189,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":190,"context_line":"        openstack-ansible unbound-install.yml"},{"line_number":191,"context_line":"        openstack-ansible repo-install.yml"},{"line_number":192,"context_line":"        openstack-ansible memcached-install.yml galera-install.yml rabbitmq-install.yml etcd-install.yml ceph-install.yml"},{"line_number":193,"context_line":"    else"},{"line_number":194,"context_line":"        openstack-ansible setup-infrastructure.yml -e osa_gather_facts\u003dFalse"},{"line_number":195,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_4fae0f99","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":121},"updated":"2018-02-07 14:29:14.000000000","message":"This is not what we document as a process - perhaps it\u0027d be better to make setup-hosts.yml do the right things instead of hacking up the gate script?","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"8e161a8543164b21e92081f205105d0307cdda45","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # Prepare the infrastructure"},{"line_number":188,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-infrastructure.log\""},{"line_number":189,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":190,"context_line":"        openstack-ansible unbound-install.yml"},{"line_number":191,"context_line":"        openstack-ansible repo-install.yml"},{"line_number":192,"context_line":"        openstack-ansible memcached-install.yml galera-install.yml rabbitmq-install.yml etcd-install.yml ceph-install.yml"},{"line_number":193,"context_line":"    else"},{"line_number":194,"context_line":"        openstack-ansible setup-infrastructure.yml -e osa_gather_facts\u003dFalse"},{"line_number":195,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":47,"id":"3fa0c359_cf4a1fab","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":121},"in_reply_to":"3fa0c359_4fae0f99","updated":"2018-02-07 14:36:17.000000000","message":"See above.","commit_id":"b2a5f6c208017ebce531a4dd8cf12b03082feceb"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"1aa4f415707f44cac549625a2b6278450e4f22d5","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    # Log some data about the instance and the rest of the system"},{"line_number":168,"context_line":"    log_instance_info"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # Once setup-hosts is complete, we should gather facts for everything"},{"line_number":171,"context_line":"    # (now including containers) so that the fact cache is complete for the"},{"line_number":172,"context_line":"    # remainder of the run."},{"line_number":173,"context_line":"    ansible -m setup -a \u0027gather_subset\u003dnetwork,hardware,virtual\u0027 all 1\u003e${ANSIBLE_LOG_DIR}/facts-all.log"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # Prepare the infrastructure"},{"line_number":176,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-infrastructure.log\""}],"source_content_type":"text/x-sh","patch_set":49,"id":"3fa0c359_e6a61d54","side":"PARENT","line":173,"range":{"start_line":170,"start_character":0,"end_line":173,"end_character":103},"updated":"2018-02-07 18:50:24.000000000","message":"The fact gathering works here regardless of the scenario. For the metal use-case it just refreshes the facts after the setup-hosts play, which I don\u0027t think is a bad thing.","commit_id":"c62647e8d4efece15357fd609b07b19bfa129c1e"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"c37a7b3a1f9600172215ea0ae926ffcb16d1535a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"3fa0c359_bc1b4419","updated":"2018-02-07 19:25:14.000000000","message":"FYI, with all the changes in this file reverted - the only error I hit is at the end:\n\nTASK [os_tempest : Create tempest directories] *****************************************************************************************************************************************************\nWednesday 07 February 2018  19:22:51 +0000 (0:00:00.309)       0:19:47.968 ****\nfailed: [aio1] (item\u003d{\u0027path\u0027: \u0027/var/log/utility\u0027, \u0027when\u0027: \u0027not tempest_log_dir_exists.stat.exists\u0027}) \u003d\u003e {\"changed\": false, \"gid\": 0, \"group\": \"root\", \"item\": {\"path\": \"/var/log/utility\", \"when\": \"\nnot tempest_log_dir_exists.stat.exists\"}, \"mode\": \"0777\", \"msg\": \"/var/log/utility already exists as a link\", \"owner\": \"root\", \"path\": \"/var/log/utility\", \"size\": 27, \"state\": \"link\", \"uid\": 0}\nchanged: [aio1] \u003d\u003e (item\u003d{\u0027path\u0027: \u0027/root/.tempest/etc\u0027})\nok: [aio1] \u003d\u003e (item\u003d{\u0027path\u0027: \u0027/opt/cache/files\u0027})","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"1aa4f415707f44cac549625a2b6278450e4f22d5","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    # Prepare the hosts"},{"line_number":164,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-hosts.log\""},{"line_number":165,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":166,"context_line":"        openstack-ansible openstack-hosts-setup.yml"},{"line_number":167,"context_line":"    else"},{"line_number":168,"context_line":"        openstack-ansible setup-hosts.yml -e osa_gather_facts\u003dFalse"},{"line_number":169,"context_line":"        ansible -m setup -a \u0027gather_subset\u003dnetwork,hardware,virtual\u0027 all 1\u003e${ANSIBLE_LOG_DIR}/facts-all.log"},{"line_number":170,"context_line":"    fi"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    # Log some data about the instance and the rest of the system"},{"line_number":173,"context_line":"    log_instance_info"}],"source_content_type":"text/x-sh","patch_set":49,"id":"3fa0c359_a6c1f5e6","line":170,"range":{"start_line":165,"start_character":0,"end_line":170,"end_character":6},"updated":"2018-02-07 18:50:24.000000000","message":"This modification is unnecessary and actually introduces a regression.\n\n1. Regression: security-hardening.yml is not run\n2. It is unnecessary as when setup-hosts hits the container host/container create plays it finds no members in the \u0027lxc_hosts\u0027 group, so the plays are skipped.","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"1aa4f415707f44cac549625a2b6278450e4f22d5","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # Prepare the infrastructure"},{"line_number":176,"context_line":"    export ANSIBLE_LOG_PATH\u003d\"${ANSIBLE_LOG_DIR}/setup-infrastructure.log\""},{"line_number":177,"context_line":"    if [[ \"${SCENARIO}\" \u003d\u003d \"aio_metal\" ]]; then"},{"line_number":178,"context_line":"        openstack-ansible unbound-install.yml"},{"line_number":179,"context_line":"        openstack-ansible repo-install.yml"},{"line_number":180,"context_line":"        openstack-ansible memcached-install.yml galera-install.yml rabbitmq-install.yml etcd-install.yml ceph-install.yml"},{"line_number":181,"context_line":"    else"},{"line_number":182,"context_line":"        openstack-ansible setup-infrastructure.yml -e osa_gather_facts\u003dFalse"},{"line_number":183,"context_line":"    fi"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    # Log some data about the instance and the rest of the system"},{"line_number":186,"context_line":"    log_instance_info"}],"source_content_type":"text/x-sh","patch_set":49,"id":"3fa0c359_e13047eb","line":183,"range":{"start_line":177,"start_character":0,"end_line":183,"end_character":6},"updated":"2018-02-07 18:50:24.000000000","message":"I don\u0027t see why this is necessary. This is effectively duplicating the contents of setup-infrastructure, but without the haproxy setup. The haproxy host group is empty, so it is skipped anyway.","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"}],"tests/roles/bootstrap-host/tasks/prepare_hostname.yml":[{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"2d48073490a5e4e04ebaa2863f9464dcef1a580d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    content: |"},{"line_number":19,"context_line":"      127.0.0.1 aio1"},{"line_number":20,"context_line":"      127.0.1.1 aio1.openstack.local aio1"},{"line_number":21,"context_line":"    dest: /etc/hostname"},{"line_number":22,"context_line":"    backup: yes"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"- name: Ensure hostname is set"}],"source_content_type":"text/x-yaml","patch_set":49,"id":"3fa0c359_edea67aa","line":21,"range":{"start_line":21,"start_character":10,"end_line":21,"end_character":23},"updated":"2018-02-08 11:49:01.000000000","message":"I think this was meant to be /etc/hosts? Then another task should change the hostname file to contain just \u0027aio1\u0027?","commit_id":"f790d1b1fd879352087fb31d0ebab870e21ab47f"}],"zuul.d/project.yaml":[{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"4468e22e6769c091b782237966ef8e45e9c3eabe","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        - openstack-ansible-deploy-ceph-centos-7"},{"line_number":26,"context_line":"        - openstack-ansible-deploy-ceph-ubuntu-xenial"},{"line_number":27,"context_line":"        - openstack-ansible-deploy-ceph-opensuse-423"},{"line_number":28,"context_line":"        - openstack-ansible-deploy-all_metal-ubuntu-xenial"},{"line_number":29,"context_line":"    experimental:"},{"line_number":30,"context_line":"      jobs:"},{"line_number":31,"context_line":"        - openstack-ansible-deploy-octavia-ubuntu-xenial"}],"source_content_type":"text/x-yaml","patch_set":44,"id":"5f93b717_963fd485","line":28,"range":{"start_line":28,"start_character":10,"end_line":28,"end_character":58},"updated":"2018-02-01 12:59:33.000000000","message":"Given the future involving multiple container technologies, perhaps the name should instead be:\n\nopenstack-ansible-deploy-aio_no_containers-ubuntu-xenial\n\nand the container deployments can be\n\nopenstack-ansible-deploy-aio_lxc_containers-ubuntu-xenial\nopenstack-ansible-deploy-aio_nspawn_containers-ubuntu-xenial\n\nThat way we have a consistent naming method, and still cater to multiple scenarios for each container deployment method?","commit_id":"e123656cf6bc91e76e7b0e1fd32e29fe3c27af47"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"13d037db5a1d79a7f827c369ed89692a53d804d8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        - openstack-ansible-deploy-ceph-centos-7"},{"line_number":26,"context_line":"        - openstack-ansible-deploy-ceph-ubuntu-xenial"},{"line_number":27,"context_line":"        - openstack-ansible-deploy-ceph-opensuse-423"},{"line_number":28,"context_line":"        - openstack-ansible-deploy-all_metal-ubuntu-xenial"},{"line_number":29,"context_line":"    experimental:"},{"line_number":30,"context_line":"      jobs:"},{"line_number":31,"context_line":"        - openstack-ansible-deploy-octavia-ubuntu-xenial"}],"source_content_type":"text/x-yaml","patch_set":44,"id":"5f93b717_fc863266","line":28,"range":{"start_line":28,"start_character":10,"end_line":28,"end_character":58},"in_reply_to":"5f93b717_963fd485","updated":"2018-02-01 16:55:17.000000000","message":"I think we shouldn\u0027t do aio_lxc_containers, because it would break the upgrades. So we\u0027d need meta names to work, so we break add more extra wiring for nothing.\n\nSo I don\u0027t think consistency is something we should reach.","commit_id":"e123656cf6bc91e76e7b0e1fd32e29fe3c27af47"}]}
