)]}'
{"ansible/group_vars/all.yml":[{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"04a995df571c3ed571352aa451786f2fa96ae988","unresolved":false,"context_lines":[{"line_number":21,"context_line":"###################"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# Which orchestration engine to use. Valid options are [ ANSIBLE, KUBERNETES ]"},{"line_number":24,"context_line":"orchestration_engine: \"ANSIBLE\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Valid options are [ COPY_ONCE, COPY_ALWAYS ]"},{"line_number":27,"context_line":"config_strategy: \"COPY_ALWAYS\""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bacf61ea_ecd10afd","line":24,"updated":"2016-07-28 13:42:28.000000000","message":"Like this solution.","commit_id":"09113f5c8dca139fab442e1591f07a50f4fabcd9"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"04a995df571c3ed571352aa451786f2fa96ae988","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# kolla-kubernetes"},{"line_number":49,"context_line":"####################"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] if orchestration_engine \u003d\u003d \u0027ANSIBLE\u0027 else \u00270.0.0.0\u0027 }}\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"####################"},{"line_number":54,"context_line":"# Database options"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bacf61ea_ecf8ea7e","line":51,"updated":"2016-07-28 13:42:28.000000000","message":"add the explanation here: why the k8s need use api_interface_address to `0.0.0.0`.","commit_id":"09113f5c8dca139fab442e1591f07a50f4fabcd9"}],"ansible/roles/common/tasks/config.yml":[{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"81c99d6ecd41c12af41cf694aa3fc6253d9e7d6f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7aa08908_e02378bb","line":76,"updated":"2016-06-13 11:27:59.000000000","message":"move this to the group_vars/all.yml like https://review.openstack.org/328755 does","commit_id":"adc6311491d561f9892ceff3a3754356e999c242"},{"author":{"_account_id":22143,"name":"David Wang","email":"dcwangmit01@gmail.com","username":"dcwangmit01"},"change_message_id":"4d538aaefa8a7e8b7dd9604fc7a03bc4d353ea2c","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7aa08908_0c418c63","line":76,"in_reply_to":"7aa08908_e02378bb","updated":"2016-06-13 18:11:28.000000000","message":"There was a discussion on how to approach this a few days ago.\n\nThis approach was how a few of us agreed upon (rhallisey, inc0, wirehead_, dcwangmit01).\n\nI\u0027ll bring this up in IRC after fixing the tests.  I\u0027ve got no problem moving it to groupvars/all.yml, but I want to make sure the people from the original discussion are on board.","commit_id":"adc6311491d561f9892ceff3a3754356e999c242"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"1eba5c8cb176616baba6b4dd441c21fab5dfe013","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5a9d85d2_a7ed51f1","line":76,"updated":"2016-06-21 08:02:47.000000000","message":"feedback?","commit_id":"af71b671db8b054da8219a8cca2378c8d95f0df4"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f2c472c8f5faac923a65940168b2e9ab28c721f1","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5a9d85d2_33d1f0fc","line":76,"updated":"2016-06-18 23:23:11.000000000","message":"why not try to put this into the groups/all.yml file?","commit_id":"af71b671db8b054da8219a8cca2378c8d95f0df4"},{"author":{"_account_id":10419,"name":"Ryan Hallisey","email":"rhallise@redhat.com","username":"rhallisey"},"change_message_id":"8caefbac96ec2792569382351d6bdb6dcfdad2b2","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3aaa91ec_d0561c5b","line":76,"in_reply_to":"3aaa91ec_80584658","updated":"2016-06-23 15:28:11.000000000","message":"looks like the gate show this not being set","commit_id":"af71b671db8b054da8219a8cca2378c8d95f0df4"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"58a26775ac25c4cdd895f7fd7b0cae7d3df43754","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3aaa91ec_81007367","line":76,"in_reply_to":"3aaa91ec_80584658","updated":"2016-06-25 10:21:28.000000000","message":"this is just like a evaluate.\n\non the other hand, why we should not put logic in the all.yml and we do have logic in the all.yml file. like\n\nhaproxy_enable_external_vip: \"{{ \u0027no\u0027 if kolla_external_vip_address \u003d\u003d kolla_internal_vip_address else \u0027yes\u0027 }}\"","commit_id":"af71b671db8b054da8219a8cca2378c8d95f0df4"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"b89ad2111c9769c0eea2a6a002fab177fa7c7b44","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3aaa91ec_80584658","line":76,"in_reply_to":"3aaa91ec_b27318b4","updated":"2016-06-21 17:31:32.000000000","message":"agree that logic should not go in all.yml in general.  I do wonder however, if we will have to replace this set_fact all across the code base - I see its only in common now.  If that is the way it will remain, then it seems fine where it is.","commit_id":"af71b671db8b054da8219a8cca2378c8d95f0df4"},{"author":{"_account_id":21996,"name":"Ken Wronkiewicz","email":"wh-openstack@wirewd.com","username":"bowtie"},"change_message_id":"661d5676f263d7be154b1b1a51843649e95e761a","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- name: Getting interface addresses"},{"line_number":75,"context_line":"  set_fact:"},{"line_number":76,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3aaa91ec_b27318b4","line":76,"in_reply_to":"5a9d85d2_a7ed51f1","updated":"2016-06-21 16:36:31.000000000","message":"I checked with inc0 in IRC.  In all.yml we don\u0027t put any logic, and this counts as logic.","commit_id":"af71b671db8b054da8219a8cca2378c8d95f0df4"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"d305406d7883e1d5420db7fd056aaf0833a0a292","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Getting interface addresses"},{"line_number":3,"context_line":"  set_fact:"},{"line_number":4,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"- name: Ensuring config directories exist"},{"line_number":7,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_af3b4eea","line":4,"updated":"2016-06-29 01:57:59.000000000","message":"this is more duplicated.","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"ed1209665487038fc83e434f663deb1bd9a8efde","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Getting interface addresses"},{"line_number":3,"context_line":"  set_fact:"},{"line_number":4,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"- name: Ensuring config directories exist"},{"line_number":7,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_7e0592c0","line":4,"updated":"2016-06-29 04:51:39.000000000","message":"this is the foundation PS to add this feature. Why not try to fix the redundant\nin this PS?","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":22143,"name":"David Wang","email":"dcwangmit01@gmail.com","username":"dcwangmit01"},"change_message_id":"f4de7c50bbc28be06320b6adb5623ed527cd83e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Getting interface addresses"},{"line_number":3,"context_line":"  set_fact:"},{"line_number":4,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"- name: Ensuring config directories exist"},{"line_number":7,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_92d4b5bd","line":4,"in_reply_to":"3aaa91ec_af3b4eea","updated":"2016-06-29 02:34:38.000000000","message":"Jeffrey,\n\nI acknowledge these 3 lines are redundant.  They follow a pattern that is very, very redundant... between the common role and mariadb role for example.  Look at \"Ensuring config directories exist\"... it is redundant with an equivalent task in mariadb.  There\u0027s way more like it in every role.\n\nIt\u0027d be great to remove the redundancy.  I\u0027m pretty new to Ansible so I don\u0027t want to make any structural changes.  We just need to get this patch through, even though these 3 lines are redundant.  However, to be practical there are a series of patches in both kolla and kolla-kube that are held up on this.\n\nI can promise a follow-on patch to fix these 3 lines.\n\n-dave","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"}],"ansible/roles/common/tasks/start.yml":[{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"31772898f02f757a144fca9eeb81552b2ae93576","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Getting interface addresses"},{"line_number":3,"context_line":"  set_fact:"},{"line_number":4,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"- name: Starting heka container"},{"line_number":7,"context_line":"  kolla_docker:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_0bb7d93a","line":4,"updated":"2016-06-29 13:22:03.000000000","message":"Yeah, that was my comment to put it in playbook. I don\u0027t think it\u0027s good idea to use hostvars/logic in all.yml. I\u0027d rather put logic in playbook","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"d305406d7883e1d5420db7fd056aaf0833a0a292","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Getting interface addresses"},{"line_number":3,"context_line":"  set_fact:"},{"line_number":4,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"- name: Starting heka container"},{"line_number":7,"context_line":"  kolla_docker:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_4f346afa","line":4,"updated":"2016-06-29 01:57:59.000000000","message":"ditto\n\nI still want to put this into group_vars/all.yml.  This is just variable\nassign, not logical.\n\nOr puth these into a single yml file, then include it in the config.yml and\nstart.yml, which will remove the redundance.","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":22143,"name":"David Wang","email":"dcwangmit01@gmail.com","username":"dcwangmit01"},"change_message_id":"f4de7c50bbc28be06320b6adb5623ed527cd83e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Getting interface addresses"},{"line_number":3,"context_line":"  set_fact:"},{"line_number":4,"context_line":"      api_interface_address:  \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"- name: Starting heka container"},{"line_number":7,"context_line":"  kolla_docker:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_9238353f","line":4,"in_reply_to":"3aaa91ec_4f346afa","updated":"2016-06-29 02:34:38.000000000","message":"Jeffrey,\n\nGiven some of the other comments, I don\u0027t think I should move it into group_vars/all.yaml.\n\n-dave","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"}],"ansible/roles/mariadb/templates/galera.cnf.j2":[{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"31772898f02f757a144fca9eeb81552b2ae93576","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{%- set wsrep_driver \u003d \u0027/usr/lib/galera/libgalera_smm.so\u0027 if kolla_base_distro \u003d\u003d \u0027ubuntu\u0027 else \u0027/usr/lib64/galera/libgalera_smm.so\u0027 %}"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"{#- Disable Galera if api_interface_address is not real, as in \"0.0.0.0\" #}"},{"line_number":4,"context_line":"{#- in the case of Kubernetes.  Otherwise, mariadb will fail to start #}"},{"line_number":5,"context_line":"{%- set wsrep_driver \u003d \u0027none\u0027 if api_interface_address \u003d\u003d \u00270.0.0.0\u0027 else wsrep_driver %}"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":8,"id":"3aaa91ec_abade5ea","line":3,"updated":"2016-06-29 13:22:03.000000000","message":"Soo...this is hacky as hell. We disable galera if bind address is 0.0.0.0...I\u0027d rather have variable that will define k8s or not k8s....also k8s has it\u0027s own repo for a reason, we shouldn\u0027t mix these two. If we split ansible out of main repo to kolla-ansible, this will remove requirement on kolla-ansible whatsoever in kolla-k8s. We shouldn\u0027t inject this dependency","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":22143,"name":"David Wang","email":"dcwangmit01@gmail.com","username":"dcwangmit01"},"change_message_id":"94a3b5a272cbe014e3e1efdf32cadf9312504cb9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{%- set wsrep_driver \u003d \u0027/usr/lib/galera/libgalera_smm.so\u0027 if kolla_base_distro \u003d\u003d \u0027ubuntu\u0027 else \u0027/usr/lib64/galera/libgalera_smm.so\u0027 %}"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"{#- Disable Galera if api_interface_address is not real, as in \"0.0.0.0\" #}"},{"line_number":4,"context_line":"{#- in the case of Kubernetes.  Otherwise, mariadb will fail to start #}"},{"line_number":5,"context_line":"{%- set wsrep_driver \u003d \u0027none\u0027 if api_interface_address \u003d\u003d \u00270.0.0.0\u0027 else wsrep_driver %}"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":8,"id":"3aaa91ec_c379e330","line":3,"in_reply_to":"3aaa91ec_abade5ea","updated":"2016-06-30 20:49:02.000000000","message":"Need to clarify... So make a new variable \"kolla-kubernetes\u003d(true|false)\" and make these IF statements based on the new variable rather than api_interface_address\u003d\u003d0.0.0.0 ?","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":21530,"name":"Mark Casey","email":"mark.casey@moddulo.us","username":"mark-casey"},"change_message_id":"4de5e1cffb7565ec670a575f1d4e3fbcfcd628d8","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"{#- Disable Galera if api_interface_address is not real, as in \"0.0.0.0\" #}"},{"line_number":4,"context_line":"{#- in the case of Kubernetes.  Otherwise, mariadb will fail to start #}"},{"line_number":5,"context_line":"{%- set wsrep_driver \u003d \u0027none\u0027 if api_interface_address \u003d\u003d \u00270.0.0.0\u0027 else wsrep_driver %}"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[mysqld]"},{"line_number":8,"context_line":"bind-address\u003d{{ api_interface_address }}"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"dada55a8_13400aa5","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":29},"updated":"2016-07-21 05:53:28.000000000","message":"imho this is the best plan but I think we should keep aware of future options so we don\u0027t back into a corner too far, as this is still a hack that we should work towards removing one day.\n\nWhat I mean by that is the Galera patch in MariaDB 10.0 is something like 16,000 additions across 300 files. Setting wsrep_provider to \u0027none\u0027 just hacks-off almost all of what is a huge patchset, puts us into much less traveled code-paths with potentially unheard of bugs, and doesn\u0027t perfectly disable wsrep anyway. You get some odd lines in logs (like \"WSREP: Read nil XID from storage engines, skipping position init\") and there are gems like this in the code (comment on the 5th line):\n\n\u003e    if (strcasecmp(wsrep_provider, WSREP_NONE))\n\u003e    {\n\u003e      WSREP_ERROR(\"wsrep_load(%s) failed: %s (%d). Reverting to no provider.\",\n\u003e                  wsrep_provider, strerror(rcode), rcode);\n\u003e      strcpy((char*)wsrep_provider, WSREP_NONE); // damn it\u0027s a dirty hack\n\u003e      (void) wsrep_init();\n\u003e      return rcode;\n\u003e    }\n\nAll that said, this use case is described in their docs exactly as we are using it, it has definitely been done before (at least outside of OpenStack), and it is *infinitely* better than treating a single-node cluster as if it isn\u0027t running wsrep at all. (For that reason and for project consistency, kolla-ansible could [should?] also do this when there is only one member in Ansible\u0027s host group for database [AIO]).\n\nAs far as the future goes, when Kolla upgrades to MariaDB 10.1 this will not be needed. After 10.1 there aren\u0027t separate packages for Galera/non anymore. Instead, Galera is a plugin you can optionally enable in any MariaDB package. So in single-node you just don\u0027t enable the Galera code at all (and don\u0027t set ANY wsrep_* options), and you get true standalone MariaDB. However going to 10.1 will be a lot of work and trying that upgrade now would probably grind this effort to a halt.","commit_id":"395fb5ef2946caf93773bcd93b67fecb404da5ea"},{"author":{"_account_id":21530,"name":"Mark Casey","email":"mark.casey@moddulo.us","username":"mark-casey"},"change_message_id":"4de5e1cffb7565ec670a575f1d4e3fbcfcd628d8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"wsrep_sst_method\u003dxtrabackup-v2"},{"line_number":35,"context_line":"wsrep_sst_auth\u003d{{ database_user }}:{{ database_password }}"},{"line_number":36,"context_line":"wsrep_slave_threads\u003d4"},{"line_number":37,"context_line":"wsrep_notify_cmd\u003d/usr/local/bin/wsrep-notify.sh"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"max_connections\u003d10000"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"dada55a8_bdaf4ee2","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":47},"updated":"2016-07-21 05:53:28.000000000","message":"For kolla-ansible, \u0027wsrep_notify_cmd\u0027 is only for haproxy in multinode, because haproxy needs help to detect when a DB node(/container) may be readonly while acting as a state donor to a recovering or new DB node. For this it renames the haproxy MySQL user (on that donor node) so that the haproxy service check fails and the node won\u0027t get SQL traffic until state is normal again and that user rename is reverted.\n\nFor kolla-k8s with a single DB node, the wsrep_local_status will never go to Donor so we never need to rename to block load balancer health checks. Also, with \"wsrep_provider \u003d \u0027none\u0027\", I\u0027m not even sure the variables involved will exist or be sane. Unless wsrep_local_status is always hard-set to \"Synced\" in this configuration, you could get unforeseen bad behaviors having this script in play, especially if kolla-k8s also recycles the existing haproxy MySQL user for K8s health checks.\n\nIf it is reasonable from an orchestration perspective, I think in kolla-k8s you could simply comment this line out of the config, not have Ansible render the template for this script into the mariadb image at all (but might as well keep the var change to HOST in the script\u0027s template)... and I\u0027m pretty sure it would be correct.\n\nFor the \"someday\" kolla-k8s with PetSet Galera that three or four people seem interested in... if k8s\u0027 health checks are sophisticated enough to check wsrep_local_status then this script still would not be needed in kolla-k8s because it would know if a Pod is not useable because it is a readonly donor. Hopefully a K8s community example exists or will exist that handles this specific issue, and in a way that isn\u0027t too at odds with any of our special needs like around bootstrapping. However if that K8s health check is limited to a mysql port/simple user-bind check, this script would then be needed again to get the Service to temporarily exclude Pods acting as donors if they go read only. In that case, we would either want to have k8s use the existing haproxy user for this, or if it\u0027s a different user in k8s then parameterize the LB_USER variable in the script template in addition to the HOST variable to work with both kolla-ansible and kolla-k8s.","commit_id":"395fb5ef2946caf93773bcd93b67fecb404da5ea"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"04a995df571c3ed571352aa451786f2fa96ae988","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{#- Disable Galera in the case of of Kubernetes as its not supported yet.  Otherwise, #}"},{"line_number":4,"context_line":"{#- mariadb will fail to start #}"},{"line_number":5,"context_line":"{%- set wsrep_driver \u003d \u0027none\u0027 if orchestration_engine \u003d\u003d \u0027KUBERNETES\u0027 else wsrep_driver %}"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[mysqld]"},{"line_number":8,"context_line":"bind-address\u003d{{ api_interface_address }}"},{"line_number":9,"context_line":"port\u003d{{ mariadb_port }}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"bacf61ea_4ce2d6d6","line":6,"updated":"2016-07-28 13:42:28.000000000","message":"will this be better?\n\n{% if orchestration_engine \u003d\u003d \u0027KUBERNETES\u0027 %}\n{% set wsrep_driver\u003d\u0027none\u0027 %}\n{% else %}\n{% set wsrep_driver \u003d \u0027/usr/lib/galera/libgalera_smm.so\u0027 if kolla_base_distro \u003d\u003d \u0027ubuntu\u0027 else \u0027/usr/lib64/galera/libgalera_smm.so\u0027 %}\n\notherwise, when if see \n\n{%- set wsrep_driver \u003d \u0027none\u0027 if orchestration_engine \u003d\u003d \u0027KUBERNETES\u0027 else wsrep_driver %}\n\nit takes me several seconds to find what\u0027s the original wsrep_driver is.","commit_id":"09113f5c8dca139fab442e1591f07a50f4fabcd9"},{"author":{"_account_id":10419,"name":"Ryan Hallisey","email":"rhallise@redhat.com","username":"rhallisey"},"change_message_id":"7f871200d81081fa51e787584728d6681cbe8afe","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{#- Disable Galera in the case of of Kubernetes as its not supported yet.  Otherwise, #}"},{"line_number":4,"context_line":"{#- mariadb will fail to start #}"},{"line_number":5,"context_line":"{%- set wsrep_driver \u003d \u0027none\u0027 if orchestration_engine \u003d\u003d \u0027KUBERNETES\u0027 else wsrep_driver %}"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[mysqld]"},{"line_number":8,"context_line":"bind-address\u003d{{ api_interface_address }}"},{"line_number":9,"context_line":"port\u003d{{ mariadb_port }}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"bacf61ea_cbddf715","line":6,"in_reply_to":"bacf61ea_4ce2d6d6","updated":"2016-07-28 19:59:02.000000000","message":"I\u0027d rather leave it the way it is :)","commit_id":"09113f5c8dca139fab442e1591f07a50f4fabcd9"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"04a995df571c3ed571352aa451786f2fa96ae988","unresolved":false,"context_lines":[{"line_number":20,"context_line":"# overridden to 0.0.0.0.  The only valid use case for this is"},{"line_number":21,"context_line":"# kolla-kubernetes (Galera out of scope), at which point it should"},{"line_number":22,"context_line":"# point to a Kubernetes Service."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"wsrep_cluster_address\u003dgcomm://{% if (groups[\u0027mariadb\u0027] | length) \u003e 1 %}{% for host in groups[\u0027mariadb\u0027] %}{{ hostvars[host][\u0027ansible_\u0027 + hostvars[host][\u0027api_interface\u0027]][\u0027ipv4\u0027][\u0027address\u0027] }}:{{ mariadb_wsrep_port }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"wsrep_provider_options\u003dgmcast.listen_addr\u003dtcp://{{ api_interface_address }}:{{ mariadb_wsrep_port }};ist.recv_addr\u003d{{ api_interface_address }}:{{ mariadb_ist_port }}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"bacf61ea_ec20ea4b","line":23,"updated":"2016-07-28 13:42:28.000000000","message":"should this remove? \n\nwe can move this to the group_vars/all.yml file rather then explain everywhere when use api_interface_address.","commit_id":"09113f5c8dca139fab442e1591f07a50f4fabcd9"}],"ansible/roles/mariadb/templates/wsrep-notify.sh.j2":[{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"04a995df571c3ed571352aa451786f2fa96ae988","unresolved":false,"context_lines":[{"line_number":5,"context_line":"PSWD\u003d{{ database_password }}"},{"line_number":6,"context_line":"# HOST will break if api_interface_address is overridden to 0.0.0.0."},{"line_number":7,"context_line":"# The only valid use case for this is kolla-kubernetes (Galera out of"},{"line_number":8,"context_line":"# scope), at which point it should point to a Kubernetes Service."},{"line_number":9,"context_line":"HOST\u003d{{ api_interface_address }}"},{"line_number":10,"context_line":"PORT\u003d{{ mariadb_port }}"},{"line_number":11,"context_line":"LB_USER\u003dhaproxy"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"bacf61ea_8ceccec8","line":8,"updated":"2016-07-28 13:42:28.000000000","message":"ditto","commit_id":"09113f5c8dca139fab442e1591f07a50f4fabcd9"}],"etc/kolla/globals.yml":[{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"d305406d7883e1d5420db7fd056aaf0833a0a292","unresolved":false,"context_lines":[{"line_number":75,"context_line":"# interfaces \"0.0.0.0\".  When used outside of Kubernetes, binding to"},{"line_number":76,"context_line":"# all interfaces may present a security issue, and thus is not"},{"line_number":77,"context_line":"# recommended."},{"line_number":78,"context_line":"#api_interface_address: \"0.0.0.0\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"# This is the raw interface given to neutron as its external network port. Even"},{"line_number":81,"context_line":"# though an IP address can exist on this interface, it will be unusable in most"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_6f31660b","line":78,"updated":"2016-06-29 01:57:59.000000000","message":"normally, we use the value as default. remove # char should be the same.","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"ed1209665487038fc83e434f663deb1bd9a8efde","unresolved":false,"context_lines":[{"line_number":75,"context_line":"# interfaces \"0.0.0.0\".  When used outside of Kubernetes, binding to"},{"line_number":76,"context_line":"# all interfaces may present a security issue, and thus is not"},{"line_number":77,"context_line":"# recommended."},{"line_number":78,"context_line":"#api_interface_address: \"0.0.0.0\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"# This is the raw interface given to neutron as its external network port. Even"},{"line_number":81,"context_line":"# though an IP address can exist on this interface, it will be unusable in most"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_1e68ce86","line":78,"updated":"2016-06-29 04:51:39.000000000","message":"that\u0027s why i want to put the api_interface_address assign from the common role to here.\n\nideally, using follow pattern can sovle all the issue:\n\n\n# api_interface_address: \"{{ hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027ipv4\u0027][\u0027address\u0027] }}\"","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":22143,"name":"David Wang","email":"dcwangmit01@gmail.com","username":"dcwangmit01"},"change_message_id":"f4de7c50bbc28be06320b6adb5623ed527cd83e2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"# interfaces \"0.0.0.0\".  When used outside of Kubernetes, binding to"},{"line_number":76,"context_line":"# all interfaces may present a security issue, and thus is not"},{"line_number":77,"context_line":"# recommended."},{"line_number":78,"context_line":"#api_interface_address: \"0.0.0.0\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"# This is the raw interface given to neutron as its external network port. Even"},{"line_number":81,"context_line":"# though an IP address can exist on this interface, it will be unusable in most"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3aaa91ec_d2cc7d63","line":78,"in_reply_to":"3aaa91ec_6f31660b","updated":"2016-06-29 02:34:38.000000000","message":"Jeffrey,\n\nI think if we set this by default it will mess things up for Kolla.  On the other hand it\u0027d be great for Kolla-kubernetes!  Kolla should never bind to 0.0.0.0... I believe.\n\n-dave","commit_id":"a5efedecb93cc8f7f30146d182f014164d9b67f3"},{"author":{"_account_id":2834,"name":"Steven Dake","email":"steven.dake@gmail.com","username":"sdake"},"change_message_id":"72a401b7a00578c492d5f1a624e7f0e8314b6dcc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"# interfaces \"0.0.0.0\".  When used outside of Kubernetes, binding to"},{"line_number":53,"context_line":"# all interfaces may present a security issue, and thus is not"},{"line_number":54,"context_line":"# recommended."},{"line_number":55,"context_line":"#api_interface_address: \"0.0.0.0\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"####################"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"dada55a8_8b9dd25b","line":55,"updated":"2016-07-23 18:17:24.000000000","message":"I\u0027ve got to admit, I\u0027m not a fan of this approach.  I think what would make more sense is a new top level key called\n\n\"orchestration_engine\" which can have the values ansible and kubernetes.  Then all conditional logic can base off that key rather then making a whole lot of overrides in globals.yml and friends.","commit_id":"81930501d8102bc3263aee6741b205ac8431cfe7"}]}
