JetSki icon indicating copy to clipboard operation
JetSki copied to clipboard

let user optionally choose provisioning host

Open bengland2 opened this issue 4 years ago • 2 comments

For shared labs, users do not control how nodes are handed out in a reservation. This can lead to some serious problems:

  • storage devices are not always the same among the nodes being allocated - for Ceph, this means lowest-common-denominator behavior
  • some nodes are in the same rack, others aren't
  • others TBS?

The provisioning host at present is always the first host in the ocpnodeinv_cloudXX.json supplied by labs, and this may not be the best choice. While this is a reasonable default, it would be great if we had a way to override.

Detailed example: For example, in the case of cloud17 on Oct 5 2020, I find that the first 3 nodes in the .json have 5.8-TB /dev/nvme0n1 and are all in the same rack, that's great! but the 4th node (on a different rack) has 1.8 TB. But JetSki always picks the first node, so I waste the 5.8-TB device and have to change my Ceph configuration so that all remaining 3 hosts uses 1.8 TB not 5.8, or else Ceph won't balance the load.

For example, define a var in the inventory/jetski/hosts file, something like:

provisioner_host: mgmt-e26-h13-740xd.alias.bos.scalelab.redhat.com

For now, I've implemented a patch that lets me reorder the nodes in the local ocpinv.json file to select the provisioner host:

diff --git a/ansible-ipi-install/roles/bootstrap/tasks/10_load_inv.yml b/ansible-ipi-install/roles/bootstrap/tasks/10_load_inv.yml
index b5e3d14..d90da4e 100644
--- a/ansible-ipi-install/roles/bootstrap/tasks/10_load_inv.yml
+++ b/ansible-ipi-install/roles/bootstrap/tasks/10_load_inv.yml
@@ -25,7 +25,7 @@
     
     - set_fact:
         ocpinv_content: "{{ response.json }}"
-  when: lab_name == "alias"
+  when: lab_name == "alias" and not st.stat.exists
 
 - name: Download ocpinv.json
   block:
@@ -36,7 +36,13 @@
     
     - set_fact:
         ocpinv_content: "{{ response.json }}"
-  when: lab_name == "scale"
+  when: lab_name == "scale" and not st.stat.exists
+
+- name: read local ocpinv json
+  block:
+    - set_fact:
+        ocpinv_content: "{{ lookup('file', ocpinv_file) }}"
+  when: st.stat.exists
 
 - name: Checking for inventory conflicts
   block

bengland2 avatar Oct 07 '20 18:10 bengland2

Thank you for raising this issue

github-actions[bot] avatar Oct 07 '20 18:10 github-actions[bot]

@bengland2 Thanks for bringing this up. My design philosophy was making it stupid simple and exposing the least number of variables to the user.

Have you checked this out https://github.com/redhat-performance/JetSki#changing-node-rolesexcluding-nodes-in-your-allocation-from-the-deployment ?

smalleni avatar Oct 07 '20 19:10 smalleni

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days

github-actions[bot] avatar Apr 24 '23 00:04 github-actions[bot]