<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><font face="Hack">Soon nova will be switched off by default on
        the undercloud and all overcloud deployments will effectively be
        deployed-server based (either provisioned manually or via the
        baremetal provision command)</font></p>
    <p><font face="Hack">This means that the docs for running firstboot
        scripts[1] will no longer work, and neither will our collection
        of firstboot scripts[2]. In this email I'm going to propose what
        we could do about this situation and if there are still
        unresolved issues by the PTG it might be worth having a short
        session on it.</font></p>
    <p><font face="Hack">The baremetal provisioning implementation
        already uses cloud-init cloud-config internally for user
        creation and key injection[3] so I'm going to propose an
        enhancement the the baremetal provisioning yaml format so that
        custom cloud-config instructions can be included either inline
        or as a file path.<br>
      </font></p>
    <p><font face="Hack">I think it is worth going through each
        firstboot script[2] and deciding what its fate should be (other
        than being deprecated in Ussuri):</font></p>
    <p><font face="Hack"><a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/conntectx3_streering.yaml">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/conntectx3_streering.yaml</a></font></p>
    <p><font face="Hack">This has no parameters, so it could be
        converted to a standalone cloud-config file, but should it? Can
        this be achieved with kernel args? Does it require a reboot
        anyway, and so can be done with extraconfig?<br>
      </font></p>
    <p><font face="Hack"><br>
      </font></p>
    <p><font face="Hack"><a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/os-net-config-mappings.yaml">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/os-net-config-mappings.yaml</a></font></p>
    <p><font face="Hack">I'm not sure why this is implemented as first
        boot, it seems to consume the parameter </font><code
        class="yaml hljs"><span class="hljs-attr">NetConfigDataLookup
          and transforms it to the format os-net-config needs for the
          file </span></code><code class="yaml hljs"><span
          class="hljs-string">/etc/os-net-config/mapping.yaml. It looks
          like this functionality should be moved to where os-net-config
          is actually invoked, and the </span></code><code class="yaml
        hljs"><span class="hljs-string"><code class="yaml hljs"><span
              class="hljs-attr">NetConfigDataLookup parameter should be
              officially supported.<br>
            </span></code></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><br>
        </span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_dev_rsync.yaml">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_dev_rsync.yaml</a></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string">I suggest
          deleting this and including a cloud-config version in the
          baremetal provisioning docs.</span></code></p>
    <p><br>
      <code class="yaml hljs"><span class="hljs-string"></span></code><code
        class="yaml hljs"><span class="hljs-string"></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack"><a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_heat_admin.yaml">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_heat_admin.yaml</a></font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack">Delete this, there is already an abstraction for
            this built into the baremetal provisioning format[4]</font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack"><br>
          </font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack"><a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_root_password.yaml">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_root_password.yaml</a></font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack">Delete this and include it as an example in the
            baremetal provisioning docs.</font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack"><br>
          </font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack"><a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_timesync.yaml">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot/userdata_timesync.yaml</a></font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack">Maybe this could be converted to an
            extraconfig/all_nodes script[5], but it would be better if
            this sort of thing could be implemented as an ansible role
            or playbook, are there any plans for an extraconfig
            mechanism which uses plain ansible semantics?</font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack"><br>
          </font></span></code></p>
    <p><code class="yaml hljs"><span class="hljs-string"><font
            face="Hack">cheers<br>
          </font></span></code></p>
    <p><font face="Hack">[1]
<a class="moz-txt-link-freetext" href="https://docs.openstack.org/project-deploy-guide/tripleo-docs/latest/features/extra_config.html#firstboot-extra-configuration">https://docs.openstack.org/project-deploy-guide/tripleo-docs/latest/features/extra_config.html#firstboot-extra-configuration</a><br>
      </font></p>
    <p><font face="Hack">[2]
<a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/firstboot</a><br>
      </font></p>
    <p><font face="Hack">[3]
<a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/ansible_plugins/modules/metalsmith_instances.py#L286">https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/ansible_plugins/modules/metalsmith_instances.py#L286</a></font></p>
    <p><font face="Hack">[4]
<a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/ansible_plugins/modules/metalsmith_instances.py#L132">https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/ansible_plugins/modules/metalsmith_instances.py#L132</a></font></p>
    <p><font face="Hack">   
<a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/ansible_plugins/modules/metalsmith_instances.py#L145">https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/ansible_plugins/modules/metalsmith_instances.py#L145</a></font></p>
    <p><font face="Hack">[5]
<a class="moz-txt-link-freetext" href="https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/extraconfig/all_nodes">https://opendev.org/openstack/tripleo-heat-templates/src/branch/master/extraconfig/all_nodes</a><br>
      </font></p>
  </body>
</html>