<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <meta http-equiv="CONTENT-TYPE" content="text/html;
      charset=ISO-8859-1">
    <h1 class="western">RFC: Template Versions and Naming Consistencies</h1>
    <p>I should have probably written this as two separate emails but
      since both points are intertwined I thought it be better to
      discuss
      together.<br>
    </p>
    <p><br>
    </p>
    <p><b>Background</b></p>
    <p>At the moment Tim templates are completely immutable. This means
      making a simple change to a template requires creating a
      completely
      new template. The original thinking here was that templates could
      be
      cloned, edited then saved, so would not have had large user
      overhead. However, since templates are the top level object in
      Tim. i.e.
      Template has many Base Images and so on. It meant that images
      created from differening templates (even if they were cloned) were
      not related in any way making it difficult to track changes in
      both
      templates and images.<br>
    </p>
    <p><br>
    </p>
    <p><i><b>A rather contrived example might be:</b></i></p>
    <p>User Bob wants launch an instance of his image in EC2. If there
      is already an image in ec2 with my Bobs application &gt; version
      1.0
      then use that. Otherwise he wants to build a new image based on
      the
      most recent template. Since the templates are not related in
      anyway
      it makes it difficult to do this.<br>
    </p>
    <p><br>
    </p>
    <p><b>Template Versions</b></p>
    <p>Adding in the concept of Template Versions allows a user to
      create
      a master template. This template can be edited as many times as
      the
      user wants. Each time a change is made the user can snapshot it
      and
      create a Template Version. This is then timestamped, versioned and
      asscoated with the master template. The template version is then
      used to create Image Versions. This allows users to track changes
      in
      templates and use specific images of particular template versions.
      In the scenario above, we could easily check the Template Versions
      for the presence of Application V1.0 in EC2. If it exists lauch it
      otherwise create a new one.<br>
    </p>
    <p><br>
    </p>
    <b>New Model and Rename</b>
    <p style="font-weight: normal">In addition to adding Template
      Versions we should make the naming of components consistent across
      projects. This means renaming some of the existing models in Tim.
      See the diagrams below. The Base Image is now renamed to Image
      (the
      naming here is up for grabs as long as it dpoes not conflict with
      Factory). Image Version is now named to Base Image (since it is
      related to Factory::BaseImage)<br>
    </p>
    <p style="font-weight: normal"><br>
    </p>
    <br>
    <img alt="Tim Resource Model"
      src="cid:part1.03080100.04080208@redhat.com" height="1145"
      width="800"><br>
    <h2 class="western">Scenarios:</h2>
    <ul>
      <li>
        <p style="margin-bottom: 0in">As an Application Designer I want
          to create Templates</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As an Application Designer I want
          to create a new <i>version</i> of an existing Template.</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As an Infrastructure Consumer I
          want to build and deploy Images based on a particular
          Template.</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As an Infrastructure Consumer I
          want to view which Template an Image was built from.</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As a Infrastructure Consumer I
          want to guarantee equivalence (packages/versions) across
          Target and Provider Images.</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As an Infrastructure Consumer I
          want to create a deployable that references a specific target
          image.</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As an Infrastructure Consumer I
          want to create a deployable that references the target image
          build of a specific template version.</p>
      </li>
      <li>
        <p style="margin-bottom: 0in">As an Infrastructure Consumer I
          want to create a deployable that references the most recent
          version of a template.</p>
      </li>
    </ul>
    <p style="margin-bottom: 0in"><br>
    </p>
    <p style="margin-bottom: 0in"><br>
    </p>
    <pre class="western" style="margin-bottom: 0.2in">
</pre>
    <p style="margin-bottom: 0in">
      <br>
    </p>
    <title></title>
    <meta name="GENERATOR" content="LibreOffice 3.5 (Linux)">
    <style type="text/css">
        <!--
                @page { margin: 0.79in }
                H2 { margin-bottom: 0.08in }
                H2.western { font-family: "Liberation Sans", sans-serif; font-size: 14pt; font-style: italic }
                H2.cjk { font-family: "WenQuanYi Zen Hei Sharp"; font-size: 14pt; font-style: italic }
                H2.ctl { font-family: "Lohit Devanagari"; font-size: 14pt; font-style: italic }
                H1 { margin-bottom: 0.08in }
                H1.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt }
                H1.cjk { font-family: "WenQuanYi Zen Hei Sharp"; font-size: 16pt }
                H1.ctl { font-family: "Lohit Devanagari"; font-size: 16pt }
                PRE.cjk { font-family: "WenQuanYi Zen Hei Sharp", monospace }
                PRE.ctl { font-family: "Lohit Devanagari", monospace }
                P { margin-bottom: 0.08in }
                A:link { so-language: zxx }
        -->
        </style>
  </body>
</html>