)]}'
{"tripleo_ansible/playbooks/molecule-tripleo-ipa-post.yaml":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"4cbb0dc6dcdc6b430e4867d6f399ec92cf9165e8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"- hosts: all"},{"line_number":18,"context_line":"  tasks:"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    - name: Make ipaserver-install log readable"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"3fa7e38b_77427d3e","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":12},"updated":"2020-01-22 15:11:37.000000000","message":"nit: we should name the playbook\n\n  - name: TripleO IPA Post\n    hosts: all\n    ...","commit_id":"94ce5a6c31dac5a6db01a033449045370187f22b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"ab64f48c4715fd3879b9bf18946274701b62c983","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    - name: Make ipaserver-install log readable"},{"line_number":22,"context_line":"      file:"},{"line_number":23,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":24,"context_line":"        mode: 0644"},{"line_number":25,"context_line":"      become: true"},{"line_number":26,"context_line":"      failed_when: false"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"1fa4df85_d0a844dc","line":23,"updated":"2020-03-02 14:02:44.000000000","message":"Putting log files into /tmp is a security breach; we should not do that.\nLogs go in /var/log and have proper permissions (not world readable at least).","commit_id":"f48ef769a38d29bc9d0aca54684780f0c34b0775"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"ecfea80b9fd4b4d95f1cfee69acadedf93104d78","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    - name: Make ipaserver-install log readable"},{"line_number":22,"context_line":"      file:"},{"line_number":23,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":24,"context_line":"        mode: 0644"},{"line_number":25,"context_line":"      become: true"},{"line_number":26,"context_line":"      failed_when: false"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"1fa4df85_3bac1933","line":23,"in_reply_to":"1fa4df85_d0a844dc","updated":"2020-03-02 15:10:43.000000000","message":"This is for retrieving logs for the tripleo-ansible-centos-7-molecule-tripleo_ipa job, the whole IPA installation, which is located in /tmp/ipa-data is temporary.\nIt is readable to anyone reviewing the patch, example:\n https://zuul.opendev.org/t/openstack/build/0db6c643af294b7f80cdf450739e2eb5/logs","commit_id":"f48ef769a38d29bc9d0aca54684780f0c34b0775"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  hosts: all"},{"line_number":19,"context_line":"  tasks:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    - name: Make ipaserver-install log readable"},{"line_number":22,"context_line":"      file:"},{"line_number":23,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":24,"context_line":"        mode: 0644"},{"line_number":25,"context_line":"      become: true"},{"line_number":26,"context_line":"      failed_when: false"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    - name: Collect ipaserver-install logs"},{"line_number":29,"context_line":"      synchronize:"},{"line_number":30,"context_line":"        dest: \"{{ zuul.executor.log_root }}\""},{"line_number":31,"context_line":"        mode: pull"},{"line_number":32,"context_line":"        src: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":33,"context_line":"        verify_host: true"},{"line_number":34,"context_line":"      failed_when: false"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_9202bd3c","line":34,"range":{"start_line":21,"start_character":0,"end_line":34,"end_character":24},"updated":"2020-03-03 14:56:20.000000000","message":"This isn\u0027t tripleo specific; and like I said, putting logs in /tmp isn\u0027t secure. Even if it\u0027s only used by CI, we still ship that playbook and someone could use it in production by mistake.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"87fd79ce6175256dbfde582f1bc3b56ccf2a27c2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  hosts: all"},{"line_number":19,"context_line":"  tasks:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    - name: Make ipaserver-install log readable"},{"line_number":22,"context_line":"      file:"},{"line_number":23,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":24,"context_line":"        mode: 0644"},{"line_number":25,"context_line":"      become: true"},{"line_number":26,"context_line":"      failed_when: false"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    - name: Collect ipaserver-install logs"},{"line_number":29,"context_line":"      synchronize:"},{"line_number":30,"context_line":"        dest: \"{{ zuul.executor.log_root }}\""},{"line_number":31,"context_line":"        mode: pull"},{"line_number":32,"context_line":"        src: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":33,"context_line":"        verify_host: true"},{"line_number":34,"context_line":"      failed_when: false"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_c5333f61","line":34,"range":{"start_line":21,"start_character":0,"end_line":34,"end_character":24},"in_reply_to":"1fa4df85_0da74bbf","updated":"2020-03-09 12:21:19.000000000","message":"This is copied over to the zuul.executor.log_root directory  for the purpose of debugging the CI job, so that it appears in https://zuul.opendev.org/t/openstack/build/a5e70e7ea157489e8a879ac25bc05eac/log/ipaserver-install.log\n\nThis copy is not read by any automation, it\u0027s copied there regardless, \"post-run\", for humans (reviewers).\n\nI don\u0027t know nearly enough about IPA, there might be a silent issue during the deployment that manifests itself in the logs, so the log is always there just in case.\n\nIf it fails, there can be lots of reasons, like changes in Linux/GNU distribution versions, etc... The log will usually contain a traceback and more useful info.\n\nWithout the log, it\u0027s hard to search for a solution or know what failed.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7a6b1a8c0ba5cddd552d9a59006f8f9e323140f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  hosts: all"},{"line_number":19,"context_line":"  tasks:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    - name: Make ipaserver-install log readable"},{"line_number":22,"context_line":"      file:"},{"line_number":23,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":24,"context_line":"        mode: 0644"},{"line_number":25,"context_line":"      become: true"},{"line_number":26,"context_line":"      failed_when: false"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    - name: Collect ipaserver-install logs"},{"line_number":29,"context_line":"      synchronize:"},{"line_number":30,"context_line":"        dest: \"{{ zuul.executor.log_root }}\""},{"line_number":31,"context_line":"        mode: pull"},{"line_number":32,"context_line":"        src: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":33,"context_line":"        verify_host: true"},{"line_number":34,"context_line":"      failed_when: false"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_0da74bbf","line":34,"range":{"start_line":21,"start_character":0,"end_line":34,"end_character":24},"in_reply_to":"1fa4df85_35573329","updated":"2020-03-06 22:00:03.000000000","message":"If we\u0027re only using the log to check that FreeIPA was configured properly, we can do something like this instead;\n\n  python2 -c \u0027import sys; from ipaserver.install.installutils import is_ipa_configured; print(is_ipa_configured())\u0027\n\nWhich should return True/False depending on if FreeIPA is configured.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"abdec6e67cd3866f0de7733f6005f3ada3d30628","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  hosts: all"},{"line_number":19,"context_line":"  tasks:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    - name: Make ipaserver-install log readable"},{"line_number":22,"context_line":"      file:"},{"line_number":23,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":24,"context_line":"        mode: 0644"},{"line_number":25,"context_line":"      become: true"},{"line_number":26,"context_line":"      failed_when: false"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    - name: Collect ipaserver-install logs"},{"line_number":29,"context_line":"      synchronize:"},{"line_number":30,"context_line":"        dest: \"{{ zuul.executor.log_root }}\""},{"line_number":31,"context_line":"        mode: pull"},{"line_number":32,"context_line":"        src: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":33,"context_line":"        verify_host: true"},{"line_number":34,"context_line":"      failed_when: false"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_35573329","line":34,"range":{"start_line":21,"start_character":0,"end_line":34,"end_character":24},"in_reply_to":"1fa4df85_9202bd3c","updated":"2020-03-03 16:45:27.000000000","message":"This is specific to the tripleo-ansible molecule tests and how Zuul handles logs. It is called in zuul.d/molecule.yaml. It can be removed, since it is not essential, but it helps to see this log when there is a CI error on the patch.\n\nThe path of the temporary deployment is currently hardcoded in tripleo_ansible/roles/tripleo_ipa/molecule/default/prepare.yml\n\nPlacing it in some other place than /tmp will end up creating files in unexpected places and filling up disk space when molecule tests are run.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"}],"tripleo_ansible/roles/tripleo-ipa/files/parse_service_metadata.py":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":6,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_03c7ba9a","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":30},"updated":"2019-12-18 05:30:35.000000000","message":"is this file being imported from elsewhere?","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"8d2e53cbf1bb0a224692d103dd703cb9992b6a8e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":6,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_07cdc284","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":30},"in_reply_to":"3fa7e38b_03c7ba9a","updated":"2020-01-10 16:02:27.000000000","message":"this script is called from main.yml","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"}],"tripleo_ansible/roles/tripleo-ipa/molecule/banners/playbook.yml":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"df373bf61f805290b5893157ad171e94d3e55a42","unresolved":false,"context_lines":[{"line_number":18,"context_line":"- name: Converge"},{"line_number":19,"context_line":"  hosts: all"},{"line_number":20,"context_line":"  roles:"},{"line_number":21,"context_line":"    - name: tripleo-sshd"},{"line_number":22,"context_line":"      tripleo_sshd_motd_enabled: true"},{"line_number":23,"context_line":"      tripleo_sshd_banner_enabled: true"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_7f21819e","line":23,"range":{"start_line":21,"start_character":6,"end_line":23,"end_character":39},"updated":"2019-12-16 14:14:08.000000000","message":"why is sshd here?","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":18,"context_line":"- name: Converge"},{"line_number":19,"context_line":"  hosts: all"},{"line_number":20,"context_line":"  roles:"},{"line_number":21,"context_line":"    - name: tripleo-sshd"},{"line_number":22,"context_line":"      tripleo_sshd_motd_enabled: true"},{"line_number":23,"context_line":"      tripleo_sshd_banner_enabled: true"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_e3bdbe03","line":23,"range":{"start_line":21,"start_character":6,"end_line":23,"end_character":39},"in_reply_to":"3fa7e38b_7f21819e","updated":"2019-12-18 05:30:35.000000000","message":"agreed, unless this is need we can probably remove these config opts.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"}],"tripleo_ansible/roles/tripleo-ipa/molecule/default/playbook.yml":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"df373bf61f805290b5893157ad171e94d3e55a42","unresolved":false,"context_lines":[{"line_number":18,"context_line":"- name: Converge"},{"line_number":19,"context_line":"  hosts: all"},{"line_number":20,"context_line":"  roles:"},{"line_number":21,"context_line":"    - name: tripleo-sshd"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_5f1cc565","line":21,"range":{"start_line":21,"start_character":20,"end_line":21,"end_character":24},"updated":"2019-12-16 14:14:08.000000000","message":"tripleo-ipa?","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":18,"context_line":"- name: Converge"},{"line_number":19,"context_line":"  hosts: all"},{"line_number":20,"context_line":"  roles:"},{"line_number":21,"context_line":"    - name: tripleo-sshd"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_a3b7c621","line":21,"range":{"start_line":21,"start_character":20,"end_line":21,"end_character":24},"in_reply_to":"3fa7e38b_5f1cc565","updated":"2019-12-18 05:30:35.000000000","message":"+1","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"}],"tripleo_ansible/roles/tripleo-ipa/tasks/main.yml":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    base_server_domain: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027, 1)[1] }}\""},{"line_number":30,"context_line":"    enroll_base_server: \"{{ tripleo_ipa_enroll_base_server }}\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- debug:"},{"line_number":33,"context_line":"    msg: \"{{ tripleo_ipa_server_metadata }}\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- name: add main host to IPA with OTP"},{"line_number":36,"context_line":"  when: enroll_base_server|bool"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_2341960b","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":44},"updated":"2019-12-18 05:30:35.000000000","message":"name the task.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    validate_certs: false"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":44,"context_line":"  script: \u003e"},{"line_number":45,"context_line":"    \"{{ role_path }}/files/parse_service_metadata.py\""},{"line_number":46,"context_line":"    --server"},{"line_number":47,"context_line":"    \"{{ base_server_short_name }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_033c9a90","line":44,"range":{"start_line":44,"start_character":10,"end_line":44,"end_character":11},"updated":"2019-12-18 05:30:35.000000000","message":"when using this operator, add a - so that it gets rid of the trailing newline.\n\n  script: \u003e-\n    ...","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \u0027 {{ tripleo_ipa_server_metadata }}\u0027"},{"line_number":52,"context_line":"  register: parsed_services"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- debug: var\u003dparsed_services.stdout"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"- name: add required services"},{"line_number":57,"context_line":"  include: services.yml"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_63378eb1","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":35},"updated":"2019-12-18 05:30:35.000000000","message":"we should name our tasks.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"df373bf61f805290b5893157ad171e94d3e55a42","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"- name: add required services"},{"line_number":57,"context_line":"  include: services.yml"},{"line_number":58,"context_line":"  loop: \"{{ parsed_services.stdout }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_bf4cd975","line":58,"range":{"start_line":58,"start_character":28,"end_line":58,"end_character":34},"updated":"2019-12-16 14:14:08.000000000","message":"stdout_lines","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"8d2e53cbf1bb0a224692d103dd703cb9992b6a8e","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"- name: add required services"},{"line_number":57,"context_line":"  include: services.yml"},{"line_number":58,"context_line":"  loop: \"{{ parsed_services.stdout }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_e7f18665","line":58,"range":{"start_line":58,"start_character":28,"end_line":58,"end_character":34},"in_reply_to":"3fa7e38b_bf4cd975","updated":"2020-01-10 16:02:27.000000000","message":"I consistently got the following error after changing it to stdout_lines, so I\u0027m leaving it as it is.\n\n    TASK [tripleo-ipa : add sub_host] **********************************************\n    fatal: [centos7]: FAILED! \u003d\u003e changed\u003dfalse \n      msg: \u0027response host_add: invalid \u0027\u0027hostname\u0027\u0027: invalid domain-name: not fully qualified\u0027","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"5e7b8bf503b29d6e60f9cf1834a8c79714d160c4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"  set_fact:"},{"line_number":28,"context_line":"    base_server_short_name: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027)[0] }}\""},{"line_number":29,"context_line":"    base_server_domain: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027, 1)[1] }}\""},{"line_number":30,"context_line":"    enroll_base_server: \"{{ tripleo_ipa_enroll_base_server }}\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- name: add main host to IPA with OTP"},{"line_number":33,"context_line":"  when: enroll_base_server|bool"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3fa7e38b_d9069f23","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":62},"updated":"2020-01-13 09:50:45.000000000","message":"what is the reason behind this rename?","commit_id":"a405bf6c232377d5789ca157ca66c3bf72d32b9b"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"5e7b8bf503b29d6e60f9cf1834a8c79714d160c4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    validate_certs: false"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":41,"context_line":"  script: \u003e-"},{"line_number":42,"context_line":"    \"{{ role_path }}/files/parse_service_metadata.py\""},{"line_number":43,"context_line":"    --server"},{"line_number":44,"context_line":"    \"{{ base_server_short_name }}\""}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3fa7e38b_4b20969b","line":41,"range":{"start_line":41,"start_character":2,"end_line":41,"end_character":10},"updated":"2020-01-13 09:50:45.000000000","message":"I think better to use \"shell\"","commit_id":"a405bf6c232377d5789ca157ca66c3bf72d32b9b"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"8db01ada7642c6bb3deebbba158cab1d5e7ba64d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    validate_certs: false"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":41,"context_line":"  script: \u003e-"},{"line_number":42,"context_line":"    \"{{ role_path }}/files/parse_service_metadata.py\""},{"line_number":43,"context_line":"    --server"},{"line_number":44,"context_line":"    \"{{ base_server_short_name }}\""}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3fa7e38b_6ac4c541","line":41,"range":{"start_line":41,"start_character":2,"end_line":41,"end_character":10},"in_reply_to":"3fa7e38b_4b20969b","updated":"2020-01-23 15:45:52.000000000","message":"Changing this to shell results in a \"No such file or directory\" error.","commit_id":"a405bf6c232377d5789ca157ca66c3bf72d32b9b"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"5e7b8bf503b29d6e60f9cf1834a8c79714d160c4","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- name: add required services"},{"line_number":52,"context_line":"  include: services.yml"},{"line_number":53,"context_line":"  loop: \"{{ parsed_services.stdout }}\""}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3fa7e38b_8bfd2e09","line":53,"range":{"start_line":53,"start_character":27,"end_line":53,"end_character":35},"updated":"2020-01-13 09:50:45.000000000","message":"stdout_lines","commit_id":"a405bf6c232377d5789ca157ca66c3bf72d32b9b"}],"tripleo_ansible/roles/tripleo-ipa/tasks/services.yml":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3fa7e38b_c3452218","updated":"2019-12-18 05:30:35.000000000","message":"boilerplate header.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    sub_host: \"{{ item.1 }}\""},{"line_number":6,"context_line":"    service: \"{{ item.2 }}\""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"- debug: var\u003dbase_host"},{"line_number":9,"context_line":"- debug: var\u003dsub_host"},{"line_number":10,"context_line":"- debug: var\u003dservice"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"- name: add sub_host"},{"line_number":13,"context_line":"  ipa_host:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_a34ca63f","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":20},"updated":"2019-12-18 05:30:35.000000000","message":"name tasks.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    validate_certs: false"},{"line_number":25,"context_line":"  register: my_service"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"- debug: var\u003dmy_service"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"- debug: var\u003dmy_service[\u0027host\u0027][\u0027managedby_host\u0027]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: add host to managed_hosts if needed"},{"line_number":32,"context_line":"  when: base_host not in my_service[\u0027host\u0027][\u0027managedby_host\u0027]"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_435b72f8","line":29,"range":{"start_line":27,"start_character":0,"end_line":29,"end_character":49},"updated":"2019-12-18 05:30:35.000000000","message":"name tasks.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    validate_certs: false"},{"line_number":39,"context_line":"  register: my_service2"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"- debug: var\u003dmy_service2"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_6360eea5","line":41,"range":{"start_line":41,"start_character":0,"end_line":41,"end_character":24},"updated":"2019-12-18 05:30:35.000000000","message":"name tasks.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"}],"tripleo_ansible/roles/tripleo-ipa/tasks/setup.yml":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"3a85fce72fa567b56e3d68dd44327d100936b863","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3fa7e38b_03557ac2","updated":"2019-12-18 05:30:35.000000000","message":"boilerplate header.","commit_id":"fcdf2b87fdb6e3c6a38d2897aafe565e715da470"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"5e7b8bf503b29d6e60f9cf1834a8c79714d160c4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# This role creates the keytab and adds the nova service in FreeIPA."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: set facts"},{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nova_service: \"nova/{{ ansible_fqdn }}\""},{"line_number":23,"context_line":"    nova_keytab: \"/etc/novajoin/krb5.keytab\""}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3fa7e38b_8b4bee5c","line":20,"range":{"start_line":20,"start_character":8,"end_line":20,"end_character":17},"updated":"2020-01-13 09:50:45.000000000","message":"all set_facts tasks are named same, better to rename it to something more meaningful","commit_id":"a405bf6c232377d5789ca157ca66c3bf72d32b9b"}],"tripleo_ansible/roles/tripleo_ipa/files/parse_service_metadata.py":[{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":39,"id":"1fa4df85_92871db6","line":1,"updated":"2020-03-03 14:56:20.000000000","message":"I feel like this could be a module; instead of a python script that we ship on the remote host and then execute?","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a082ecf829c2c876c49a02b1f8ebd34bfe6205a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":39,"id":"1fa4df85_b97f4364","line":1,"in_reply_to":"1fa4df85_92871db6","updated":"2020-03-09 19:51:06.000000000","message":"Done","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ipalib import api"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_fqdn(hostname, domain):"},{"line_number":26,"context_line":"    if not domain:"},{"line_number":27,"context_line":"        domain \u003d api.env.domain"},{"line_number":28,"context_line":"    return \u0027%s.%s\u0027 % (hostname, domain)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_compact_services(metadata):"},{"line_number":32,"context_line":"    \"\"\"Retrieve and convert the compact_services from instance metadata."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This converts the new compact services format to the old/internal one."},{"line_number":35,"context_line":"    The old format looks like:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"compact_services\": {"},{"line_number":38,"context_line":"        \"http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":39,"context_line":"        \"rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    The new format contains service names inside the primary key:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"compact_services_http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":45,"context_line":"    \"compact_services_rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    # compact key-per-service"},{"line_number":48,"context_line":"    compact_services \u003d {key.split(\u0027_\u0027, 2)[-1]: value"},{"line_number":49,"context_line":"                        for key, value in six.iteritems(metadata)"},{"line_number":50,"context_line":"                        if key.startswith(\u0027compact_service_\u0027)}"},{"line_number":51,"context_line":"    if compact_services:"},{"line_number":52,"context_line":"        return compact_services"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # legacy compact json format"},{"line_number":55,"context_line":"    if \u0027compact_services\u0027 in metadata:"},{"line_number":56,"context_line":"        return json.loads(metadata[\u0027compact_services\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    return None"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def add_managed_services(base_host_short, metadata, domain):"},{"line_number":62,"context_line":"    \"\"\"Make any host/principal assignments passed into metadata.\"\"\""},{"line_number":63,"context_line":"    base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":64,"context_line":"    principals \u003d [metadata[key] for key in metadata.keys()"},{"line_number":65,"context_line":"                  if key.startswith(\u0027managed_service_\u0027)]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    services \u003d Set([])"},{"line_number":68,"context_line":"    for principal in principals:"},{"line_number":69,"context_line":"        sp \u003d principal.split(\u0027/\u0027, 2)"},{"line_number":70,"context_line":"        service \u003d sp[0]"},{"line_number":71,"context_line":"        principal_host \u003d sp[1]"},{"line_number":72,"context_line":"        services.add((base_host, principal_host, service, \u0027managed\u0027))"},{"line_number":73,"context_line":"    return services"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def add_compact_services(base_host_short, metadata, domain):"},{"line_number":77,"context_line":"    \"\"\"Create data to pass compact_services to ansible"},{"line_number":78,"context_line":"    \"\"\""},{"line_number":79,"context_line":"    services \u003d Set([])"},{"line_number":80,"context_line":"    compact_services \u003d get_compact_services(metadata)"},{"line_number":81,"context_line":"    if compact_services:"},{"line_number":82,"context_line":"        base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        for service_name, net_list in compact_services.items():"},{"line_number":85,"context_line":"            for network in net_list:"},{"line_number":86,"context_line":"                host_short \u003d \"%s.%s\" % (base_host_short, network)"},{"line_number":87,"context_line":"                principal_host \u003d get_fqdn(host_short, domain)"},{"line_number":88,"context_line":"                services.add("},{"line_number":89,"context_line":"                    (base_host, principal_host, service_name, \u0027compact\u0027)"},{"line_number":90,"context_line":"                )"},{"line_number":91,"context_line":"    return services"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":95,"context_line":"    parser \u003d argparse.ArgumentParser()"},{"line_number":96,"context_line":"    parser.add_argument(\"--server\", required\u003dTrue,"},{"line_number":97,"context_line":"                        help\u003d\"Short name for base server eg. controller-0\")"},{"line_number":98,"context_line":"    parser.add_argument(\"--domain\", required\u003dTrue,"},{"line_number":99,"context_line":"                        help\u003d\"Base server domain eg. exmaple.com\")"},{"line_number":100,"context_line":"    parser.add_argument(\"--data\", required\u003dTrue,"},{"line_number":101,"context_line":"                        help\u003d\"JSON data for server metadata.\")"},{"line_number":102,"context_line":"    args \u003d parser.parse_args()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    base_server \u003d args.server"},{"line_number":105,"context_line":"    domain \u003d args.domain"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    server_metadata \u003d json.loads(args.data)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    services \u003d (add_managed_services(base_server, server_metadata, domain)"},{"line_number":110,"context_line":"                | add_compact_services(base_server, server_metadata, domain))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    print(list(services))"}],"source_content_type":"text/x-python","patch_set":39,"id":"1fa4df85_d2ba756c","line":112,"range":{"start_line":25,"start_character":0,"end_line":112,"end_character":25},"updated":"2020-03-03 14:56:20.000000000","message":"I don\u0027t see anything that is specific to TripleO here.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ipalib import api"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_fqdn(hostname, domain):"},{"line_number":26,"context_line":"    if not domain:"},{"line_number":27,"context_line":"        domain \u003d api.env.domain"},{"line_number":28,"context_line":"    return \u0027%s.%s\u0027 % (hostname, domain)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_compact_services(metadata):"},{"line_number":32,"context_line":"    \"\"\"Retrieve and convert the compact_services from instance metadata."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This converts the new compact services format to the old/internal one."},{"line_number":35,"context_line":"    The old format looks like:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"compact_services\": {"},{"line_number":38,"context_line":"        \"http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":39,"context_line":"        \"rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    The new format contains service names inside the primary key:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"compact_services_http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":45,"context_line":"    \"compact_services_rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    # compact key-per-service"},{"line_number":48,"context_line":"    compact_services \u003d {key.split(\u0027_\u0027, 2)[-1]: value"},{"line_number":49,"context_line":"                        for key, value in six.iteritems(metadata)"},{"line_number":50,"context_line":"                        if key.startswith(\u0027compact_service_\u0027)}"},{"line_number":51,"context_line":"    if compact_services:"},{"line_number":52,"context_line":"        return compact_services"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # legacy compact json format"},{"line_number":55,"context_line":"    if \u0027compact_services\u0027 in metadata:"},{"line_number":56,"context_line":"        return json.loads(metadata[\u0027compact_services\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    return None"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def add_managed_services(base_host_short, metadata, domain):"},{"line_number":62,"context_line":"    \"\"\"Make any host/principal assignments passed into metadata.\"\"\""},{"line_number":63,"context_line":"    base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":64,"context_line":"    principals \u003d [metadata[key] for key in metadata.keys()"},{"line_number":65,"context_line":"                  if key.startswith(\u0027managed_service_\u0027)]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    services \u003d Set([])"},{"line_number":68,"context_line":"    for principal in principals:"},{"line_number":69,"context_line":"        sp \u003d principal.split(\u0027/\u0027, 2)"},{"line_number":70,"context_line":"        service \u003d sp[0]"},{"line_number":71,"context_line":"        principal_host \u003d sp[1]"},{"line_number":72,"context_line":"        services.add((base_host, principal_host, service, \u0027managed\u0027))"},{"line_number":73,"context_line":"    return services"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def add_compact_services(base_host_short, metadata, domain):"},{"line_number":77,"context_line":"    \"\"\"Create data to pass compact_services to ansible"},{"line_number":78,"context_line":"    \"\"\""},{"line_number":79,"context_line":"    services \u003d Set([])"},{"line_number":80,"context_line":"    compact_services \u003d get_compact_services(metadata)"},{"line_number":81,"context_line":"    if compact_services:"},{"line_number":82,"context_line":"        base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        for service_name, net_list in compact_services.items():"},{"line_number":85,"context_line":"            for network in net_list:"},{"line_number":86,"context_line":"                host_short \u003d \"%s.%s\" % (base_host_short, network)"},{"line_number":87,"context_line":"                principal_host \u003d get_fqdn(host_short, domain)"},{"line_number":88,"context_line":"                services.add("},{"line_number":89,"context_line":"                    (base_host, principal_host, service_name, \u0027compact\u0027)"},{"line_number":90,"context_line":"                )"},{"line_number":91,"context_line":"    return services"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":95,"context_line":"    parser \u003d argparse.ArgumentParser()"},{"line_number":96,"context_line":"    parser.add_argument(\"--server\", required\u003dTrue,"},{"line_number":97,"context_line":"                        help\u003d\"Short name for base server eg. controller-0\")"},{"line_number":98,"context_line":"    parser.add_argument(\"--domain\", required\u003dTrue,"},{"line_number":99,"context_line":"                        help\u003d\"Base server domain eg. exmaple.com\")"},{"line_number":100,"context_line":"    parser.add_argument(\"--data\", required\u003dTrue,"},{"line_number":101,"context_line":"                        help\u003d\"JSON data for server metadata.\")"},{"line_number":102,"context_line":"    args \u003d parser.parse_args()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    base_server \u003d args.server"},{"line_number":105,"context_line":"    domain \u003d args.domain"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    server_metadata \u003d json.loads(args.data)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    services \u003d (add_managed_services(base_server, server_metadata, domain)"},{"line_number":110,"context_line":"                | add_compact_services(base_server, server_metadata, domain))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    print(list(services))"}],"source_content_type":"text/x-python","patch_set":39,"id":"1fa4df85_43869d15","line":112,"range":{"start_line":25,"start_character":0,"end_line":112,"end_character":25},"in_reply_to":"1fa4df85_1086c567","updated":"2020-03-04 22:41:28.000000000","message":"To be clear, this script parses that data that is generated by tripleo as server_metadata - which is of the format that is sent to novajoin.  The output of the script is a dict of entries that define services to be added to ipa.  This is done through ansible-freeipa calls. \n\nThis script is all tripleo specific.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"876e324f148f5dd5f870bf46293526b1e387b5aa","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ipalib import api"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_fqdn(hostname, domain):"},{"line_number":26,"context_line":"    if not domain:"},{"line_number":27,"context_line":"        domain \u003d api.env.domain"},{"line_number":28,"context_line":"    return \u0027%s.%s\u0027 % (hostname, domain)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_compact_services(metadata):"},{"line_number":32,"context_line":"    \"\"\"Retrieve and convert the compact_services from instance metadata."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This converts the new compact services format to the old/internal one."},{"line_number":35,"context_line":"    The old format looks like:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"compact_services\": {"},{"line_number":38,"context_line":"        \"http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":39,"context_line":"        \"rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    The new format contains service names inside the primary key:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"compact_services_http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":45,"context_line":"    \"compact_services_rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    # compact key-per-service"},{"line_number":48,"context_line":"    compact_services \u003d {key.split(\u0027_\u0027, 2)[-1]: value"},{"line_number":49,"context_line":"                        for key, value in six.iteritems(metadata)"},{"line_number":50,"context_line":"                        if key.startswith(\u0027compact_service_\u0027)}"},{"line_number":51,"context_line":"    if compact_services:"},{"line_number":52,"context_line":"        return compact_services"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # legacy compact json format"},{"line_number":55,"context_line":"    if \u0027compact_services\u0027 in metadata:"},{"line_number":56,"context_line":"        return json.loads(metadata[\u0027compact_services\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    return None"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def add_managed_services(base_host_short, metadata, domain):"},{"line_number":62,"context_line":"    \"\"\"Make any host/principal assignments passed into metadata.\"\"\""},{"line_number":63,"context_line":"    base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":64,"context_line":"    principals \u003d [metadata[key] for key in metadata.keys()"},{"line_number":65,"context_line":"                  if key.startswith(\u0027managed_service_\u0027)]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    services \u003d Set([])"},{"line_number":68,"context_line":"    for principal in principals:"},{"line_number":69,"context_line":"        sp \u003d principal.split(\u0027/\u0027, 2)"},{"line_number":70,"context_line":"        service \u003d sp[0]"},{"line_number":71,"context_line":"        principal_host \u003d sp[1]"},{"line_number":72,"context_line":"        services.add((base_host, principal_host, service, \u0027managed\u0027))"},{"line_number":73,"context_line":"    return services"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def add_compact_services(base_host_short, metadata, domain):"},{"line_number":77,"context_line":"    \"\"\"Create data to pass compact_services to ansible"},{"line_number":78,"context_line":"    \"\"\""},{"line_number":79,"context_line":"    services \u003d Set([])"},{"line_number":80,"context_line":"    compact_services \u003d get_compact_services(metadata)"},{"line_number":81,"context_line":"    if compact_services:"},{"line_number":82,"context_line":"        base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        for service_name, net_list in compact_services.items():"},{"line_number":85,"context_line":"            for network in net_list:"},{"line_number":86,"context_line":"                host_short \u003d \"%s.%s\" % (base_host_short, network)"},{"line_number":87,"context_line":"                principal_host \u003d get_fqdn(host_short, domain)"},{"line_number":88,"context_line":"                services.add("},{"line_number":89,"context_line":"                    (base_host, principal_host, service_name, \u0027compact\u0027)"},{"line_number":90,"context_line":"                )"},{"line_number":91,"context_line":"    return services"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":95,"context_line":"    parser \u003d argparse.ArgumentParser()"},{"line_number":96,"context_line":"    parser.add_argument(\"--server\", required\u003dTrue,"},{"line_number":97,"context_line":"                        help\u003d\"Short name for base server eg. controller-0\")"},{"line_number":98,"context_line":"    parser.add_argument(\"--domain\", required\u003dTrue,"},{"line_number":99,"context_line":"                        help\u003d\"Base server domain eg. exmaple.com\")"},{"line_number":100,"context_line":"    parser.add_argument(\"--data\", required\u003dTrue,"},{"line_number":101,"context_line":"                        help\u003d\"JSON data for server metadata.\")"},{"line_number":102,"context_line":"    args \u003d parser.parse_args()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    base_server \u003d args.server"},{"line_number":105,"context_line":"    domain \u003d args.domain"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    server_metadata \u003d json.loads(args.data)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    services \u003d (add_managed_services(base_server, server_metadata, domain)"},{"line_number":110,"context_line":"                | add_compact_services(base_server, server_metadata, domain))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    print(list(services))"}],"source_content_type":"text/x-python","patch_set":39,"id":"1fa4df85_4e6f672a","line":112,"range":{"start_line":25,"start_character":0,"end_line":112,"end_character":25},"in_reply_to":"1fa4df85_43869d15","updated":"2020-03-09 19:22:23.000000000","message":"I\u0027ve attempted to pull this functionality out into its own filter [0].\n\n[0] https://review.opendev.org/#/c/711742/","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"abdec6e67cd3866f0de7733f6005f3ada3d30628","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ipalib import api"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_fqdn(hostname, domain):"},{"line_number":26,"context_line":"    if not domain:"},{"line_number":27,"context_line":"        domain \u003d api.env.domain"},{"line_number":28,"context_line":"    return \u0027%s.%s\u0027 % (hostname, domain)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_compact_services(metadata):"},{"line_number":32,"context_line":"    \"\"\"Retrieve and convert the compact_services from instance metadata."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This converts the new compact services format to the old/internal one."},{"line_number":35,"context_line":"    The old format looks like:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"compact_services\": {"},{"line_number":38,"context_line":"        \"http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":39,"context_line":"        \"rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    The new format contains service names inside the primary key:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"compact_services_http\": [\"internalapi\", \"ctlplane\", \"storage\"],"},{"line_number":45,"context_line":"    \"compact_services_rabbitmq\": [\"internalapi\", \"ctlplane\"]"},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    # compact key-per-service"},{"line_number":48,"context_line":"    compact_services \u003d {key.split(\u0027_\u0027, 2)[-1]: value"},{"line_number":49,"context_line":"                        for key, value in six.iteritems(metadata)"},{"line_number":50,"context_line":"                        if key.startswith(\u0027compact_service_\u0027)}"},{"line_number":51,"context_line":"    if compact_services:"},{"line_number":52,"context_line":"        return compact_services"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # legacy compact json format"},{"line_number":55,"context_line":"    if \u0027compact_services\u0027 in metadata:"},{"line_number":56,"context_line":"        return json.loads(metadata[\u0027compact_services\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    return None"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def add_managed_services(base_host_short, metadata, domain):"},{"line_number":62,"context_line":"    \"\"\"Make any host/principal assignments passed into metadata.\"\"\""},{"line_number":63,"context_line":"    base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":64,"context_line":"    principals \u003d [metadata[key] for key in metadata.keys()"},{"line_number":65,"context_line":"                  if key.startswith(\u0027managed_service_\u0027)]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    services \u003d Set([])"},{"line_number":68,"context_line":"    for principal in principals:"},{"line_number":69,"context_line":"        sp \u003d principal.split(\u0027/\u0027, 2)"},{"line_number":70,"context_line":"        service \u003d sp[0]"},{"line_number":71,"context_line":"        principal_host \u003d sp[1]"},{"line_number":72,"context_line":"        services.add((base_host, principal_host, service, \u0027managed\u0027))"},{"line_number":73,"context_line":"    return services"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def add_compact_services(base_host_short, metadata, domain):"},{"line_number":77,"context_line":"    \"\"\"Create data to pass compact_services to ansible"},{"line_number":78,"context_line":"    \"\"\""},{"line_number":79,"context_line":"    services \u003d Set([])"},{"line_number":80,"context_line":"    compact_services \u003d get_compact_services(metadata)"},{"line_number":81,"context_line":"    if compact_services:"},{"line_number":82,"context_line":"        base_host \u003d get_fqdn(base_host_short, domain)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        for service_name, net_list in compact_services.items():"},{"line_number":85,"context_line":"            for network in net_list:"},{"line_number":86,"context_line":"                host_short \u003d \"%s.%s\" % (base_host_short, network)"},{"line_number":87,"context_line":"                principal_host \u003d get_fqdn(host_short, domain)"},{"line_number":88,"context_line":"                services.add("},{"line_number":89,"context_line":"                    (base_host, principal_host, service_name, \u0027compact\u0027)"},{"line_number":90,"context_line":"                )"},{"line_number":91,"context_line":"    return services"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":95,"context_line":"    parser \u003d argparse.ArgumentParser()"},{"line_number":96,"context_line":"    parser.add_argument(\"--server\", required\u003dTrue,"},{"line_number":97,"context_line":"                        help\u003d\"Short name for base server eg. controller-0\")"},{"line_number":98,"context_line":"    parser.add_argument(\"--domain\", required\u003dTrue,"},{"line_number":99,"context_line":"                        help\u003d\"Base server domain eg. exmaple.com\")"},{"line_number":100,"context_line":"    parser.add_argument(\"--data\", required\u003dTrue,"},{"line_number":101,"context_line":"                        help\u003d\"JSON data for server metadata.\")"},{"line_number":102,"context_line":"    args \u003d parser.parse_args()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    base_server \u003d args.server"},{"line_number":105,"context_line":"    domain \u003d args.domain"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    server_metadata \u003d json.loads(args.data)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    services \u003d (add_managed_services(base_server, server_metadata, domain)"},{"line_number":110,"context_line":"                | add_compact_services(base_server, server_metadata, domain))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    print(list(services))"}],"source_content_type":"text/x-python","patch_set":39,"id":"1fa4df85_1086c567","line":112,"range":{"start_line":25,"start_character":0,"end_line":112,"end_character":25},"in_reply_to":"1fa4df85_d2ba756c","updated":"2020-03-03 16:45:27.000000000","message":"This parses the internal TripleO server metadata format, it has no use outside of TripleO.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"}],"tripleo_ansible/roles/tripleo_ipa/molecule/default/molecule.yml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4a3f3fbe7a4cd0e9c284cf1c259c44ea70bd6993","unresolved":false,"context_lines":[{"line_number":29,"context_line":"  log: true"},{"line_number":30,"context_line":"  env:"},{"line_number":31,"context_line":"    ANSIBLE_STDOUT_CALLBACK: yaml"},{"line_number":32,"context_line":"    ANSIBLE_FILTER_PLUGINS: \"${ANSIBLE_FILTER_PLUGINS:-/usr/share/ansible/plugins/filter}\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"scenario:"},{"line_number":35,"context_line":"  test_sequence:"}],"source_content_type":"text/x-yaml","patch_set":40,"id":"1fa4df85_191bf772","line":32,"updated":"2020-03-09 19:46:01.000000000","message":"I had to put this in so that the molecule tests wouldn\u0027t fail when attempting to run the parse_service_metadata filter. Otherwise, ansible won\u0027t find the filters it\u0027s supposed to use.","commit_id":"c38bd443c302f3e6b79a81cd06e538fa11abcd4b"}],"tripleo_ansible/roles/tripleo_ipa/molecule/default/prepare.yml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7a6b1a8c0ba5cddd552d9a59006f8f9e323140f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    - name: Wait for FreeIPA server install"},{"line_number":70,"context_line":"      wait_for:"},{"line_number":71,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":72,"context_line":"        search_regex: \"(INFO The ipa-server-install command was successful|ERROR The ipa-server-install command failed)\""},{"line_number":73,"context_line":"        timeout: 900"},{"line_number":74,"context_line":"      become: true"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_4d98e373","line":72,"updated":"2020-03-06 22:00:03.000000000","message":"Outside of failures, do we only need ipaserver-install.log to verify install was successful?","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"87fd79ce6175256dbfde582f1bc3b56ccf2a27c2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    - name: Wait for FreeIPA server install"},{"line_number":70,"context_line":"      wait_for:"},{"line_number":71,"context_line":"        path: \"/tmp/ipa-data/var/log/ipaserver-install.log\""},{"line_number":72,"context_line":"        search_regex: \"(INFO The ipa-server-install command was successful|ERROR The ipa-server-install command failed)\""},{"line_number":73,"context_line":"        timeout: 900"},{"line_number":74,"context_line":"      become: true"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_c5e81f7d","line":72,"in_reply_to":"1fa4df85_4d98e373","updated":"2020-03-09 12:21:19.000000000","message":"This task is not used to verify if the install was successful. It waits for either failure or success. Waiting for success would timeout the job in case of failure.\n\nI also think the command you posted earlier returns true before ipa-client-install (which runs as a subcommand of ipa-server-install) finishes. The purpose of this flag is to work like a lock on the ipa-server-install command, so that it is run only once.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"}],"tripleo_ansible/roles/tripleo_ipa/tasks/main.yml":[{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    base_server_domain: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027, 1)[1] }}\""},{"line_number":31,"context_line":"    enroll_base_server: \"{{ tripleo_ipa_enroll_base_server }}\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- name: add main host to IPA with OTP"},{"line_number":34,"context_line":"  when: enroll_base_server|bool"},{"line_number":35,"context_line":"  block:"},{"line_number":36,"context_line":"    - name: add new host with random otp"},{"line_number":37,"context_line":"      ipa_host:"},{"line_number":38,"context_line":"        fqdn: \"{{ tripleo_ipa_base_server_fqdn }}\""},{"line_number":39,"context_line":"        random_password: true"},{"line_number":40,"context_line":"        force: true"},{"line_number":41,"context_line":"      register: ipa_host"},{"line_number":42,"context_line":"      ignore_errors: true"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    - name: set otp as a host fact"},{"line_number":45,"context_line":"      set_fact:"},{"line_number":46,"context_line":"        ipa_host_otp: \"{{ ipa_host.host.randompassword | default(omit) }}\""},{"line_number":47,"context_line":"      no_log: true"},{"line_number":48,"context_line":"      delegate_facts: true"},{"line_number":49,"context_line":"      delegate_to: \"{{ tripleo_ipa_delegate_server }}\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":52,"context_line":"  script: \u003e-"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_126a4ded","line":49,"range":{"start_line":33,"start_character":0,"end_line":49,"end_character":53},"updated":"2020-03-03 14:56:20.000000000","message":"I don\u0027t see anything that is specific to TripleO here.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"abdec6e67cd3866f0de7733f6005f3ada3d30628","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    base_server_domain: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027, 1)[1] }}\""},{"line_number":31,"context_line":"    enroll_base_server: \"{{ tripleo_ipa_enroll_base_server }}\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- name: add main host to IPA with OTP"},{"line_number":34,"context_line":"  when: enroll_base_server|bool"},{"line_number":35,"context_line":"  block:"},{"line_number":36,"context_line":"    - name: add new host with random otp"},{"line_number":37,"context_line":"      ipa_host:"},{"line_number":38,"context_line":"        fqdn: \"{{ tripleo_ipa_base_server_fqdn }}\""},{"line_number":39,"context_line":"        random_password: true"},{"line_number":40,"context_line":"        force: true"},{"line_number":41,"context_line":"      register: ipa_host"},{"line_number":42,"context_line":"      ignore_errors: true"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    - name: set otp as a host fact"},{"line_number":45,"context_line":"      set_fact:"},{"line_number":46,"context_line":"        ipa_host_otp: \"{{ ipa_host.host.randompassword | default(omit) }}\""},{"line_number":47,"context_line":"      no_log: true"},{"line_number":48,"context_line":"      delegate_facts: true"},{"line_number":49,"context_line":"      delegate_to: \"{{ tripleo_ipa_delegate_server }}\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":52,"context_line":"  script: \u003e-"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_906e352d","line":49,"range":{"start_line":33,"start_character":0,"end_line":49,"end_character":53},"in_reply_to":"1fa4df85_126a4ded","updated":"2020-03-03 16:45:27.000000000","message":"This is just a call to ansible-freeipa, to add the host. We could make a direct call like that in t-h-t.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"      delegate_facts: true"},{"line_number":49,"context_line":"      delegate_to: \"{{ tripleo_ipa_delegate_server }}\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":52,"context_line":"  script: \u003e-"},{"line_number":53,"context_line":"    \"{{ role_path }}/files/parse_service_metadata.py\""},{"line_number":54,"context_line":"    --server \"{{ base_server_short_name }}\""},{"line_number":55,"context_line":"    --domain \"{{ base_server_domain }}\""},{"line_number":56,"context_line":"    --data \u0027{{ tripleo_ipa_server_metadata }}\u0027"},{"line_number":57,"context_line":"  register: parsed_services"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"- name: add required services"},{"line_number":60,"context_line":"  include: services.yml"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_52a68555","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":27},"updated":"2020-03-03 14:56:20.000000000","message":"this could be replaced by calling a module (said in another comment).","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a082ecf829c2c876c49a02b1f8ebd34bfe6205a6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"      delegate_facts: true"},{"line_number":49,"context_line":"      delegate_to: \"{{ tripleo_ipa_delegate_server }}\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":52,"context_line":"  script: \u003e-"},{"line_number":53,"context_line":"    \"{{ role_path }}/files/parse_service_metadata.py\""},{"line_number":54,"context_line":"    --server \"{{ base_server_short_name }}\""},{"line_number":55,"context_line":"    --domain \"{{ base_server_domain }}\""},{"line_number":56,"context_line":"    --data \u0027{{ tripleo_ipa_server_metadata }}\u0027"},{"line_number":57,"context_line":"  register: parsed_services"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"- name: add required services"},{"line_number":60,"context_line":"  include: services.yml"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_79954b86","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":27},"in_reply_to":"1fa4df85_52a68555","updated":"2020-03-09 19:51:06.000000000","message":"Done","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"      delegate_facts: true"},{"line_number":49,"context_line":"      delegate_to: \"{{ tripleo_ipa_delegate_server }}\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"- name: run script to parse the ServerMetadata"},{"line_number":52,"context_line":"  script: \u003e-"},{"line_number":53,"context_line":"    \"{{ role_path }}/files/parse_service_metadata.py\""},{"line_number":54,"context_line":"    --server \"{{ base_server_short_name }}\""},{"line_number":55,"context_line":"    --domain \"{{ base_server_domain }}\""},{"line_number":56,"context_line":"    --data \u0027{{ tripleo_ipa_server_metadata }}\u0027"},{"line_number":57,"context_line":"  register: parsed_services"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"- name: add required services"},{"line_number":60,"context_line":"  include: services.yml"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_83957535","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":27},"in_reply_to":"1fa4df85_52a68555","updated":"2020-03-04 22:41:28.000000000","message":"right -- again note that the ServerMetadata that is being parsed here is tripleo specific.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"966bbea361da16f5db941843204d26a0edc8ee39","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# - tripleo_ipa_server_metadata    (server metadata, which includes required services)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"- name: set main facts"},{"line_number":28,"context_line":"  set_fact:"},{"line_number":29,"context_line":"    base_server_short_name: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027)[0] }}\""},{"line_number":30,"context_line":"    base_server_domain: \"{{ tripleo_ipa_base_server_fqdn.split(\u0027.\u0027, 1)[1] }}\""},{"line_number":31,"context_line":"    enroll_base_server: \"{{ tripleo_ipa_enroll_base_server }}\""}],"source_content_type":"text/x-yaml","patch_set":42,"id":"1fa4df85_fdf4a789","line":28,"updated":"2020-03-11 15:56:11.000000000","message":"I worked around the issue noted in services.yml by aliasing the variable to a new new:\n\n  set_fact:\n    server_fqdn: \"{{ tripleo_ipa_base_server_fqdn }}\"\n\nThen I was able to use the server_fqdn variable in servers.yml.","commit_id":"f3ddfef76740f224c7cdb6aff848641d159dc78e"}],"tripleo_ansible/roles/tripleo_ipa/tasks/services.yml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5c2b25358e6a42f215b480ddec9babec9ebd33bc","unresolved":false,"context_lines":[{"line_number":22,"context_line":"#"},{"line_number":23,"context_line":"# An example of this is:"},{"line_number":24,"context_line":"#   { \"controller-5.example.com\", \"controller-5.storagemgmt.example.com\","},{"line_number":25,"context_line":"#     \"haproxy\", \"compact\"}"},{"line_number":26,"context_line":"#"},{"line_number":27,"context_line":"# At this time, the final value in the tuple is unused."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_862a5129","line":25,"updated":"2020-03-05 22:11:43.000000000","message":"Based on the example metadata provided in the molecule tests, the output of parsing it would be the following for managed services:\n\nhttp://paste.openstack.org/raw/790364/\n\nI think we can get item.0 from the inventory host and item.3 isn\u0027t used. I\u0027m working on a filter to make this return a dictionary, where the key is the principal (since those need to be unique in ipa) and the value is the service.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"#"},{"line_number":27,"context_line":"# At this time, the final value in the tuple is unused."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"- name: set variables"},{"line_number":30,"context_line":"  set_fact:"},{"line_number":31,"context_line":"    base_host: \"{{ item.0 }}\""},{"line_number":32,"context_line":"    sub_host: \"{{ item.1 }}\""},{"line_number":33,"context_line":"    service: \"{{ item.2 }}\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- name: add sub_host"},{"line_number":36,"context_line":"  ipa_host:"},{"line_number":37,"context_line":"    fqdn: \"{{ sub_host }}\""},{"line_number":38,"context_line":"    force: true"},{"line_number":39,"context_line":"    state: present"},{"line_number":40,"context_line":"    validate_certs: false"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: add service"},{"line_number":43,"context_line":"  ipa_service:"},{"line_number":44,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":45,"context_line":"    force: true"},{"line_number":46,"context_line":"    state: present"},{"line_number":47,"context_line":"    validate_certs: false"},{"line_number":48,"context_line":"  register: my_service"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- name: add host to managed_hosts if needed"},{"line_number":51,"context_line":"  when: base_host not in my_service[\u0027host\u0027][\u0027managedby_host\u0027]"},{"line_number":52,"context_line":"  ipa_service:"},{"line_number":53,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":54,"context_line":"    force: true"},{"line_number":55,"context_line":"    state: present"},{"line_number":56,"context_line":"    hosts: \"{{ my_service[\u0027host\u0027][\u0027managedby_host\u0027] + [ base_host ] }}\""},{"line_number":57,"context_line":"    validate_certs: false"},{"line_number":58,"context_line":"  register: my_service2"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_d26fd5f9","line":58,"range":{"start_line":29,"start_character":0,"end_line":58,"end_character":23},"updated":"2020-03-03 14:56:20.000000000","message":"I don\u0027t see anything that is specific to TripleO here.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"#"},{"line_number":27,"context_line":"# At this time, the final value in the tuple is unused."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"- name: set variables"},{"line_number":30,"context_line":"  set_fact:"},{"line_number":31,"context_line":"    base_host: \"{{ item.0 }}\""},{"line_number":32,"context_line":"    sub_host: \"{{ item.1 }}\""},{"line_number":33,"context_line":"    service: \"{{ item.2 }}\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- name: add sub_host"},{"line_number":36,"context_line":"  ipa_host:"},{"line_number":37,"context_line":"    fqdn: \"{{ sub_host }}\""},{"line_number":38,"context_line":"    force: true"},{"line_number":39,"context_line":"    state: present"},{"line_number":40,"context_line":"    validate_certs: false"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: add service"},{"line_number":43,"context_line":"  ipa_service:"},{"line_number":44,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":45,"context_line":"    force: true"},{"line_number":46,"context_line":"    state: present"},{"line_number":47,"context_line":"    validate_certs: false"},{"line_number":48,"context_line":"  register: my_service"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- name: add host to managed_hosts if needed"},{"line_number":51,"context_line":"  when: base_host not in my_service[\u0027host\u0027][\u0027managedby_host\u0027]"},{"line_number":52,"context_line":"  ipa_service:"},{"line_number":53,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":54,"context_line":"    force: true"},{"line_number":55,"context_line":"    state: present"},{"line_number":56,"context_line":"    hosts: \"{{ my_service[\u0027host\u0027][\u0027managedby_host\u0027] + [ base_host ] }}\""},{"line_number":57,"context_line":"    validate_certs: false"},{"line_number":58,"context_line":"  register: my_service2"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_c3a60dac","line":58,"range":{"start_line":29,"start_character":0,"end_line":58,"end_character":23},"in_reply_to":"1fa4df85_70a61956","updated":"2020-03-04 22:41:28.000000000","message":"all of the above are calls to ansible-freeipa, to add the services needed by tripleo hosts.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"abdec6e67cd3866f0de7733f6005f3ada3d30628","unresolved":false,"context_lines":[{"line_number":26,"context_line":"#"},{"line_number":27,"context_line":"# At this time, the final value in the tuple is unused."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"- name: set variables"},{"line_number":30,"context_line":"  set_fact:"},{"line_number":31,"context_line":"    base_host: \"{{ item.0 }}\""},{"line_number":32,"context_line":"    sub_host: \"{{ item.1 }}\""},{"line_number":33,"context_line":"    service: \"{{ item.2 }}\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"- name: add sub_host"},{"line_number":36,"context_line":"  ipa_host:"},{"line_number":37,"context_line":"    fqdn: \"{{ sub_host }}\""},{"line_number":38,"context_line":"    force: true"},{"line_number":39,"context_line":"    state: present"},{"line_number":40,"context_line":"    validate_certs: false"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: add service"},{"line_number":43,"context_line":"  ipa_service:"},{"line_number":44,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":45,"context_line":"    force: true"},{"line_number":46,"context_line":"    state: present"},{"line_number":47,"context_line":"    validate_certs: false"},{"line_number":48,"context_line":"  register: my_service"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"- name: add host to managed_hosts if needed"},{"line_number":51,"context_line":"  when: base_host not in my_service[\u0027host\u0027][\u0027managedby_host\u0027]"},{"line_number":52,"context_line":"  ipa_service:"},{"line_number":53,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":54,"context_line":"    force: true"},{"line_number":55,"context_line":"    state: present"},{"line_number":56,"context_line":"    hosts: \"{{ my_service[\u0027host\u0027][\u0027managedby_host\u0027] + [ base_host ] }}\""},{"line_number":57,"context_line":"    validate_certs: false"},{"line_number":58,"context_line":"  register: my_service2"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_70a61956","line":58,"range":{"start_line":29,"start_character":0,"end_line":58,"end_character":23},"in_reply_to":"1fa4df85_d26fd5f9","updated":"2020-03-03 16:45:27.000000000","message":"This adds services that are then consumed by the certmonger puppet module called by TripleO.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0c9effbf14071e343c7073191f76925e60440970","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  register: my_service"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"- name: add host to managed_hosts if needed"},{"line_number":49,"context_line":"  when: tripleo_ipa_base_server_fqdn not in my_service[\u0027host\u0027][\u0027managedby_host\u0027]"},{"line_number":50,"context_line":"  ipa_service:"},{"line_number":51,"context_line":"    name: \"{{ service }}/{{ sub_host }}\""},{"line_number":52,"context_line":"    force: true"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"1fa4df85_9dc33339","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":36},"updated":"2020-03-11 13:47:06.000000000","message":"For some reason this is causing issues for me locally when I install my overcloud [0].\n\nThe tripleo_ipa_base_server_fqdn is defined in tripleo-heat-templates, but it doesn\u0027t appear to make it here.\n\n[0] http://paste.openstack.org/raw/790540/","commit_id":"f3ddfef76740f224c7cdb6aff848641d159dc78e"}],"tripleo_ansible/roles/tripleo_ipa/tasks/setup.yml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7947b8108d2d01ad5735b6fb8464737deb58e5a0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nova_service: \"nova/{{ ansible_fqdn }}\""},{"line_number":23,"context_line":"    nova_keytab: \"/etc/novajoin/krb5.keytab\""},{"line_number":24,"context_line":"    nova_keytab_group: \"tripleo-admin\""},{"line_number":25,"context_line":"    novajoin_perms:"},{"line_number":26,"context_line":"      - {name: \u0027Modify host password\u0027, right: \"write\", type: \"host\", attrs: \"userpassword\"}"},{"line_number":27,"context_line":"      - {name: \u0027Write host certificate\u0027, right: \"write\", type: \"host\", attrs: \"usercertificate\"}"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"3fa7e38b_428113a1","line":24,"range":{"start_line":24,"start_character":23,"end_line":24,"end_character":38},"updated":"2020-02-21 15:13:07.000000000","message":"I hit an issue using these patches locally because this group didn\u0027t exist. It is assumed that I should create this group before running these plays or can we make this configurable (e.g., in my case I used the stack group).","commit_id":"796d0523adaa583e3f8cb1f211c2eb992eec5490"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"8102df36ad2a38cccb54a651b7898f723599c7f3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    mode: \"g+w\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# unfortunately we don\u0027t have ansible module yet to create perms"},{"line_number":76,"context_line":"- name: add nova host managedment permissions"},{"line_number":77,"context_line":"  shell: |"},{"line_number":78,"context_line":"    ipa permission-find \"{{ item.name }}\""},{"line_number":79,"context_line":"    if [ $? -ne 0 ]; then"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"3fa7e38b_63e6ae4c","line":76,"updated":"2020-02-19 16:03:29.000000000","message":"managedment -\u003e management","commit_id":"796d0523adaa583e3f8cb1f211c2eb992eec5490"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"8102df36ad2a38cccb54a651b7898f723599c7f3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"# unfortunately we don\u0027t have ansible module yet to create perms"},{"line_number":76,"context_line":"- name: add nova host managedment permissions"},{"line_number":77,"context_line":"  shell: |"},{"line_number":78,"context_line":"    ipa permission-find \"{{ item.name }}\""},{"line_number":79,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":80,"context_line":"      ipa permission-add \"{{ item.name }}\" --right \"{{ item.right }}\" \\"},{"line_number":81,"context_line":"        --type \"{{ item.type }}\" --attrs \"{{ item.attrs }}\""}],"source_content_type":"text/x-yaml","patch_set":34,"id":"3fa7e38b_23c996aa","line":78,"updated":"2020-02-19 16:03:29.000000000","message":"permission-show is preferred. It will construct the DN of the permission based on what is passed in so uses less resources than searching the database. Is there a reason this isn\u0027t abstracted more rather than having separate calls for all the permissions?","commit_id":"796d0523adaa583e3f8cb1f211c2eb992eec5490"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"88505e39ec7eadfcc38e55752e131ea16e92ca51","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  file:"},{"line_number":71,"context_line":"    path: \"{{ nova_keytab }}\""},{"line_number":72,"context_line":"    group: \"{{ nova_keytab_group }}\""},{"line_number":73,"context_line":"    mode: \"g+w\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# unfortunately we don\u0027t have ansible module yet to create perms"},{"line_number":76,"context_line":"- name: add nova host managedment permissions"}],"source_content_type":"text/x-yaml","patch_set":35,"id":"1fa4df85_91931750","line":73,"range":{"start_line":73,"start_character":0,"end_line":73,"end_character":15},"updated":"2020-02-24 15:45:30.000000000","message":"I hit some issues locally because the keytab wasn\u0027t readable. Should we make this? \n\n  \"g+rw\"","commit_id":"581b4335e9ecc901fe4ee17dc69a2d1e3d3adef2"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"ab64f48c4715fd3879b9bf18946274701b62c983","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    state: present"},{"line_number":55,"context_line":"    force: true"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"- name: add directory for keytab"},{"line_number":58,"context_line":"  file:"},{"line_number":59,"context_line":"    path: \"/etc/novajoin\""},{"line_number":60,"context_line":"    state: directory"},{"line_number":61,"context_line":"    mode: \u00270755\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- name: get a keytab for the novajoin service"},{"line_number":64,"context_line":"  shell: |"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"1fa4df85_1051fc0e","line":61,"range":{"start_line":57,"start_character":0,"end_line":61,"end_character":16},"updated":"2020-03-02 14:02:44.000000000","message":"this should be done by packaging, not ansible, isn\u0027t?","commit_id":"f48ef769a38d29bc9d0aca54684780f0c34b0775"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"ecfea80b9fd4b4d95f1cfee69acadedf93104d78","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    state: present"},{"line_number":55,"context_line":"    force: true"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"- name: add directory for keytab"},{"line_number":58,"context_line":"  file:"},{"line_number":59,"context_line":"    path: \"/etc/novajoin\""},{"line_number":60,"context_line":"    state: directory"},{"line_number":61,"context_line":"    mode: \u00270755\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- name: get a keytab for the novajoin service"},{"line_number":64,"context_line":"  shell: |"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"1fa4df85_db7065df","line":61,"range":{"start_line":57,"start_character":0,"end_line":61,"end_character":16},"in_reply_to":"1fa4df85_1051fc0e","updated":"2020-03-02 15:10:43.000000000","message":"In the past, this was created by the novajoin package, but since we will be removing it in the future, we need to make sure the directory is there.","commit_id":"f48ef769a38d29bc9d0aca54684780f0c34b0775"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# This role creates the keytab and adds the nova service in FreeIPA."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: set keytab permissions facts"},{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nova_service: \"nova/{{ ansible_fqdn }}\""}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_720f0137","line":19,"updated":"2020-03-03 14:56:20.000000000","message":"This file might be the only relevant thing that is specific to tripleo (in fact nova).\nWhat I would have loved to see here is just a playbook (setup.yml), calling a role in ansible-ipa which does all these tasks, based on some variables that are given (nova things). Instead of maintaining this logic in there.\n\nUnless you tell me that these tasks are tight to how nova is configured and there is no other service that would be integrated the same; then ok.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# This role creates the keytab and adds the nova service in FreeIPA."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: set keytab permissions facts"},{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nova_service: \"nova/{{ ansible_fqdn }}\""}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_a3f0b192","line":19,"in_reply_to":"1fa4df85_6b306ce9","updated":"2020-03-04 22:41:28.000000000","message":"Here we are adding to ipa the permissions and privileges that are required to do the things that tripleo wants to do -- add hosts, add dns entries, add services etc.  And we are creating a user that then has these permissions.\n\nThe idea is that we want to restrict the user to do exactly what is needed and no more.\n\nAs such, this is tripleo specific because we\u0027re crafting an ipa role to permit you to do tripleo things - only those things.\n\nWe try to use freeipa-ansible calls whenever possible - but there are things that are not yet available there.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"abdec6e67cd3866f0de7733f6005f3ada3d30628","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# This role creates the keytab and adds the nova service in FreeIPA."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: set keytab permissions facts"},{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nova_service: \"nova/{{ ansible_fqdn }}\""}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_6b306ce9","line":19,"in_reply_to":"1fa4df85_720f0137","updated":"2020-03-03 16:45:27.000000000","message":"Well, this specifically configures the permissions needed by TripleO, but all entry points to administrating IPA are managed by this role, so I think it should be kept inside it. \nDecoupling it would introduce more integration bugs.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  ipa_service:"},{"line_number":53,"context_line":"    name: \"{{ nova_service }}\""},{"line_number":54,"context_line":"    state: present"},{"line_number":55,"context_line":"    force: true"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"- name: add directory for keytab"},{"line_number":58,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_c3edadb7","line":55,"updated":"2020-03-04 22:41:28.000000000","message":"this is a call to tripleo ansible to create the ipa user","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"bcf99d9e3515bcad926eaa0d97de5f14b76f3fa5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  ipa_service:"},{"line_number":53,"context_line":"    name: \"{{ nova_service }}\""},{"line_number":54,"context_line":"    state: present"},{"line_number":55,"context_line":"    force: true"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"- name: add directory for keytab"},{"line_number":58,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_4310dda8","line":55,"in_reply_to":"1fa4df85_c3edadb7","updated":"2020-03-04 22:43:29.000000000","message":"I mean ansible-freeipa","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"38d6acd17112aeac8f6afcfef6d0b3ba8e521a0f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    state: present"},{"line_number":55,"context_line":"    force: true"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"- name: add directory for keytab"},{"line_number":58,"context_line":"  file:"},{"line_number":59,"context_line":"    path: \"/etc/novajoin\""},{"line_number":60,"context_line":"    state: directory"},{"line_number":61,"context_line":"    mode: \u00270755\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- name: get a keytab for the novajoin service"},{"line_number":64,"context_line":"  shell: |"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_b243396c","line":61,"range":{"start_line":57,"start_character":0,"end_line":61,"end_character":16},"updated":"2020-03-03 14:56:20.000000000","message":"does it need selinux context since it\u0027s a directory in etc?","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    state: present"},{"line_number":55,"context_line":"    force: true"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"- name: add directory for keytab"},{"line_number":58,"context_line":"  file:"},{"line_number":59,"context_line":"    path: \"/etc/novajoin\""},{"line_number":60,"context_line":"    state: directory"},{"line_number":61,"context_line":"    mode: \u00270755\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- name: get a keytab for the novajoin service"},{"line_number":64,"context_line":"  shell: |"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_8331f55c","line":61,"range":{"start_line":57,"start_character":0,"end_line":61,"end_character":16},"in_reply_to":"1fa4df85_b243396c","updated":"2020-03-04 22:41:28.000000000","message":"definitely - good catch -- we need to add this.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    group: \"{{ nova_keytab_group }}\""},{"line_number":73,"context_line":"    mode: \"g+r\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# unfortunately we don\u0027t have ansible module yet to create perms"},{"line_number":76,"context_line":"- name: add nova host managedment permissions"},{"line_number":77,"context_line":"  shell: |"},{"line_number":78,"context_line":"    ipa permission-find \"{{ item.name }}\""},{"line_number":79,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":80,"context_line":"      ipa permission-add \"{{ item.name }}\" --right \"{{ item.right }}\" \\"},{"line_number":81,"context_line":"        --type \"{{ item.type }}\" --attrs \"{{ item.attrs }}\""},{"line_number":82,"context_line":"    fi"},{"line_number":83,"context_line":"  loop: \"{{ novajoin_perms|flatten(levels\u003d1) }}\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# unfortunately we don\u0027t have ansible module yet to create privileges"},{"line_number":86,"context_line":"- name: add Nova Host privilege"},{"line_number":87,"context_line":"  shell: |"},{"line_number":88,"context_line":"    ipa privilege-find \u0027Nova Host Management\u0027"},{"line_number":89,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":90,"context_line":"      ipa privilege-add --desc\u003d\u0027Nova Host Management\u0027 \u0027Nova Host Management\u0027"},{"line_number":91,"context_line":"    fi"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"- name: add permissions to the Nova Host privilege"},{"line_number":94,"context_line":"  shell: |"},{"line_number":95,"context_line":"    ipa privilege-add-permission \u0027Nova Host Management\u0027 \\"},{"line_number":96,"context_line":"      --permission \"{{ item }}\""},{"line_number":97,"context_line":"  register: add_perm_command"},{"line_number":98,"context_line":"  failed_when:"},{"line_number":99,"context_line":"    - add_perm_command.rc !\u003d0"},{"line_number":100,"context_line":"    - \u0027\"This entry is already a member\" not in add_perm_command.stdout\u0027"},{"line_number":101,"context_line":"  loop: \"{{ novajoin_privilege_perms|flatten(levels\u003d1) }}\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"- name: add Nova Host Manager role"},{"line_number":104,"context_line":"  ipa_role:"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_e33f8922","line":101,"range":{"start_line":75,"start_character":0,"end_line":101,"end_character":58},"updated":"2020-03-04 22:41:28.000000000","message":"We\u0027d love to do this using trpleo-ansible, but the calls are not there yet.","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"bcf99d9e3515bcad926eaa0d97de5f14b76f3fa5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    group: \"{{ nova_keytab_group }}\""},{"line_number":73,"context_line":"    mode: \"g+r\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# unfortunately we don\u0027t have ansible module yet to create perms"},{"line_number":76,"context_line":"- name: add nova host managedment permissions"},{"line_number":77,"context_line":"  shell: |"},{"line_number":78,"context_line":"    ipa permission-find \"{{ item.name }}\""},{"line_number":79,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":80,"context_line":"      ipa permission-add \"{{ item.name }}\" --right \"{{ item.right }}\" \\"},{"line_number":81,"context_line":"        --type \"{{ item.type }}\" --attrs \"{{ item.attrs }}\""},{"line_number":82,"context_line":"    fi"},{"line_number":83,"context_line":"  loop: \"{{ novajoin_perms|flatten(levels\u003d1) }}\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# unfortunately we don\u0027t have ansible module yet to create privileges"},{"line_number":86,"context_line":"- name: add Nova Host privilege"},{"line_number":87,"context_line":"  shell: |"},{"line_number":88,"context_line":"    ipa privilege-find \u0027Nova Host Management\u0027"},{"line_number":89,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":90,"context_line":"      ipa privilege-add --desc\u003d\u0027Nova Host Management\u0027 \u0027Nova Host Management\u0027"},{"line_number":91,"context_line":"    fi"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"- name: add permissions to the Nova Host privilege"},{"line_number":94,"context_line":"  shell: |"},{"line_number":95,"context_line":"    ipa privilege-add-permission \u0027Nova Host Management\u0027 \\"},{"line_number":96,"context_line":"      --permission \"{{ item }}\""},{"line_number":97,"context_line":"  register: add_perm_command"},{"line_number":98,"context_line":"  failed_when:"},{"line_number":99,"context_line":"    - add_perm_command.rc !\u003d0"},{"line_number":100,"context_line":"    - \u0027\"This entry is already a member\" not in add_perm_command.stdout\u0027"},{"line_number":101,"context_line":"  loop: \"{{ novajoin_privilege_perms|flatten(levels\u003d1) }}\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"- name: add Nova Host Manager role"},{"line_number":104,"context_line":"  ipa_role:"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_c31b6dc7","line":101,"range":{"start_line":75,"start_character":0,"end_line":101,"end_character":58},"in_reply_to":"1fa4df85_e33f8922","updated":"2020-03-04 22:43:29.000000000","message":"s/tripleo-ansible/ansible-freeipa/","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"42d3b0a25bb14c7edcb7fcc0f26d5a4ea991dda7","unresolved":false,"context_lines":[{"line_number":101,"context_line":"  loop: \"{{ novajoin_privilege_perms|flatten(levels\u003d1) }}\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"- name: add Nova Host Manager role"},{"line_number":104,"context_line":"  ipa_role:"},{"line_number":105,"context_line":"    name: Nova Host Manager"},{"line_number":106,"context_line":"    description: Nova Host Manager"},{"line_number":107,"context_line":"    privilege:"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_033d052a","line":104,"range":{"start_line":104,"start_character":1,"end_line":104,"end_character":11},"updated":"2020-03-04 22:41:28.000000000","message":"This is a call to tripleo-ansible","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"bcf99d9e3515bcad926eaa0d97de5f14b76f3fa5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"  loop: \"{{ novajoin_privilege_perms|flatten(levels\u003d1) }}\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"- name: add Nova Host Manager role"},{"line_number":104,"context_line":"  ipa_role:"},{"line_number":105,"context_line":"    name: Nova Host Manager"},{"line_number":106,"context_line":"    description: Nova Host Manager"},{"line_number":107,"context_line":"    privilege:"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"1fa4df85_03266516","line":104,"range":{"start_line":104,"start_character":1,"end_line":104,"end_character":11},"in_reply_to":"1fa4df85_033d052a","updated":"2020-03-04 22:43:29.000000000","message":"I mean ansible-freeipa","commit_id":"be78f88740464ec5965e24a3690349ed4c50e5e4"}],"zuul.d/molecule.yaml":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"639b50500a90be1b6af764cb0834ad112b2bd497","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- project-template:"},{"line_number":3,"context_line":"    check:"},{"line_number":4,"context_line":"      jobs:"},{"line_number":5,"context_line":"      - tripleo-ansible-centos-8-molecule-aide"},{"line_number":6,"context_line":"      - tripleo-ansible-centos-8-molecule-backup_and_restore"},{"line_number":7,"context_line":"      - tripleo-ansible-centos-8-molecule-login_defs"},{"line_number":8,"context_line":"      - tripleo-ansible-centos-8-molecule-test_deps"},{"line_number":9,"context_line":"      - tripleo-ansible-centos-8-molecule-test_package_action"},{"line_number":10,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_bootstrap"},{"line_number":11,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_cellv2"},{"line_number":12,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_ceph_run_ansible:"},{"line_number":13,"context_line":"          # See https://bugs.launchpad.net/tripleo/+bug/1867012"},{"line_number":14,"context_line":"          voting: false"},{"line_number":15,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_clients_install"},{"line_number":16,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_config"},{"line_number":17,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_image_prepare"},{"line_number":18,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_manage"},{"line_number":19,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_rm"},{"line_number":20,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_stop"},{"line_number":21,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_tag"},{"line_number":22,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_create_admin"},{"line_number":23,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_firewall"},{"line_number":24,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hieradata"},{"line_number":25,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hosts_entries"},{"line_number":26,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_image_serve"},{"line_number":27,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ipa"},{"line_number":28,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_kernel"},{"line_number":29,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_keystone_resources"},{"line_number":30,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_module_load"},{"line_number":31,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo-modules"},{"line_number":32,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_nova_image_cache"},{"line_number":33,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ovs_dpdk"},{"line_number":34,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_packages"},{"line_number":35,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_persist"},{"line_number":36,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_podman"},{"line_number":37,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ptp"},{"line_number":38,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_puppet_cache"},{"line_number":39,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_securetty"},{"line_number":40,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ssh_known_hosts"},{"line_number":41,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_sshd"},{"line_number":42,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_systemd_wrapper"},{"line_number":43,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_timezone"},{"line_number":44,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_transfer"},{"line_number":45,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_upgrade_hiera"},{"line_number":46,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_validations_package"},{"line_number":47,"context_line":"      - tripleo-ansible-centos-8-molecule-tuned"},{"line_number":48,"context_line":"      - tripleo-ansible-centos-8-role-addition"},{"line_number":49,"context_line":"    gate:"},{"line_number":50,"context_line":"      jobs:"},{"line_number":51,"context_line":"      - tripleo-ansible-centos-8-molecule-aide"},{"line_number":52,"context_line":"      - tripleo-ansible-centos-8-molecule-backup_and_restore"},{"line_number":53,"context_line":"      - tripleo-ansible-centos-8-molecule-login_defs"},{"line_number":54,"context_line":"      - tripleo-ansible-centos-8-molecule-test_deps"},{"line_number":55,"context_line":"      - tripleo-ansible-centos-8-molecule-test_package_action"},{"line_number":56,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_bootstrap"},{"line_number":57,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_cellv2"},{"line_number":58,"context_line":"      # - tripleo-ansible-centos-7-molecule-tripleo_ceph_run_ansible"},{"line_number":59,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_clients_install"},{"line_number":60,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_config"},{"line_number":61,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_image_prepare"},{"line_number":62,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_manage"},{"line_number":63,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_rm"},{"line_number":64,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_stop"},{"line_number":65,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_tag"},{"line_number":66,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_create_admin"},{"line_number":67,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_firewall"},{"line_number":68,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hieradata"},{"line_number":69,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hosts_entries"},{"line_number":70,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_image_serve"},{"line_number":71,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ipa"},{"line_number":72,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_kernel"},{"line_number":73,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_keystone_resources"},{"line_number":74,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_module_load"},{"line_number":75,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo-modules"},{"line_number":76,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_nova_image_cache"},{"line_number":77,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ovs_dpdk"},{"line_number":78,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_packages"},{"line_number":79,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_persist"},{"line_number":80,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_podman"},{"line_number":81,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ptp"},{"line_number":82,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_puppet_cache"},{"line_number":83,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_securetty"},{"line_number":84,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ssh_known_hosts"},{"line_number":85,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_sshd"},{"line_number":86,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_systemd_wrapper"},{"line_number":87,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_timezone"},{"line_number":88,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_transfer"},{"line_number":89,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_upgrade_hiera"},{"line_number":90,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_validations_package"},{"line_number":91,"context_line":"      - tripleo-ansible-centos-8-molecule-tuned"},{"line_number":92,"context_line":"      - tripleo-ansible-centos-8-role-addition"},{"line_number":93,"context_line":"    name: tripleo-ansible-molecule-jobs"},{"line_number":94,"context_line":"- job:"},{"line_number":95,"context_line":"    files:"},{"line_number":96,"context_line":"    - ^tripleo_ansible/roles/aide/.*"}],"source_content_type":"text/x-yaml","patch_set":43,"id":"1fa4df85_406e2fca","line":93,"range":{"start_line":2,"start_character":2,"end_line":93,"end_character":0},"updated":"2020-03-11 16:43:59.000000000","message":"Job tripleo-ansible-centos-8-molecule-tripleo_ipa not defined","commit_id":"0b995388399324afb954da68228547da44f005f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"639b50500a90be1b6af764cb0834ad112b2bd497","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- project-template:"},{"line_number":3,"context_line":"    check:"},{"line_number":4,"context_line":"      jobs:"},{"line_number":5,"context_line":"      - tripleo-ansible-centos-8-molecule-aide"},{"line_number":6,"context_line":"      - tripleo-ansible-centos-8-molecule-backup_and_restore"},{"line_number":7,"context_line":"      - tripleo-ansible-centos-8-molecule-login_defs"},{"line_number":8,"context_line":"      - tripleo-ansible-centos-8-molecule-test_deps"},{"line_number":9,"context_line":"      - tripleo-ansible-centos-8-molecule-test_package_action"},{"line_number":10,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_bootstrap"},{"line_number":11,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_cellv2"},{"line_number":12,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_ceph_run_ansible:"},{"line_number":13,"context_line":"          # See https://bugs.launchpad.net/tripleo/+bug/1867012"},{"line_number":14,"context_line":"          voting: false"},{"line_number":15,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_clients_install"},{"line_number":16,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_config"},{"line_number":17,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_image_prepare"},{"line_number":18,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_manage"},{"line_number":19,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_rm"},{"line_number":20,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_stop"},{"line_number":21,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_tag"},{"line_number":22,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_create_admin"},{"line_number":23,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_firewall"},{"line_number":24,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hieradata"},{"line_number":25,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hosts_entries"},{"line_number":26,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_image_serve"},{"line_number":27,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ipa"},{"line_number":28,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_kernel"},{"line_number":29,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_keystone_resources"},{"line_number":30,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_module_load"},{"line_number":31,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo-modules"},{"line_number":32,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_nova_image_cache"},{"line_number":33,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ovs_dpdk"},{"line_number":34,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_packages"},{"line_number":35,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_persist"},{"line_number":36,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_podman"},{"line_number":37,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ptp"},{"line_number":38,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_puppet_cache"},{"line_number":39,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_securetty"},{"line_number":40,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ssh_known_hosts"},{"line_number":41,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_sshd"},{"line_number":42,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_systemd_wrapper"},{"line_number":43,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_timezone"},{"line_number":44,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_transfer"},{"line_number":45,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_upgrade_hiera"},{"line_number":46,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_validations_package"},{"line_number":47,"context_line":"      - tripleo-ansible-centos-8-molecule-tuned"},{"line_number":48,"context_line":"      - tripleo-ansible-centos-8-role-addition"},{"line_number":49,"context_line":"    gate:"},{"line_number":50,"context_line":"      jobs:"},{"line_number":51,"context_line":"      - tripleo-ansible-centos-8-molecule-aide"},{"line_number":52,"context_line":"      - tripleo-ansible-centos-8-molecule-backup_and_restore"},{"line_number":53,"context_line":"      - tripleo-ansible-centos-8-molecule-login_defs"},{"line_number":54,"context_line":"      - tripleo-ansible-centos-8-molecule-test_deps"},{"line_number":55,"context_line":"      - tripleo-ansible-centos-8-molecule-test_package_action"},{"line_number":56,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_bootstrap"},{"line_number":57,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_cellv2"},{"line_number":58,"context_line":"      # - tripleo-ansible-centos-7-molecule-tripleo_ceph_run_ansible"},{"line_number":59,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_clients_install"},{"line_number":60,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_config"},{"line_number":61,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_image_prepare"},{"line_number":62,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_manage"},{"line_number":63,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_rm"},{"line_number":64,"context_line":"      - tripleo-ansible-centos-7-molecule-tripleo_container_stop"},{"line_number":65,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_container_tag"},{"line_number":66,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_create_admin"},{"line_number":67,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_firewall"},{"line_number":68,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hieradata"},{"line_number":69,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_hosts_entries"},{"line_number":70,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_image_serve"},{"line_number":71,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ipa"},{"line_number":72,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_kernel"},{"line_number":73,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_keystone_resources"},{"line_number":74,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_module_load"},{"line_number":75,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo-modules"},{"line_number":76,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_nova_image_cache"},{"line_number":77,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ovs_dpdk"},{"line_number":78,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_packages"},{"line_number":79,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_persist"},{"line_number":80,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_podman"},{"line_number":81,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ptp"},{"line_number":82,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_puppet_cache"},{"line_number":83,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_securetty"},{"line_number":84,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_ssh_known_hosts"},{"line_number":85,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_sshd"},{"line_number":86,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_systemd_wrapper"},{"line_number":87,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_timezone"},{"line_number":88,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_transfer"},{"line_number":89,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_upgrade_hiera"},{"line_number":90,"context_line":"      - tripleo-ansible-centos-8-molecule-tripleo_validations_package"},{"line_number":91,"context_line":"      - tripleo-ansible-centos-8-molecule-tuned"},{"line_number":92,"context_line":"      - tripleo-ansible-centos-8-role-addition"},{"line_number":93,"context_line":"    name: tripleo-ansible-molecule-jobs"},{"line_number":94,"context_line":"- job:"},{"line_number":95,"context_line":"    files:"},{"line_number":96,"context_line":"    - ^tripleo_ansible/roles/aide/.*"}],"source_content_type":"text/x-yaml","patch_set":43,"id":"1fa4df85_60732bb3","line":93,"range":{"start_line":2,"start_character":2,"end_line":93,"end_character":0},"updated":"2020-03-11 16:43:59.000000000","message":"Job tripleo-ansible-centos-8-molecule-tripleo_ipa not defined","commit_id":"0b995388399324afb954da68228547da44f005f8"}]}
