{"action":"created","comment":{"url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/comments/171007059","pull_request_review_id":99765689,"id":171007059,"diff_hunk":"@@ -0,0 +1,692 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n+<?xml-stylesheet href=\"urn:x-suse:xslt:profiling:docbook50-profile.xsl\"\n+ type=\"text/xml\"\n+ title=\"Profiling step\"?>\n+<!DOCTYPE article\n+[\n+  <!ENTITY % entities SYSTEM \"entity-decl.ent\">\n+    %entities;\n+]>\n+<article version=\"5.1\" xml:lang=\"en\" xml:id=\"art.hos.migration\"\n+  xmlns=\"http://docbook.org/ns/docbook\"\n+  xmlns:xi=\"http://www.w3.org/2001/XInclude\"\n+  xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n+ <info>\n+  <title>Migration Guide</title>\n+  <date><?dbtimestamp format=\"B d, Y\"?></date>\n+  <!-- <xi:include href=\"common_copyright_gfdl.xml\"/> -->\n+  <!--<xi:include href=\"authors.xml\"/>-->\n+ </info>\n+ <para>\n+  <remark role=\"clarity\">taroth 2018-02-27: who is the target audience for this document?\n+  cloud operators? cloud administrators?</remark>\n+  <remark>taroth 2018-02-27: in terms of terminology, I guess that 'seed', 'deployer'\n+  should be changed to 'seed nodes', 'deployer nodes' etc.</remark>\n+ </para>\n+<sect1>\n+  <title>Migration from HOS 5.x to HOS 5.SCP</title>\n+  <para>\n+    The migration procedure is based on the following assumptions:\n+  </para>\n+  <itemizedlist>\n+    <listitem>\n+      <para>\n+\tThe customer is responsible for backing up all the control plane and deployer nodes to an external\n+data store before starting the migration.\n+      </para>\n+      <itemizedlist>\n+\t<listitem>\n+\t  <para>\n+\t    We do not support rollback of migration after the process has been started.\n+\t   </para>\n+\t  </listitem>\n+      </itemizedlist>\n+    </listitem>\n+    <listitem>\n+      <para>\n+\tMetering, monitoring, and logging (MML) data will not be migrated (a\n+\tclean installation will be done using a new MML back-end included with HOS 5.SCP).\n+    </para>\n+    </listitem>\n+    <listitem>\n+      <para>\n+\tAny data that is not on a disk separate from the primary root partition\n+\twill be lost during re-imaging. This includes &swift; objects and audit logs.\n+    </para>\n+    </listitem>\n+    <listitem>\n+      <para>\n+\tAll &compnode;s are running supported Linux distributions:\n+    </para>\n+    <itemizedlist>\n+      <listitem>\n+\t<para>\n+\t  &sls; 12 SP3 for SLES &compnode;s\n+\t </para>\n+\t</listitem>\n+\t<listitem>\n+\t  <para>\n+\t    RHEL 7.3 for RHEL &compnode;s\n+\t   </para>\n+\t  </listitem>\n+    </itemizedlist>\n+    </listitem>\n+    <listitem>\n+      <para>\n+\tThere are only supported input model services.\n+    </para>\n+    <itemizedlist>\n+      <listitem>\n+\t<para>\n+\tThere is no embedded HOS Ceph or VSA.\n+\t </para>\n+\t</listitem>\n+    </itemizedlist>\n+    </listitem>\n+    <listitem>\n+      <para>\n+\tOnly supported third-party integrations and extensions are installed.\n+    </para>\n+    <itemizedlist>\n+      <listitem>\n+\t<para>\n+\t  There are no unsupported customized virtual environments.\n+\t </para>\n+\t</listitem>\n+    </itemizedlist>\n+    </listitem>\n+  </itemizedlist>\n+  <procedure>\n+    <title>Preparation Phase</title>\n+<step>\n+  <para>\n+    Run validation playbook to ensure that the current cloud load and configuration\n+    is compatible with the migration process:\n+   <remark role=\"clarity\">taroth 2018-02-27: what is 'validation playbook'? the name of a script?\n+    then it should be tagged with &lt;literal/&gt;</remark>\n+  </para>\n+  <screen>(old-deployer)> git clone -b hp/prerelease/newton https://gerrit.suse.provo.cloud/hp/hlm-migration-tools>\n+(old-deployer)> cd hlm-migration-tools/ansible\n+(old-deployer)> ansible-playbook -i ~/scratch/ansible/next/hos/ansible/hosts/verb_hosts pre-migration-validations.yml\n+  </screen>\n+  <para>\n+    The validation playbook performs the following checks:\n+  </para>\n+  <itemizedlist>\n+    <listitem>\n+      <para>\n+       Correct HOS 5.0.1/5.0.2 installed version number?\n+      <remark role=\"clarity\">taroth 2018-02-27: not sure what this should mean:\n+       does the version number HOS version number need to be either 5.0.1 or 5.0.2?\n+       then rephrase to: 'Is the HOS version number either 5.0.1 or 5.0.2?'</remark>\n+     </para>\n+    </listitem>\n+    <listitem>\n+      <para>\n+       C8-compatible Linux distributions on &compnode;s?\n+    </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      System clock synchronization across cloud nodes?\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      HA capacity of &contrnode;s (L3/DHCP agent)?\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      HA capacity of &contrnode;s (&swift;)?\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      Data model and &o_blockstore; back-end compatibility (no VSA or Ceph)?\n+     </para>\n+    </listitem>\n+  </itemizedlist>\n+</step>\n+<step>\n+  <para>\n+   Identify a candidate seed &contrnode; in the Primary control plane. This\n+   node must meet the following requirements:\n+  </para>\n+  <itemizedlist>\n+   <listitem>\n+    <para>\n+     Networking connectivity is equivalent to that of the existing deployer.\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     It is a member of the database cluster (running the MySQL service).\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+      It is not actively hosting any singleton &ostack; services\n+      (<systemitem>cinder-volume</systemitem> or\n+      <systemitem>nova-consoleauth</systemitem>). Test for empty output with\n+      the following command:\n+    </para>\n+    <screen>(each controller)> ps -ef | egrep 'cinder-volume|nova-consoleauth'</screen>\n+   </listitem>\n+  </itemizedlist>\n+</step>\n+<step>\n+  <para>\n+   Prepare the cloud for migration:\n+  </para>\n+  <itemizedlist>\n+  <listitem>\n+   <para>\n+    Ensure that the data model enables deployer behavior by the new seed\n+    node.\n+   <remark>taroth 2018_02-27: what is this supposed to mean?</remark>\n+   </para>\n+   <itemizedlist>\n+    <listitem>\n+     <para>\n+      In the <filename>disks_*.yml</filename> file used by your server role\n+      that includes monitoring services, replace the existing <literal>Vertica</literal>\n+      partition definition with two <literal>Cassandra</literal> partitions:\n+     </para>\n+   <screen>- name: cassandra\n+            size: (whatever size was used originally by vertica partition, less 1%)\n+            mount: /var/cassandra/data\n+            fstype: ext4\n+            mkfs-opts: -O large_file\n+            consumer:\n+              name: vertica\n+          - name: cassandra_log\n+            size: 1%\n+            mount: /var/cassandra/commitlog\n+            fstype: ext4\n+            mkfs-opts: -O large_file\n+   </screen>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      Edit\n+      <filename>~/helion/my_cloud/definition/data/control_plane.yml</filename>\n+      and identify the cluster definition that already includes an entry for\n+      <filename>mysql</filename> in its service-components.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      Ensure that <systemitem>lifecycle-manager</systemitem> is included in the same\n+      cluster's service-components list. If it was necessary to add this as a\n+      new entry, it will also need to be removed from its original position in\n+      the deployer.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      Add a new entry for <systemitem>nova-placement-api</systemitem> alongside whichever cluster\n+      already includes <systemitem>nova-api</systemitem>.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      Commit your changes to the git model:\n+     </para>\n+     <screen>(deployer)> git commit -a -m \"Prepare for HOS 5.1 installation\"</screen>\n+    </listitem>\n+   </itemizedlist>\n+  </listitem>\n+  <listitem>\n+   <para>\n+    Consider the effect of control plane downtime on existing DHCP leases:\n+   </para>\n+   <itemizedlist>\n+    <listitem>\n+     <para>\n+      Default DHCP lease time is 48 hours as defined in the\n+      <filename>~/helion/hos/ansible/roles/neutron-common/templates/neutron.conf.j2</filename> file by the\n+      <systemitem>dhcp_lease_duration</systemitem> parameter.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      DHCP leases are administered by &o_netw; and dnsmasq. This functionality will not be available\n+      during the control plane downtime.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      DHCP clients typically renew their leases either 50% of the way into the lease time or upon\n+      reboot.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      Normally, this leaves a 24-hour window for control\n+      plane downtime at any point before workload's DHCP leases run out and\n+      cannot be renewed. This is enough for performing a migration.\n+     </para>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      To view the upcoming timeouts of DHCP leases, run the following command from a &contrnode;:\n+     </para>\n+     <screen>for i in $(cat /var/run/neutron/dhcp/*/leases | awk '{print $1}'); do date -d @$i; done</screen>\n+    </listitem>\n+    <listitem>\n+     <para>\n+      If you find it necessary to increase the DHCP lease time before\n+      migrating, open the\n+      <filename>~/helion/hos/ansible/roles/neutron-common/templates/neutron.conf.j2</filename>\n+      and edit the <systemitem>dhcp_lease_duration</systemitem> parameter. \n+      Commit the change, and run the <filename>neutron-configure.yml</filename> playbook.\n+     </para>\n+    </listitem>\n+   </itemizedlist>\n+  </listitem>\n+  </itemizedlist>\n+</step>\n+<step>\n+ <para>\n+  Decommission the seed node from the existing cloud (if the intended seed node hosts control plane\n+  services beyond the database):\n+  <remark role=\"clarity\">taroth 2018-02-27: is 'if the intended seed node hosts control plane\n+  services beyond the database' the condition which must be fulfilled to execute\n+  the following two actions (in the itemizedlist)? if yes, rephrase the sentence to: \n+  'If the intended seed node hosts control plane services beyond the database, decommission the seed\n+   node from the existing cloud.' If the following two actions explain how to decommission, end the\n+   introductory sentence with a colon: 'If the intended seed node hosts control plane services beyond\n+   the database, decommission the seed node from the existing cloud:'</remark>\n+ </para>\n+ <itemizedlist>\n+  <listitem>\n+   <para>\n+    For non-DVR clouds, evacuate any existing &o_netw; L3 routers on the seed node:\n+   </para>\n+   <screen>(old-deployer)> cd ~/scratch/ansible/next/hos/ansible\n+(old-deployer)> cp -r ~/hlm-migration-tools/ansible/* ./\n+(old-deployer)> ansible-playbook -i hosts/verb_hosts\n+   neutron-router-evacuate.yml\n+   --limit=<replaceable>SEED_HOST</replaceable></screen>\n+   <para>\n+     <replaceable>SEED_HOST</replaceable> could be for example\n+     <systemitem>helion-cp1-c1-m2</systemitem>.\n+   </para>\n+  </listitem>\n+  <listitem>\n+   <para>\n+    For correct behavior, you must use the <systemitem>--limit</systemitem>\n+    argument to select the target seed host. This will output a success or\n+    error message at the end of its run.\n+   </para>\n+  </listitem>\n+ </itemizedlist>\n+</step>\n+ <step>\n+  <para>\n+   Re-image the seed controller as a  &slsa;-based system:\n+  </para>\n+  <itemizedlist>\n+   <listitem>\n+    <para>\n+     Display the current network connections of the seed controller (before re-imaging) for\n+     reference and save it locally.\n+    </para>\n+    <screen>(seed)> ip a</screen>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     Reinstall the operating system on the seed node's primary disk using an ISO, cobbler (from the\n+     existing HOS 5.0.1+ deployer), or other provisioner.\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+         If using cobbler, update the <filename>servers.yml</filename> entry for all nodes in the control plane to specify <systemitem>distro-id: sles12sp3-x86_64</systemitem> in each one, and commit the change to Git:\n+    </para>\n+    <screen>(old-deployer)> cd ~/helion/hos/ansible\n+(old-deployer)> sudo cobbler system remove --name <replaceable>SEED_NODE_ID</replaceable>\n+(old-deployer)> ansible-playbook -i hosts/localhost cobbler-deploy.yml\n+(old-deployer)> ansible-playbook -i hosts/localhost bm-reimage.yml -e nodelist=<replaceable>SEED_NODE_ID</replaceable></screen>\n+    <para>\n+     Replace <replaceable>SEED_NODE_ID</replaceable> with the ID of the seed node\n+     from the <filename>servers.yml</filename> file.\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+         Otherwise reformat the disk using partitioning to match the current configuration.\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     Copy the entire <filename>~stack</filename> directory from the original deployer:\n+    </para>\n+  <screen>(old-deployer)> rsync -avP ~\n+  <replaceable>SEED_IP</replaceable>:/home</screen>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     Ensure that <filename>~/sles12sp3sdk.iso</filename> was either transferred\n+     from the original deployer or is downloaded to the correct location under\n+     the <filename>sles12sp3sdk.iso</filename> name.\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     If cobbler will be used from the new seed for provisioning the remaining cloud &contrnode;s:\n+    </para>\n+    <itemizedlist>\n+     <listitem>\n+      <para>\n+       Ensure that the new deployer is able to reach ILO interfaces referenced\n+       in the <filename>servers.yml</filename> file:\n+      </para>\n+      <screen>(seed)> ping <replaceable>ILO_IP</replaceable></screen>\n+     </listitem>\n+     <listitem>\n+      <para>\n+       If network accessibility to the ILOs requires special network configuration and you would like to use HLM for that process based on your model:\n+      </para>\n+      <screen>(old-deployer)> ansible-playbook -i hosts/verb_hosts hlm-refresh-facts.yml\n+(old-deployer)> ansible-playbook -i hosts/verb_hosts -l <replaceable>LOCAL_NODE_ID</replaceable> osconfig-run.yml</screen>\n+     <para>\n+      Replace <replaceable>LOCAL_NODE_ID</replaceable> with the ID of the local\n+      node from the <filename>verb_hosts</filename> file.\n+     </para>\n+     </listitem>\n+     <listitem>\n+      <para>\n+       Kill the DHCP services running on the old deployer:\n+      </para>\n+      <screen>(old-deployer)> sudo pkill dhcpd</screen>\n+     </listitem>\n+    </itemizedlist>\n+   </listitem>\n+  </itemizedlist>\n+ </step>\n+ <step>\n+  <para>\n+   Mount the <filename>~/sles12sp3.iso</filename> image to make it available to the HOS installer.\n+  </para>\n+  <itemizedlist>\n+   <listitem>\n+    <para>\n+     Ensure that <filename>~/sles12sp3.iso</filename> was either transferred\n+     from the original deployer or is downloaded to the correct location under\n+     the <filename>sles12sp3.iso</filename>:\n+    </para>\n+    <screen>(seed)> sudo mkdir -p /media/cdrom\n+(seed)> sudo mount ~/sles12sp3.iso /media/cdrom\n+(seed)> sudo vi /etc/zypp/repos.d/SLES12-SP3-12.3-0.repo</screen>\n+   <itemizedlist>\n+    <listitem>\n+     <para>\n+      Update the <literal>baseurl</literal> line to read\n+      <literal>baseurl=file:///media/cdrom</literal>.\n+     </para>\n+    </listitem>\n+   </itemizedlist>\n+   </listitem>\n+  </itemizedlist>\n+ </step>\n+<step>\n+  <para>\n+   Install HOS 5.SCP on the new deployer by downloading and unpacking HOS 5.SCP installation content:\n+  </para>\n+  <screen>(seed)> cd ~; tar -xf hos-5.1.0-*.tar\n+(seed)> cd ~/hos-5.1.0; ./hos-init.bash</screen>\n+ </step>\n+ <step>\n+  <para>\n+   Prepare for running playbooks:\n+  </para>\n+  <screen>(seed)> cd ~/helion/hos/ansible\n+(seed)> ansible-playbook -i hosts/localhost config-processor-run.yml\n+(seed)> ansible-playbook -i hosts/localhost ready-deployment.yml</screen>\n+ </step>\n+ <step>\n+  <para>\n+   Initialize ansible host facts and ensure that the existing cloud is fully\n+   addressable by the new deployer:\n+  </para>\n+  <screen>(seed)> cd ~/scratch/ansible/next/hos/ansible\n+(seed)> ansible-playbook -i hosts/verb_hosts hlm-refresh-facts.yml</screen>\n+ </step>\n+ <step>\n+  <para>\n+   Prune the primary database to remove data that is no longer relevant:\n+  </para>\n+<screen>(seed)> cd ~/scratch/ansible/next/hos/ansible\n+(seed)> ansible-playbook -i hosts/verb_hosts percona-prune.yml</screen>\n+ </step>\n+</procedure>\n+<procedure>\n+<title>Migration Phase</title>\n+\n+<warning>\n+ <title>Downtime</title>\n+ <para>\n+  Downtime will be in effect until all the following steps are completed.\n+ </para>\n+</warning>\n+\n+ <step>\n+  <para>\n+   Stop or pause &ostack; services on the control plane (excluding the seeds\n+   that have been freshly imaged):\n+  </para>\n+  <screen>(seed)> cd ~/scratch/ansible/next/hos/ansible\n+(seed)> ./hlm-quiesce.sh --limit '!<replaceable>SEED_HOST</replaceable>'</screen>\n+  <para>\n+   The <replaceable>SEED_HOST</replaceable> name must match exactly the host name in the\n+   <filename>hosts/verb_hosts</filename> inventory, such as <literal>helion-cp1-c1-m1</literal>.\n+  </para>\n+ </step>\n+ <step>\n+  <para>\n+   Create a database backup by retrieving MySQL database contents from another node (not the seed) in the database cluster:\n+  </para>\n+  <screen>(seed)> cd ~/scratch/ansible/next/hos/ansible\n+(seed)> ansible-playbook -i hosts/verb_hosts percona-vertica-removal-cleanup.yml\n+(seed)> ansible-playbook -i hosts/verb_hosts percona-export.yml -e dbcontent=~/mysql_dump.sql</screen>\n+ </step>\n+ <step>\n+  <para>\n+   Re-image the remaining servers in the control plane.\n+  </para>\n+  <itemizedlist>\n+   <listitem>\n+    <para>\n+     Reinstall the operating systems on the control plane primary disks using an ISO, cobbler,\n+     or other provisioner. If using cobbler:\n+    </para>\n+    <screen>(seed)> cd ~/helion/hos/ansible\n+(seed)> ansible-playbook -i hosts/localhost cobbler-deploy.yml\n+(seed)> ansible-playbook -i hosts/localhost prepare-sles-grub2.yml -e nodelist=<replaceable>NODE_IDs</replaceable>\n+(seed)> ansible-playbook -i hosts/localhost bm-reimage.yml -e nodelist=<replaceable>NODE_IDs</replaceable></screen>\n+  <para>\n+   Replace <replaceable>NODE_IDs</replaceable> by a comma-separated list of IDs of all\n+   non-seed control plane and deployer nodes in the\n+   <filename>servers.yml</filename> file.\n+  </para> \n+  </listitem>\n+  <listitem>\n+   <para>\n+        Otherwise reformat the disk using partitioning to match the current configuration.\n+   </para>\n+  </listitem>\n+  </itemizedlist>\n+ </step>\n+ <step>\n+  <para>\n+   Perform the HOS 5.SCP installation using flags to enable database import:\n+  </para>\n+  <screen>(seed)> cd ~/scratch/ansible/next/hos/ansible\n+(seed)> ansible-playbook -i hosts/verb_hosts site.yml -e dbcontent=~/mysql_dump.sql</screen>\n+ </step>\n+ <step>\n+  <para>\n+   Optionally, if the <literal>3Par</literal> back-end was configured previously, follow the procedures to enable it again.\n+  </para>\n+ </step>\n+</procedure>\n+<procedure>\n+ <title>Cleanup Phase</title>\n+\n+ <note>\n+  <title>No Downtime</title>\n+  <para>\n+   These steps do not cause service downtime and can take place at any time while the cloud is up and running.\n+  </para>\n+ </note>\n+ <step>\n+  <para>\n+   Delete the database backup from the seed node:\n+  </para>\n+  <screen>(seed)> rm ~/mysql_dump.sql</screen>\n+ </step>\n+ <step>\n+  <para>\n+   If desired, transfer the deployer role in the HOS 5.SCP cloud to a different node, such as one\n+   that originally served as a dedicated deployer.\n+  </para>\n+  <itemizedlist>\n+   <listitem>\n+    <para>\n+     If the deployer will be moving to an entirely different cluster (for\n+     example, Database cluster to Controller cluster or standalone Deployer cluster), additional\n+     software packages need to be installed.\n+    </para>\n+    <itemizedlist>\n+     <listitem>\n+      <para>\n+       Edit\n+       <filename>~/helion/my_cloud/definition/data/control_plane.yml</filename>\n+       and move the <systemitem>lifecycle-manager</systemitem> from its current\n+       location into the new desired cluster service-components list. Commit the change to Git:\n+      </para>\n+      <screen>(seed)> git commit -a -m \"Enable lifecycle-manager for targeted seed node\"</screen>\n+     </listitem>\n+     <listitem>\n+      <para>\n+       Kill the DHCP services running on the current seed:\n+      </para>\n+      <screen>(seed)> sudo pkill dhcpd</screen>\n+     </listitem>\n+     <listitem>\n+      <para>\n+       Install the <systemitem>lifecycle-manager</systemitem> services on the new deployer:\n+      </para>\n+      <screen>(seed)> ansible-playbook -i hosts/verb_hosts site.yml -l <replaceable>NEW_DEPLOYER_HOST</replaceable></screen>\n+     <para>\n+      <replaceable>NEW_DEPLOYER_HOST</replaceable> could be for example <systemitem>helion-cp1-c0-m1</systemitem>\n+     </para>\n+     </listitem>\n+    </itemizedlist>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     Copy the <filename>home</filename> directory from the seed to the new deployer:\n+    </para>\n+    <screen>(seed)> rsync -avP ~ <replaceable>NEW_DEPLOYER_IP</replaceable>:/home</screen>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     Unpack or copy HOS 5.SCP contents to the <filename>home</filename> directory of the new\n+     deployer.\n+    </para>\n+   </listitem>\n+   <listitem>\n+    <para>\n+     Initialize the deployer node:\n+    </para>\n+    <screen>(new deployer)> cd ~/hos-5.1.0; ./hos-init.bash</screen>\n+   </listitem>\n+  </itemizedlist>\n+ </step>\n+</procedure>\n+</sect1>\n+<sect1>\n+ <title>Migration from HOS 5.SCP to Ardana.Newton</title>\n+ <para>\n+  The following procedure describes the process of migrating from HOS 5.SCP to Ardana.Newton.\n+ </para>\n+  <procedure>\n+   <title>Preparation Phase</title>\n+   <step>\n+    <para>\n+     Convert the <filename>helion</filename> Git repo to <filename>openstack</filename> Git repo for use by Ardana:\n+    </para>\n+    <screen>> cd ~\n+> cp -r helion openstack\n+> cd openstack\n+> git branch -m hos ardana\n+> git checkout ardana\n+> sed -i 's/hos/ardana/' .gitignore\n+> git commit -a -m \"Prep for Ardana\"\n+> git mv hos ardana\n+> git mv hos_extensions ardana_extensions\n+> git commit -a -m \"Conversion to Ardana\"\n+> git checkout cp-persistent\n+> sed -i 's/component: helion-ca/component: ardana-ca/' my_cloud/persistent_state/private_data_control-plane-1.yml\n+> sed -i 's/helion_internal_ca/ardana_internal_ca/' my_cloud/persistent_state/private_data_control-plane-1.yml\n+> git commit -a -m \"Conversion to Ardana\"\n+> git checkout site\n+# undo any manual changes that have been committed to the hos/ansible directory\n+> git checkout hos -- hos/ansible   # 'hos' has been changed to ardana(line 9)? If so, 'hos/ansible' might be changed to 'ardana/ansible'(line 13)\n+# if any files were modified, review their changes and note that the customizations will need to be reapplied in the ardana playbooks\n+> git diff\n+> git commit -a -m \"Resetting codebase to Ardana\"\n+# finally, pull forward the changes made earlier on the ardana branch\n+> git merge ardana -m \"Conversion to Ardana\"</screen>\n+   </step>\n+   <step>\n+    <para>\n+     Rename the old <filename>scratch</filename> directory to archive any remaining\n+     HOS 5.SCP files:\n+    </para>\n+    <screen>mv ~/scratch ~/scratch.scp</screen>\n+   </step>\n+   <step>\n+    <para>\n+     Prepare the <filename>ardana_packager</filename> working directory to include existing &suse; repositories:\n+    </para>\n+    <screen>> sudo mkdir /opt/ardana_packager\n+> sudo ln -s /opt/hlm_packager/hlm /opt/ardana_packager/hlm</screen>\n+   </step>\n+   <step>\n+    <para>\n+     Install Ardana.Newton content onto deployer:","path":"xml/art_migration.xml","position":661,"original_position":661,"commit_id":"94992cd8161edeadc7e3c14177e38c33979074da","original_commit_id":"94992cd8161edeadc7e3c14177e38c33979074da","user":{"login":"sknorr","id":5476547,"avatar_url":"https://avatars0.githubusercontent.com/u/5476547?v=4","gravatar_id":"","url":"https://api.github.com/users/sknorr","html_url":"https://github.com/sknorr","followers_url":"https://api.github.com/users/sknorr/followers","following_url":"https://api.github.com/users/sknorr/following{/other_user}","gists_url":"https://api.github.com/users/sknorr/gists{/gist_id}","starred_url":"https://api.github.com/users/sknorr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sknorr/subscriptions","organizations_url":"https://api.github.com/users/sknorr/orgs","repos_url":"https://api.github.com/users/sknorr/repos","events_url":"https://api.github.com/users/sknorr/events{/privacy}","received_events_url":"https://api.github.com/users/sknorr/received_events","type":"User","site_admin":false},"body":"Ardana.Newton -> `&lcm;` (\"Cloud Lifecycle Manager\")? (Mentioned again below.)","created_at":"2018-02-27T17:43:19Z","updated_at":"2018-02-27T17:44:02Z","html_url":"https://github.com/SUSE-Cloud/doc-cloud/pull/173#discussion_r171007059","pull_request_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/comments/171007059"},"html":{"href":"https://github.com/SUSE-Cloud/doc-cloud/pull/173#discussion_r171007059"},"pull_request":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173"}}},"pull_request":{"url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173","id":171710835,"html_url":"https://github.com/SUSE-Cloud/doc-cloud/pull/173","diff_url":"https://github.com/SUSE-Cloud/doc-cloud/pull/173.diff","patch_url":"https://github.com/SUSE-Cloud/doc-cloud/pull/173.patch","issue_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/173","number":173,"state":"open","locked":false,"title":"Feature/migration","user":{"login":"dmpop","id":837588,"avatar_url":"https://avatars0.githubusercontent.com/u/837588?v=4","gravatar_id":"","url":"https://api.github.com/users/dmpop","html_url":"https://github.com/dmpop","followers_url":"https://api.github.com/users/dmpop/followers","following_url":"https://api.github.com/users/dmpop/following{/other_user}","gists_url":"https://api.github.com/users/dmpop/gists{/gist_id}","starred_url":"https://api.github.com/users/dmpop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmpop/subscriptions","organizations_url":"https://api.github.com/users/dmpop/orgs","repos_url":"https://api.github.com/users/dmpop/repos","events_url":"https://api.github.com/users/dmpop/events{/privacy}","received_events_url":"https://api.github.com/users/dmpop/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-02-27T16:15:32Z","updated_at":"2018-02-27T17:44:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6fe807cd611b539eecc519b60b4a94454654ced8","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173/commits","review_comments_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173/comments","review_comment_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/173/comments","statuses_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/statuses/94992cd8161edeadc7e3c14177e38c33979074da","head":{"label":"SUSE-Cloud:feature/migration","ref":"feature/migration","sha":"94992cd8161edeadc7e3c14177e38c33979074da","user":{"login":"SUSE-Cloud","id":1553906,"avatar_url":"https://avatars0.githubusercontent.com/u/1553906?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE-Cloud","html_url":"https://github.com/SUSE-Cloud","followers_url":"https://api.github.com/users/SUSE-Cloud/followers","following_url":"https://api.github.com/users/SUSE-Cloud/following{/other_user}","gists_url":"https://api.github.com/users/SUSE-Cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE-Cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE-Cloud/subscriptions","organizations_url":"https://api.github.com/users/SUSE-Cloud/orgs","repos_url":"https://api.github.com/users/SUSE-Cloud/repos","events_url":"https://api.github.com/users/SUSE-Cloud/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE-Cloud/received_events","type":"Organization","site_admin":false},"repo":{"id":34849920,"name":"doc-cloud","full_name":"SUSE-Cloud/doc-cloud","owner":{"login":"SUSE-Cloud","id":1553906,"avatar_url":"https://avatars0.githubusercontent.com/u/1553906?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE-Cloud","html_url":"https://github.com/SUSE-Cloud","followers_url":"https://api.github.com/users/SUSE-Cloud/followers","following_url":"https://api.github.com/users/SUSE-Cloud/following{/other_user}","gists_url":"https://api.github.com/users/SUSE-Cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE-Cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE-Cloud/subscriptions","organizations_url":"https://api.github.com/users/SUSE-Cloud/orgs","repos_url":"https://api.github.com/users/SUSE-Cloud/repos","events_url":"https://api.github.com/users/SUSE-Cloud/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE-Cloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SUSE-Cloud/doc-cloud","description":"Official SUSE Openstack Cloud documentation","fork":false,"url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud","forks_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/forks","keys_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/teams","hooks_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/hooks","issue_events_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/events{/number}","events_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/events","assignees_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/assignees{/user}","branches_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/branches{/branch}","tags_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/tags","blobs_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/refs{/sha}","trees_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/statuses/{sha}","languages_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/languages","stargazers_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/stargazers","contributors_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/contributors","subscribers_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/subscribers","subscription_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/subscription","commits_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/commits{/sha}","git_commits_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/commits{/sha}","comments_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/comments{/number}","issue_comment_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/comments{/number}","contents_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/contents/{+path}","compare_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/merges","archive_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/downloads","issues_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues{/number}","pulls_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls{/number}","milestones_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/milestones{/number}","notifications_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/labels{/name}","releases_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/releases{/id}","deployments_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/deployments","created_at":"2015-04-30T10:59:36Z","updated_at":"2018-02-13T14:14:50Z","pushed_at":"2018-02-27T16:15:33Z","git_url":"git://github.com/SUSE-Cloud/doc-cloud.git","ssh_url":"git@github.com:SUSE-Cloud/doc-cloud.git","clone_url":"https://github.com/SUSE-Cloud/doc-cloud.git","svn_url":"https://github.com/SUSE-Cloud/doc-cloud","homepage":"https://www.suse.com/documentation/suse-openstack-cloud-7/","size":204259,"stargazers_count":7,"watchers_count":7,"language":null,"has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":17,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":17,"open_issues":2,"watchers":7,"default_branch":"develop"}},"base":{"label":"SUSE-Cloud:develop","ref":"develop","sha":"a115706b2076505369719c863b141df3fb0fd423","user":{"login":"SUSE-Cloud","id":1553906,"avatar_url":"https://avatars0.githubusercontent.com/u/1553906?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE-Cloud","html_url":"https://github.com/SUSE-Cloud","followers_url":"https://api.github.com/users/SUSE-Cloud/followers","following_url":"https://api.github.com/users/SUSE-Cloud/following{/other_user}","gists_url":"https://api.github.com/users/SUSE-Cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE-Cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE-Cloud/subscriptions","organizations_url":"https://api.github.com/users/SUSE-Cloud/orgs","repos_url":"https://api.github.com/users/SUSE-Cloud/repos","events_url":"https://api.github.com/users/SUSE-Cloud/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE-Cloud/received_events","type":"Organization","site_admin":false},"repo":{"id":34849920,"name":"doc-cloud","full_name":"SUSE-Cloud/doc-cloud","owner":{"login":"SUSE-Cloud","id":1553906,"avatar_url":"https://avatars0.githubusercontent.com/u/1553906?v=4","gravatar_id":"","url":"https://api.github.com/users/SUSE-Cloud","html_url":"https://github.com/SUSE-Cloud","followers_url":"https://api.github.com/users/SUSE-Cloud/followers","following_url":"https://api.github.com/users/SUSE-Cloud/following{/other_user}","gists_url":"https://api.github.com/users/SUSE-Cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/SUSE-Cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SUSE-Cloud/subscriptions","organizations_url":"https://api.github.com/users/SUSE-Cloud/orgs","repos_url":"https://api.github.com/users/SUSE-Cloud/repos","events_url":"https://api.github.com/users/SUSE-Cloud/events{/privacy}","received_events_url":"https://api.github.com/users/SUSE-Cloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SUSE-Cloud/doc-cloud","description":"Official SUSE Openstack Cloud documentation","fork":false,"url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud","forks_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/forks","keys_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/teams","hooks_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/hooks","issue_events_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/events{/number}","events_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/events","assignees_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/assignees{/user}","branches_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/branches{/branch}","tags_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/tags","blobs_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/refs{/sha}","trees_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/statuses/{sha}","languages_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/languages","stargazers_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/stargazers","contributors_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/contributors","subscribers_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/subscribers","subscription_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/subscription","commits_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/commits{/sha}","git_commits_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/git/commits{/sha}","comments_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/comments{/number}","issue_comment_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/comments{/number}","contents_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/contents/{+path}","compare_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/merges","archive_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/downloads","issues_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues{/number}","pulls_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls{/number}","milestones_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/milestones{/number}","notifications_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/labels{/name}","releases_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/releases{/id}","deployments_url":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/deployments","created_at":"2015-04-30T10:59:36Z","updated_at":"2018-02-13T14:14:50Z","pushed_at":"2018-02-27T16:15:33Z","git_url":"git://github.com/SUSE-Cloud/doc-cloud.git","ssh_url":"git@github.com:SUSE-Cloud/doc-cloud.git","clone_url":"https://github.com/SUSE-Cloud/doc-cloud.git","svn_url":"https://github.com/SUSE-Cloud/doc-cloud","homepage":"https://www.suse.com/documentation/suse-openstack-cloud-7/","size":204259,"stargazers_count":7,"watchers_count":7,"language":null,"has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":17,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":17,"open_issues":2,"watchers":7,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173"},"html":{"href":"https://github.com/SUSE-Cloud/doc-cloud/pull/173"},"issue":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/173"},"comments":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/issues/173/comments"},"review_comments":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173/comments"},"review_comment":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/pulls/173/commits"},"statuses":{"href":"https://api.github.com/repos/SUSE-Cloud/doc-cloud/statuses/94992cd8161edeadc7e3c14177e38c33979074da"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"sknorr"}}