{ "spec": { "name": "OCPInstaller", "description": "", "resources": { "type": "USER", "service_definition_list": [ { "name": "Bootstrap", "description": "", "port_list": [], "singleton": false, "tier": "", "depends_on_list": [ { "kind": "app_service", "name": "LBDNS" } ], "variable_list": [ { "name": "BOOTSTRAP_STATUS", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false }, { "name": "LB_TARGET", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false } ], "action_list": [ { "name": "action_create", "description": "", "type": "system", "critical": true, "runbook": { "name": "Bootstrap___create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap___create___dag" }, "task_definition_list": [ { "name": "Bootstrap___create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_start", "description": "", "type": "system", "critical": true, "runbook": { "name": "Bootstrap___start___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap___start___dag" }, "task_definition_list": [ { "name": "Bootstrap___start___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_stop", "description": "", "type": "system", "critical": true, "runbook": { "name": "Bootstrap___stop___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap___stop___dag" }, "task_definition_list": [ { "name": "Bootstrap___stop___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "Bootstrap___delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap___delete___dag" }, "task_definition_list": [ { "name": "Bootstrap___delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_restart", "description": "", "type": "system", "critical": true, "runbook": { "name": "Bootstrap___restart___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap___restart___dag" }, "task_definition_list": [ { "name": "Bootstrap___restart___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_soft_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "Bootstrap___soft_delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap___soft_delete___dag" }, "task_definition_list": [ { "name": "Bootstrap___soft_delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Register Bootstrap into LoadBalancer", "description": "", "type": "user", "critical": false, "runbook": { "name": "Bootstrap_RegisterBootstrapintoLoadBalancer_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap_RegisterBootstrapintoLoadBalancer_dag" }, "task_definition_list": [ { "name": "Bootstrap_RegisterBootstrapintoLoadBalancer_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Get LB Address" }, "to_task_reference": { "kind": "app_task", "name": "Register Bootstrap into LoadBalancer" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Get LB Address" }, { "kind": "app_task", "name": "Register Bootstrap into LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Get LB Address", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "script_type": "static", "script": "print \"LB_TARGET=@@{LBDNS.address}@@\"", "eval_variables": [ "LB_TARGET" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Register Bootstrap into LoadBalancer", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "script_type": "sh", "script": "echo \"set server machine-config-server/bootstrap addr @@{address}@@\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\necho \"set server machine-config-server/bootstrap state ready\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\n\necho \"set server openshift-api-server/bootstrap addr @@{address}@@\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\necho \"set server openshift-api-server/bootstrap state ready\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Create DNS Entry", "description": "", "type": "user", "critical": false, "runbook": { "name": "Bootstrap_CreateDNSEntry_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Bootstrap_CreateDNSEntry_dag" }, "task_definition_list": [ { "name": "Bootstrap_CreateDNSEntry_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create DNS Entry" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create DNS Entry", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "script_type": "sh", "script": "## Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n## Update DNS zones and LB config for Bootstrap ###\nssh core@@@{LBDNS.address}@@ -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null << EOF\necho \"@@{address}@@ bootstrap.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@\" | sudo tee -a /etc/hosts\nEOF" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "container_spec": {} }, { "name": "ControlPlane", "description": "", "port_list": [], "singleton": false, "tier": "", "depends_on_list": [ { "kind": "app_service", "name": "LBDNS" } ], "variable_list": [ { "name": "CONTROLPLANE_STATUS", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false }, { "name": "LB_TARGET", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false } ], "action_list": [ { "name": "action_create", "description": "", "type": "system", "critical": true, "runbook": { "name": "ControlPlane___create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane___create___dag" }, "task_definition_list": [ { "name": "ControlPlane___create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_start", "description": "", "type": "system", "critical": true, "runbook": { "name": "ControlPlane___start___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane___start___dag" }, "task_definition_list": [ { "name": "ControlPlane___start___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_stop", "description": "", "type": "system", "critical": true, "runbook": { "name": "ControlPlane___stop___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane___stop___dag" }, "task_definition_list": [ { "name": "ControlPlane___stop___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_delete", "description": "System action for deleting an application. Deletes created VMs as well", "type": "system", "critical": true, "runbook": { "name": "ControlPlane___delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane___delete___dag" }, "task_definition_list": [ { "name": "ControlPlane___delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Delete DNS Entry" }, "to_task_reference": { "kind": "app_task", "name": "Remove ControlPlane node from LoadBalancer" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Delete DNS Entry" }, { "kind": "app_task", "name": "Remove ControlPlane node from LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Delete DNS Entry", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ControlPlane_DeleteDNSEntry_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove ControlPlane node from LoadBalancer", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ControlPlane_RemoveControlPlaneNodefromLoadBalancer_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_restart", "description": "", "type": "system", "critical": true, "runbook": { "name": "ControlPlane___restart___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane___restart___dag" }, "task_definition_list": [ { "name": "ControlPlane___restart___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_soft_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "ControlPlane___soft_delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane___soft_delete___dag" }, "task_definition_list": [ { "name": "ControlPlane___soft_delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Register ControlPlane node into LoadBalancer", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlane_RegisterControlPlaneNodeintoLoadBalancer_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane_RegisterControlPlaneNodeintoLoadBalancer_dag" }, "task_definition_list": [ { "name": "ControlPlane_RegisterControlPlaneNodeintoLoadBalancer_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Get LB Address" }, "to_task_reference": { "kind": "app_task", "name": "Register ControlPlane node into LoadBalancer" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Get LB Address" }, { "kind": "app_task", "name": "Register ControlPlane node into LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Get LB Address", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "static", "script": "print \"LB_TARGET=@@{LBDNS.address}@@\"", "eval_variables": [ "LB_TARGET" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Register ControlPlane node into LoadBalancer", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "sh", "script": "echo \"set server machine-config-server/controlplane@@{calm_array_index}@@ addr @@{address}@@\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\necho \"set server machine-config-server/controlplane@@{calm_array_index}@@ state ready\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\n\necho \"set server openshift-api-server/controlplane@@{calm_array_index}@@ addr @@{address}@@\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\necho \"set server openshift-api-server/controlplane@@{calm_array_index}@@ state ready\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Remove ControlPlane node from LoadBalancer", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlane_RemoveControlPlaneNodefromLoadBalancer_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane_RemoveControlPlaneNodefromLoadBalancer_dag" }, "task_definition_list": [ { "name": "ControlPlane_RemoveControlPlaneNodefromLoadBalancer_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Remove ControlPlane node from LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove ControlPlane node from LoadBalancer", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "sh", "script": "echo \"set server machine-config-server/controlplane@@{calm_array_index}@@ state maint\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\n\necho \"set server openshift-api-server/controlplane@@{calm_array_index}@@ state maint\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Create DNS Entry", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlane_CreateDNSEntry_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane_CreateDNSEntry_dag" }, "task_definition_list": [ { "name": "ControlPlane_CreateDNSEntry_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create DNS Entry" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create DNS Entry", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "sh", "script": "## Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n## Update DNS zones and LB config for Bootstrap ###\nssh core@@@{LBDNS.address}@@ -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null << EOF\necho \"@@{address}@@ controlplane-@@{calm_array_index}@@.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@\" | sudo tee -a /etc/hosts\nEOF" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Delete DNS Entry", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlane_DeleteDNSEntry_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlane_DeleteDNSEntry_dag" }, "task_definition_list": [ { "name": "ControlPlane_DeleteDNSEntry_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Delete DNS Entry" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Delete DNS Entry", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "sh", "script": "## Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n## Update DNS zones and LB config\nssh core@@@{LB_TARGET}@@ -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null << EOF\nsudo sed -i '/controlplane-@@{calm_array_index}@@/d' /etc/hosts\nEOF" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "container_spec": {} }, { "name": "LBDNS", "description": "", "port_list": [], "singleton": false, "tier": "", "depends_on_list": [], "variable_list": [ { "name": "ST", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false } ], "action_list": [ { "name": "action_create", "description": "", "type": "system", "critical": true, "runbook": { "name": "LBDNS___create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNS___create___dag" }, "task_definition_list": [ { "name": "LBDNS___create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_start", "description": "", "type": "system", "critical": true, "runbook": { "name": "LBDNS___start___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNS___start___dag" }, "task_definition_list": [ { "name": "LBDNS___start___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_stop", "description": "", "type": "system", "critical": true, "runbook": { "name": "LBDNS___stop___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNS___stop___dag" }, "task_definition_list": [ { "name": "LBDNS___stop___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "LBDNS___delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNS___delete___dag" }, "task_definition_list": [ { "name": "LBDNS___delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_restart", "description": "", "type": "system", "critical": true, "runbook": { "name": "LBDNS___restart___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNS___restart___dag" }, "task_definition_list": [ { "name": "LBDNS___restart___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_soft_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "LBDNS___soft_delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNS___soft_delete___dag" }, "task_definition_list": [ { "name": "LBDNS___soft_delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "container_spec": {} }, { "name": "ProvisioningVM", "description": "", "port_list": [], "singleton": false, "tier": "", "depends_on_list": [], "variable_list": [ { "name": "OCP_STATUS", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false } ], "action_list": [ { "name": "action_create", "description": "", "type": "system", "critical": true, "runbook": { "name": "ProvisioningVM___create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM___create___dag" }, "task_definition_list": [ { "name": "ProvisioningVM___create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_start", "description": "System action for starting an application", "type": "system", "critical": true, "runbook": { "name": "ProvisioningVM___start___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM___start___dag" }, "task_definition_list": [ { "name": "ProvisioningVM___start___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Show Login Information" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Show Login Information", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "static", "script": "print \"Installation completed\"\nprint \"For logging into Console please use the following URL:\"\nprint \"https://console-openshift-console.apps.{}.{}\".format('@@{OPENSHIFT_SUBDOMAIN}@@','@@{BASE_DOMAIN}@@')\nprint \"Credentials: kubeadmin / {}\".format(base64.b64decode('@@{KUBEADMINB64}@@'))\nprint \"For CLI access you can also connect to LBDNS-Console.\"\nprint \"Please run 'export KUBECONFIG=~/openshift/auth/kubeconfig' before using OC CLI Tool\"" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_stop", "description": "", "type": "system", "critical": true, "runbook": { "name": "ProvisioningVM___stop___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM___stop___dag" }, "task_definition_list": [ { "name": "ProvisioningVM___stop___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "ProvisioningVM___delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM___delete___dag" }, "task_definition_list": [ { "name": "ProvisioningVM___delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_restart", "description": "", "type": "system", "critical": true, "runbook": { "name": "ProvisioningVM___restart___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM___restart___dag" }, "task_definition_list": [ { "name": "ProvisioningVM___restart___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_soft_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "ProvisioningVM___soft_delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM___soft_delete___dag" }, "task_definition_list": [ { "name": "ProvisioningVM___soft_delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Remove Bootstrap from LoadBalancer", "description": "", "type": "user", "critical": false, "runbook": { "name": "ProvisioningVM_RemoveBootstrapfromLoadBalancer_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM_RemoveBootstrapfromLoadBalancer_dag" }, "task_definition_list": [ { "name": "ProvisioningVM_RemoveBootstrapfromLoadBalancer_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Remove Bootstrap from LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove Bootstrap from LoadBalancer", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "echo \"set server machine-config-server/bootstrap state maint\" | socat stdio tcp4-connect:@@{LBDNS.address}@@:9999\necho \"set server openshift-api-server/bootstrap state maint\" | socat stdio tcp4-connect:@@{LBDNS.address}@@:9999\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Save HAProxy State", "description": "", "type": "user", "critical": false, "runbook": { "name": "ProvisioningVM_SaveHAProxyState_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVM_SaveHAProxyState_dag" }, "task_definition_list": [ { "name": "ProvisioningVM_SaveHAProxyState_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Save HAProxy State" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Save HAProxy State", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "echo \"show servers state\" | socat stdio tcp4-connect:127.0.0.1:9999 | sudo tee /etc/haproxy/server_state" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "container_spec": {} }, { "name": "Compute", "description": "", "port_list": [], "singleton": false, "tier": "", "depends_on_list": [ { "kind": "app_service", "name": "LBDNS" } ], "variable_list": [ { "name": "COMPUTE_STATUS", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false }, { "name": "LB_TARGET", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "is_hidden": false, "is_mandatory": false } ], "action_list": [ { "name": "action_create", "description": "", "type": "system", "critical": true, "runbook": { "name": "Compute___create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute___create___dag" }, "task_definition_list": [ { "name": "Compute___create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_start", "description": "", "type": "system", "critical": true, "runbook": { "name": "Compute___start___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute___start___dag" }, "task_definition_list": [ { "name": "Compute___start___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_stop", "description": "", "type": "system", "critical": true, "runbook": { "name": "Compute___stop___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute___stop___dag" }, "task_definition_list": [ { "name": "Compute___stop___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_delete", "description": "System action for deleting an application. Deletes created VMs as well", "type": "system", "critical": true, "runbook": { "name": "Compute___delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute___delete___dag" }, "task_definition_list": [ { "name": "Compute___delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Delete DNS Entry" }, "to_task_reference": { "kind": "app_task", "name": "Remove Compute node from LoadBalancer" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Delete DNS Entry" }, { "kind": "app_task", "name": "Remove Compute node from LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Delete DNS Entry", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "Compute_DeleteDNSEntry_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove Compute node from LoadBalancer", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "Compute_RemoveComputeNodefromLoadBalancer_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_restart", "description": "", "type": "system", "critical": true, "runbook": { "name": "Compute___restart___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute___restart___dag" }, "task_definition_list": [ { "name": "Compute___restart___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "action_soft_delete", "description": "", "type": "system", "critical": true, "runbook": { "name": "Compute___soft_delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute___soft_delete___dag" }, "task_definition_list": [ { "name": "Compute___soft_delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Register Compute node into LoadBalancer", "description": "", "type": "user", "critical": false, "runbook": { "name": "Compute_RegisterComputeNodeintoLoadBalancer_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute_RegisterComputeNodeintoLoadBalancer_dag" }, "task_definition_list": [ { "name": "Compute_RegisterComputeNodeintoLoadBalancer_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Get LB Address" }, "to_task_reference": { "kind": "app_task", "name": "Register Compute node into LoadBalancer" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Get LB Address" }, { "kind": "app_task", "name": "Register Compute node into LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Get LB Address", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "static", "script": "print \"LB_TARGET=@@{LBDNS.address}@@\"", "eval_variables": [ "LB_TARGET" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Register Compute node into LoadBalancer", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "sh", "script": "echo \"set server ingress-http/compute@@{calm_array_index}@@ addr @@{address}@@\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\necho \"set server ingress-http/compute@@{calm_array_index}@@ state ready\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\n\necho \"set server ingress-https/compute@@{calm_array_index}@@ addr @@{address}@@\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\necho \"set server ingress-https/compute@@{calm_array_index}@@ state ready\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Remove Compute node from LoadBalancer", "description": "", "type": "user", "critical": false, "runbook": { "name": "Compute_RemoveComputeNodefromLoadBalancer_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute_RemoveComputeNodefromLoadBalancer_dag" }, "task_definition_list": [ { "name": "Compute_RemoveComputeNodefromLoadBalancer_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Remove Compute node from LoadBalancer" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove Compute node from LoadBalancer", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "sh", "script": "echo \"set server ingress-http/compute@@{calm_array_index}@@ state maint\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999\n\necho \"set server ingress-https/compute@@{calm_array_index}@@ state maint\" | socat stdio tcp4-connect:@@{LB_TARGET}@@:9999" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Create DNS Entry", "description": "", "type": "user", "critical": false, "runbook": { "name": "Compute_CreateDNSEntry_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute_CreateDNSEntry_dag" }, "task_definition_list": [ { "name": "Compute_CreateDNSEntry_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create DNS Entry" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create DNS Entry", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "sh", "script": "## Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n## Update DNS zones and LB config for Bootstrap ###\nssh core@@@{LBDNS.address}@@ -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null << EOF\necho \"@@{address}@@ compute-@@{calm_array_index}@@.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@\" | sudo tee -a /etc/hosts\nEOF" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "Delete DNS Entry", "description": "", "type": "user", "critical": false, "runbook": { "name": "Compute_DeleteDNSEntry_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "Compute_DeleteDNSEntry_dag" }, "task_definition_list": [ { "name": "Compute_DeleteDNSEntry_dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Delete DNS Entry" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Delete DNS Entry", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "sh", "script": "## Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n## Update DNS zones and LB config\nssh core@@@{LB_TARGET}@@ -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null << EOF\nsudo sed -i '/compute-@@{calm_array_index}@@/d' /etc/hosts\nEOF" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "container_spec": {} } ], "package_definition_list": [ { "name": "BootstrapPackage", "description": "", "type": "CUSTOM", "options": { "install_runbook": { "name": "BootstrapPackage___install___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "BootstrapPackage___install___dag" }, "task_definition_list": [ { "name": "BootstrapPackage___install___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Create DNS Entry" }, "to_task_reference": { "kind": "app_task", "name": "Register Bootstrap into LoadBalancer" } }, { "from_task_reference": { "kind": "app_task", "name": "Register Bootstrap into LoadBalancer" }, "to_task_reference": { "kind": "app_task", "name": "OS Installation" } }, { "from_task_reference": { "kind": "app_task", "name": "OS Installation" }, "to_task_reference": { "kind": "app_task", "name": "Remove ISO Disk" } }, { "from_task_reference": { "kind": "app_task", "name": "Remove ISO Disk" }, "to_task_reference": { "kind": "app_task", "name": "Status" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create DNS Entry" }, { "kind": "app_task", "name": "Register Bootstrap into LoadBalancer" }, { "kind": "app_task", "name": "OS Installation" }, { "kind": "app_task", "name": "Remove ISO Disk" }, { "kind": "app_task", "name": "Status" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create DNS Entry", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "Bootstrap_CreateDNSEntry_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Register Bootstrap into LoadBalancer", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "Bootstrap_RegisterBootstrapintoLoadBalancer_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "OS Installation", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "script_type": "sh", "script": "#!/bin/bash -e\n\n#Fetch Network Settings\n#GW=$(ip route list dev ens3 | awk ' /^default/ {print $3}')\n#IPADDR=$(nmcli d show ens3 | awk ' /IP4.ADDRESS/ {print $2}')\n#DNS=$(nmcli d show ens3 | awk ' /IP4.DNS/ {print $2}' | xargs -d'\\n'| sed 's/ /,/g')\n\n# Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n#Change Local Network to Static\n#sudo nmcli connection mod 'Wired connection 1' \\\n# ipv4.method manual \\\n# ipv4.addresses $IPADDR \\\n# ipv4.gateway $GW \\\n# ipv4.dns $DNS \\\n# connection.autoconnect yes\n\nsudo coreos-installer install /dev/sda --ignition-url http://@@{PROVISIONING_VM}@@:8080/openshift/bootstrap_@@{OPENSHIFT_SUBDOMAIN}@@.ign --insecure-ignition #--copy-network\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove ISO Disk", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "script_type": "static", "script": "JWT = '@@{calm_jwt}@@'\nvmUuid ='@@{id}@@'\n# Get VM\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\nheaders = {'Content-Type': 'application/json', 'Accept':'application/json', 'Authorization': 'Bearer {}'.format(JWT)}\n\nr = urlreq(api_url, verb='GET', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Power off VM\ndel resp['status']\n\nresp['spec']['resources']['power_state'] = 'OFF'\n\npayload = resp\n\nr = urlreq(api_url, verb='PUT', params=json.dumps(payload), headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n\n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Wait for VM to power off\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\nr = urlreq(api_url, verb='GET', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n power_state = resp['status']['resources']['power_state']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\nstate = \"\"\nwhile state != \"OFF\":\n api_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']['resources']['power_state']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Remove ISO and Power on VM \ndel resp['status']\n# Remove ISO mount and disk size\ndisk_counter = 0\nfor disk in resp['spec']['resources']['disk_list']:\n del disk['disk_size_mib']\n if disk['device_properties']['device_type'] == \"CDROM\":\n del resp['spec']['resources']['disk_list'][disk_counter]\n disk_counter += 1\n\n\nresp['spec']['resources']['power_state'] = 'ON'\n\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\npayload = resp\n\nr = urlreq(api_url, verb='PUT', params=json.dumps(payload), headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\nprint(\"Removed ISO from Bootstrap and booted into Disk\")\n\n# Wait until VM boots\nsleep(60)\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Status", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "script_type": "static", "script": "print 'BOOTSTRAP_STATUS=Done'", "eval_variables": [ "BOOTSTRAP_STATUS" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] }, "uninstall_runbook": { "name": "Runbook_for_Package_BootstrapPackage_action_uninstall", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "DAG_Task_for_Package_BootstrapPackage_action_uninstall" }, "task_definition_list": [ { "name": "DAG_Task_for_Package_BootstrapPackage_action_uninstall", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Bootstrap" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, "service_local_reference_list": [ { "kind": "app_service", "name": "Bootstrap" } ], "variable_list": [], "version": "" }, { "name": "OpenshiftC8", "description": "", "type": "SUBSTRATE_IMAGE", "options": { "name": "OpenshiftC8", "description": "", "resources": { "image_type": "DISK_IMAGE", "source_uri": "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20220125.1.x86_64.qcow2", "architecture": "X86_64", "version": { "product_version": "1.0.0", "product_name": "Openshift-Centos8" }, "checksum": {} } }, "service_local_reference_list": [], "variable_list": [], "version": "" }, { "name": "ControlPlanePackage", "description": "", "type": "CUSTOM", "options": { "install_runbook": { "name": "ControlPlanePackage___install___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlanePackage___install___dag" }, "task_definition_list": [ { "name": "ControlPlanePackage___install___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Create DNS Entry" }, "to_task_reference": { "kind": "app_task", "name": "Register ControlPlane node into LoadBalancer" } }, { "from_task_reference": { "kind": "app_task", "name": "Register ControlPlane node into LoadBalancer" }, "to_task_reference": { "kind": "app_task", "name": "Install RHCOS" } }, { "from_task_reference": { "kind": "app_task", "name": "Install RHCOS" }, "to_task_reference": { "kind": "app_task", "name": "Remove ISO Disk" } }, { "from_task_reference": { "kind": "app_task", "name": "Remove ISO Disk" }, "to_task_reference": { "kind": "app_task", "name": "Status" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create DNS Entry" }, { "kind": "app_task", "name": "Register ControlPlane node into LoadBalancer" }, { "kind": "app_task", "name": "Install RHCOS" }, { "kind": "app_task", "name": "Remove ISO Disk" }, { "kind": "app_task", "name": "Status" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create DNS Entry", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ControlPlane_CreateDNSEntry_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Register ControlPlane node into LoadBalancer", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ControlPlane_RegisterControlPlaneNodeintoLoadBalancer_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Install RHCOS", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "sh", "script": "#!/bin/bash -e\n#Wait for Bootstrap to be finished\nBOOTSTRAP_STATUS=\"@@{Bootstrap.BOOTSTRAP_STATUS}@@\"\n\n#Fetch Network-Settings\n#GW=$(ip route list dev ens3 | awk ' /^default/ {print $3}')\n#IPADDR=$(nmcli d show ens3 | awk ' /IP4.ADDRESS/ {print $2}')\n#DNS=$(nmcli d show ens3 | awk ' /IP4.DNS/ {print $2}' | xargs -d'\\n'| sed 's/ /,/g')\n\n\n# Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n#Configure Local Network as Static\n#sudo nmcli connection mod 'Wired connection 1' \\\n# ipv4.method manual \\\n# ipv4.addresses $IPADDR \\\n# ipv4.gateway $GW \\\n# ipv4.dns $DNS \\\n# connection.autoconnect yes\n\nsudo coreos-installer install /dev/sda --ignition-url http://@@{PROVISIONING_VM}@@:8080/openshift/master_@@{OPENSHIFT_SUBDOMAIN}@@.ign --insecure-ignition #--copy-network\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove ISO Disk", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "static", "script": "JWT = '@@{calm_jwt}@@'\nvmUuid ='@@{id}@@'\n# Get VM\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\nheaders = {'Content-Type': 'application/json', 'Accept':'application/json', 'Authorization': 'Bearer {}'.format(JWT)}\n\nr = urlreq(api_url, verb='GET', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Power off VM\ndel resp['status']\n\nresp['spec']['resources']['power_state'] = 'OFF'\n\npayload = resp\n\nr = urlreq(api_url, verb='PUT', params=json.dumps(payload), headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n\n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Wait for VM to power off\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\nr = urlreq(api_url, verb='GET', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n power_state = resp['status']['resources']['power_state']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\nstate = \"\"\nwhile state != \"OFF\":\n api_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']['resources']['power_state']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Remove ISO and Power on VM \ndel resp['status']\n# Remove ISO mount and disk size\ndisk_counter = 0\nfor disk in resp['spec']['resources']['disk_list']:\n del disk['disk_size_mib']\n if disk['device_properties']['device_type'] == \"CDROM\":\n del resp['spec']['resources']['disk_list'][disk_counter]\n disk_counter += 1\n\n\nresp['spec']['resources']['power_state'] = 'ON'\n\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\npayload = resp\n\nr = urlreq(api_url, verb='PUT', params=json.dumps(payload), headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\nprint(\"Removed ISO from Bootstrap and booted into Disk\")\n\n# Wait until VM boots\nsleep(60)\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Status", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "script_type": "static", "script": "print \"CONTROLPLANE_STATUS=Done\"", "eval_variables": [ "CONTROLPLANE_STATUS" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] }, "uninstall_runbook": { "name": "Runbook_for_Package_ControlPlanePackage_action_uninstall", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "DAG_Task_for_Package_ControlPlanePackage_action_uninstall" }, "task_definition_list": [ { "name": "DAG_Task_for_Package_ControlPlanePackage_action_uninstall", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ControlPlane" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, "service_local_reference_list": [ { "kind": "app_service", "name": "ControlPlane" } ], "variable_list": [], "version": "" }, { "name": "LBDNSPackage", "description": "", "type": "CUSTOM", "options": { "install_runbook": { "name": "LBDNSPackage___install___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNSPackage___install___dag" }, "task_definition_list": [ { "name": "LBDNSPackage___install___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Provisioning Setup" }, "to_task_reference": { "kind": "app_task", "name": "Haproxy Setup" } }, { "from_task_reference": { "kind": "app_task", "name": "Haproxy Setup" }, "to_task_reference": { "kind": "app_task", "name": "dnsmasq setup" } }, { "from_task_reference": { "kind": "app_task", "name": "dnsmasq setup" }, "to_task_reference": { "kind": "app_task", "name": "Status" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Provisioning Setup" }, { "kind": "app_task", "name": "Haproxy Setup" }, { "kind": "app_task", "name": "dnsmasq setup" }, { "kind": "app_task", "name": "Status" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Provisioning Setup", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "script_type": "sh", "script": "#!/bin/bash -e\n\nmkdir -p openshift\ncd openshift\n\n# Install dependencies\n# sudo yum -y update\nsudo yum -y install jq python3 socat haproxy dnsmasq\n\n# Disable selinux\nsudo setenforce 0\nsudo sed -i.bkp -r 's/(SELINUX=)enforcing/\\1disabled/g;s/^SELINUXTYPE=targeted/#&/g' /etc/selinux/config\n\n# Download Openshift installer\ncurl -o openshift-install-linux.tar.gz http://@@{PROVISIONING_VM}@@:8080/openshift/openshift-install-linux.tar.gz\ntar xzf openshift-install-linux.tar.gz\nsudo install -m 755 -o root openshift-install /sbin/\n\n# Download Openshift client\ncurl -o openshift-client-linux.tar.gz http://@@{PROVISIONING_VM}@@:8080/openshift/openshift-client-linux.tar.gz\ntar xzf openshift-client-linux.tar.gz\nsudo install -m 755 -o root oc /sbin/\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Haproxy Setup", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "script_type": "sh", "script": "#!/bin/bash -xe\n\necho \"\"\"#---------------------------------------------------------------------\n# Global settings\n#---------------------------------------------------------------------\nglobal\n\n log 127.0.0.1 local2\n\n chroot /var/lib/haproxy\n pidfile /var/run/haproxy.pid\n maxconn 4000\n user haproxy\n group haproxy\n daemon\n\n # utilize system-wide crypto-policies\n ssl-default-bind-ciphers PROFILE=SYSTEM\n ssl-default-server-ciphers PROFILE=SYSTEM\n\n\n stats socket ipv4@0.0.0.0:9999 level admin\n stats socket /var/run/haproxy.sock mode 666 level admin\n stats timeout 2m\n server-state-file /etc/haproxy/server_state\n\n#---------------------------------------------------------------------\n# common defaults that all the 'listen' and 'backend' sections will\n# use if not designated in their block\n#---------------------------------------------------------------------\n\ndefaults\n load-server-state-from-file global\n mode http\n log global\n option httplog\n option dontlognull\n option http-server-close\n option forwardfor except 127.0.0.0/8\n option redispatch\n retries 3\n timeout http-request 10s\n timeout queue 1m\n timeout connect 10s\n timeout client 1m\n timeout server 1m\n timeout http-keep-alive 10s\n timeout check 10s\n maxconn 3000\n\n\n#---------------------------------------------------------------------\n# Openshift config\n#---------------------------------------------------------------------\n\nlisten stats\n bind :9000\n mode http\n stats enable\n stats uri /\n monitor-uri /healthz\n\n\nfrontend openshift-api-server\n bind *:6443\n default_backend openshift-api-server\n mode tcp\n option tcplog\n\nbackend openshift-api-server\n balance source\n mode tcp\n server-template controlplane 0-2 localhost:6443 check disabled\n server bootstrap localhost:6443 check\n\nfrontend machine-config-server\n bind *:22623\n default_backend machine-config-server\n mode tcp\n option tcplog\n\nbackend machine-config-server\n balance source\n mode tcp\n server-template controlplane 0-2 localhost:22623 check disabled\n server bootstrap localhost:22623 check\n\nfrontend ingress-http\n bind *:80\n default_backend ingress-http\n mode tcp\n option tcplog\n\nbackend ingress-http\n balance source\n mode tcp\n server-template compute 0-99 localhost:80 check disabled\n server-template controlplane 0-2 localhost:443 check disabled\n \nfrontend ingress-https\n bind *:443\n default_backend ingress-https\n mode tcp\n option tcplog\n\nbackend ingress-https\n balance source\n mode tcp\n server-template compute 0-99 localhost:443 check disabled\n server-template controlplane 0-2 localhost:443 check disabled\n \"\"\" | sudo tee /etc/haproxy/haproxy.cfg\n\nsudo systemctl enable haproxy\nsudo systemctl start haproxy" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "dnsmasq setup", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "script_type": "sh", "script": "echo \"@@{address}@@ helper.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@\" | sudo tee -a /etc/hosts\necho \"@@{address}@@ api.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@\" | sudo tee -a /etc/hosts\necho \"@@{address}@@ api-int.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@\" | sudo tee -a /etc/hosts\n\necho \"address=/.apps.@@{OPENSHIFT_SUBDOMAIN}@@.@@{BASE_DOMAIN}@@/@@{address}@@\" | sudo tee -a /etc/dnsmasq.conf \nsudo systemctl enable dnsmasq\nsudo systemctl start dnsmasq\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Status", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "script_type": "static", "script": "print 'ST=@@{OPENSHIFT_SUBDOMAIN}@@'", "eval_variables": [ "ST" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] }, "uninstall_runbook": { "name": "Runbook_for_Package_LBDNSPackage_action_uninstall", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "DAG_Task_for_Package_LBDNSPackage_action_uninstall" }, "task_definition_list": [ { "name": "DAG_Task_for_Package_LBDNSPackage_action_uninstall", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "LBDNS" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, "service_local_reference_list": [ { "kind": "app_service", "name": "LBDNS" } ], "variable_list": [], "version": "" }, { "name": "RHCOS_BOOTSTRAP", "description": "", "type": "SUBSTRATE_IMAGE", "options": { "name": "RHCOS-@@{OPENSHIFT_SUBDOMAIN}@@", "description": "", "resources": { "image_type": "ISO_IMAGE", "source_uri": "http://@@{PROVISIONING_VM}@@:8080/openshift/rhcos-@@{OPENSHIFT_SUBDOMAIN}@@.iso", "architecture": "X86_64", "version": { "product_version": "1.0.0", "product_name": "RHCOS47_BOOTSTRAP" }, "checksum": { "checksum_algorithm": "", "checksum_value": "" } } }, "service_local_reference_list": [], "variable_list": [], "version": "" }, { "name": "ProvisioningVMPackage", "description": "", "type": "CUSTOM", "options": { "install_runbook": { "name": "ProvisioningVMPackage___install___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ProvisioningVMPackage___install___dag" }, "task_definition_list": [ { "name": "ProvisioningVMPackage___install___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Prepare Install" }, "to_task_reference": { "kind": "app_task", "name": "Prepare Openshift Install" } }, { "from_task_reference": { "kind": "app_task", "name": "Prepare Openshift Install" }, "to_task_reference": { "kind": "app_task", "name": "OCP_STATUS Status" } }, { "from_task_reference": { "kind": "app_task", "name": "OCP_STATUS Status" }, "to_task_reference": { "kind": "app_task", "name": "Remove Bootstrap from LoadBalancer" } }, { "from_task_reference": { "kind": "app_task", "name": "Remove Bootstrap from LoadBalancer" }, "to_task_reference": { "kind": "app_task", "name": "AutoAproval CSR" } }, { "from_task_reference": { "kind": "app_task", "name": "AutoAproval CSR" }, "to_task_reference": { "kind": "app_task", "name": "Finish Openshift Install" } }, { "from_task_reference": { "kind": "app_task", "name": "Finish Openshift Install" }, "to_task_reference": { "kind": "app_task", "name": "Save HAProxy State" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Prepare Install" }, { "kind": "app_task", "name": "Prepare Openshift Install" }, { "kind": "app_task", "name": "OCP_STATUS Status" }, { "kind": "app_task", "name": "Remove Bootstrap from LoadBalancer" }, { "kind": "app_task", "name": "AutoAproval CSR" }, { "kind": "app_task", "name": "Finish Openshift Install" }, { "kind": "app_task", "name": "Save HAProxy State" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Prepare Install", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "echo 'export KUBECONFIG=~/openshift/auth/kubeconfig' >> .bash_profile\n\nmkdir -p openshift/auth\ncd openshift/auth\necho @@{KUBECONFIGB64}@@ | base64 -d > kubeconfig\necho @@{KUBEADMINB64}@@ | base64 -d > kubeadmin-password\n", "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Prepare Openshift Install", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "#!/bin/bash -e\n# Use macro from controlplane set var task to delay task execution\nCONTROLPLANE_STATUS=\"@@{ControlPlane.CONTROLPLANE_STATUS}@@\"\n\ncd openshift\n# Wait for bootstrap completion\nsudo openshift-install wait-for bootstrap-complete --log-level debug" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "OCP_STATUS Status", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "static", "script": "print \"OCP_STATUS=bootstrap finished\"", "eval_variables": [ "OCP_STATUS" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove Bootstrap from LoadBalancer", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ProvisioningVM_RemoveBootstrapfromLoadBalancer_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "AutoAproval CSR", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "export KUBECONFIG=~/openshift/auth/kubeconfig\n\necho \"\"\"export KUBECONFIG=~/openshift/auth/kubeconfig\n~/openshift/oc get csr -oname | xargs ~/openshift/oc adm certificate approve\"\"\" > openshift/csrjob.sh\nchmod +x openshift/csrjob.sh\n\n(crontab -l; echo \"* * * * * /home/core/openshift/csrjob.sh\")|awk '!x[$0]++'|crontab -" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Finish Openshift Install", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "cd openshift\n# Wait for openshift installation to complete\nsudo openshift-install wait-for install-complete --log-level debug" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Save HAProxy State", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ProvisioningVM_SaveHAProxyState_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] }, "uninstall_runbook": { "name": "Runbook_for_Package_ProvisioningVMPackage_action_uninstall", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "DAG_Task_for_Package_ProvisioningVMPackage_action_uninstall" }, "task_definition_list": [ { "name": "DAG_Task_for_Package_ProvisioningVMPackage_action_uninstall", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, "service_local_reference_list": [ { "kind": "app_service", "name": "ProvisioningVM" } ], "variable_list": [], "version": "" }, { "name": "ComputePackage", "description": "", "type": "CUSTOM", "options": { "install_runbook": { "name": "ComputePackage___install___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ComputePackage___install___dag" }, "task_definition_list": [ { "name": "ComputePackage___install___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Create DNS Entry" }, "to_task_reference": { "kind": "app_task", "name": "Register Compute node into LoadBalancer" } }, { "from_task_reference": { "kind": "app_task", "name": "Register Compute node into LoadBalancer" }, "to_task_reference": { "kind": "app_task", "name": "Install RHCOS" } }, { "from_task_reference": { "kind": "app_task", "name": "Install RHCOS" }, "to_task_reference": { "kind": "app_task", "name": "Remove ISO Disk" } }, { "from_task_reference": { "kind": "app_task", "name": "Remove ISO Disk" }, "to_task_reference": { "kind": "app_task", "name": "Status" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create DNS Entry" }, { "kind": "app_task", "name": "Register Compute node into LoadBalancer" }, { "kind": "app_task", "name": "Install RHCOS" }, { "kind": "app_task", "name": "Remove ISO Disk" }, { "kind": "app_task", "name": "Status" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create DNS Entry", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "Compute_CreateDNSEntry_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Register Compute node into LoadBalancer", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "Compute_RegisterComputeNodeintoLoadBalancer_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Install RHCOS", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "sh", "script": "#!/bin/bash -e\n#Waiting for Bootstrap to be finished\nBOOTSTRAP_STATUS=\"@@{Bootstrap.BOOTSTRAP_STATUS}@@\"\n\n#Fetch Network-Settings\n#GW=$(ip route list dev ens3 | awk ' /^default/ {print $3}')\n#IPADDR=$(nmcli d show ens3 | awk ' /IP4.ADDRESS/ {print $2}')\n#DNS=$(nmcli d show ens3 | awk ' /IP4.DNS/ {print $2}' | xargs -d'\\n'| sed 's/ /,/g')\n\n\n# Configure ssh agent\nSSH_CRED=\"@@{CRED.secret}@@\"\neval `ssh-agent -s`\nssh-add - <<<\"${SSH_CRED}\"\n\n#Change Local Network to Static\n#sudo nmcli connection mod 'Wired connection 1' \\\n# ipv4.method manual \\\n# ipv4.addresses $IPADDR \\\n# ipv4.gateway $GW \\\n# ipv4.dns $DNS \\\n# connection.autoconnect yes\n\nsudo coreos-installer install /dev/sda --ignition-url http://@@{PROVISIONING_VM}@@:8080/openshift/worker_@@{OPENSHIFT_SUBDOMAIN}@@.ign --insecure-ignition #--copy-network" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove ISO Disk", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "static", "script": "JWT = '@@{calm_jwt}@@'\nvmUuid ='@@{id}@@'\n# Get VM\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\nheaders = {'Content-Type': 'application/json', 'Accept':'application/json', 'Authorization': 'Bearer {}'.format(JWT)}\n\nr = urlreq(api_url, verb='GET', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Power off VM\ndel resp['status']\n\nresp['spec']['resources']['power_state'] = 'OFF'\n\npayload = resp\n\nr = urlreq(api_url, verb='PUT', params=json.dumps(payload), headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n\n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Wait for VM to power off\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\nr = urlreq(api_url, verb='GET', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n power_state = resp['status']['resources']['power_state']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\nstate = \"\"\nwhile state != \"OFF\":\n api_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']['resources']['power_state']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Remove ISO and Power on VM \ndel resp['status']\n# Remove ISO mount and disk size\ndisk_counter = 0\nfor disk in resp['spec']['resources']['disk_list']:\n del disk['disk_size_mib']\n if disk['device_properties']['device_type'] == \"CDROM\":\n del resp['spec']['resources']['disk_list'][disk_counter]\n disk_counter += 1\n\n\nresp['spec']['resources']['power_state'] = 'ON'\n\napi_url = 'https://localhost:9440/api/nutanix/v3/vms/{}'.format(vmUuid)\npayload = resp\n\nr = urlreq(api_url, verb='PUT', params=json.dumps(payload), headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\nprint(\"Removed ISO from Bootstrap and booted into Disk\")\n\n# Wait until VM boots\nsleep(60)\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Status", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "script_type": "static", "script": "print \"COMPUTE_STATUS=Done\"", "eval_variables": [ "COMPUTE_STATUS" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] }, "uninstall_runbook": { "name": "Runbook_for_Package_ComputePackage_action_uninstall", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "DAG_Task_for_Package_ComputePackage_action_uninstall" }, "task_definition_list": [ { "name": "DAG_Task_for_Package_ComputePackage_action_uninstall", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_service", "name": "Compute" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, "service_local_reference_list": [ { "kind": "app_service", "name": "Compute" } ], "variable_list": [], "version": "" } ], "published_service_definition_list": [], "substrate_definition_list": [ { "name": "BootstrapSubstrate", "description": "", "type": "AHV_VM", "os_type": "Linux", "create_spec": { "name": "bootstrap-@@{calm_array_index}@@-@@{LBDNS.ST}@@", "categories": {}, "resources": { "nic_list": [ { "network_function_nic_type": "INGRESS", "nic_type": "NORMAL_NIC", "subnet_reference": { "kind": "subnet", "uuid": "@@{subnet_ref.uuid}@@" }, "network_function_chain_reference": null, "mac_address": "", "ip_endpoint_list": [] } ], "num_vcpus_per_socket": 1, "num_sockets": 4, "memory_size_mib": 16384, "power_state": "ON", "account_uuid": "a74171d4-726c-4279-a124-8503a085ebd7", "gpu_list": [], "disk_list": [ { "data_source_reference": { "name": "RHCOS_BOOTSTRAP", "kind": "app_package", "uuid": "" }, "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 0, "adapter_type": "IDE" } }, "disk_size_mib": 0 }, { "data_source_reference": null, "device_properties": { "device_type": "DISK", "disk_address": { "device_index": 0, "adapter_type": "SCSI" } }, "disk_size_mib": 102400 } ], "guest_customization": null, "serial_port_list": [], "boot_config": { "boot_device": { "disk_address": { "device_index": 0, "adapter_type": "IDE" } } } } }, "variable_list": [], "action_list": [ { "name": "pre_action_create", "description": "", "type": "fragment", "critical": false, "runbook": { "name": "BootstrapSubstrate___pre_create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "BootstrapSubstrate___pre_create___dag" }, "task_definition_list": [ { "name": "BootstrapSubstrate___pre_create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_substrate", "name": "BootstrapSubstrate" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create Subnetref" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create Subnetref", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_substrate", "name": "BootstrapSubstrate" }, "attrs": { "script_type": "static", "script": "subnet_ref={\n \"kind\": \"subnet\",\n \"uuid\": \"@@{SUBNET_REF}@@\"\n }\nprint 'subnet_ref=',json.dumps(subnet_ref)", "eval_variables": [ "subnet_ref" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "readiness_probe": { "connection_type": "SSH", "connection_port": 22, "connection_protocol": "", "timeout_secs": "", "delay_secs": "30", "retries": "5", "address": "@@{platform.status.resources.nic_list[0].ip_endpoint_list[0].ip}@@", "disable_readiness_probe": false, "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "editables": { "create_spec": { "resources": { "disk_list": { "1": { "disk_size_mib": true } }, "nic_list": { "0": { "subnet_reference": true } } } }, "readiness_probe": { "retries": true, "delay_secs": true } } }, { "name": "ControlPlaneSubstrate", "description": "", "type": "AHV_VM", "os_type": "Linux", "create_spec": { "name": "controlplane-@@{calm_array_index}@@-@@{LBDNS.ST}@@", "categories": {}, "resources": { "nic_list": [ { "network_function_nic_type": "INGRESS", "nic_type": "NORMAL_NIC", "subnet_reference": { "kind": "subnet", "uuid": "@@{subnet_ref.uuid}@@" }, "network_function_chain_reference": null, "mac_address": "", "ip_endpoint_list": [] } ], "num_vcpus_per_socket": 1, "num_sockets": 4, "memory_size_mib": 16384, "power_state": "ON", "account_uuid": "a74171d4-726c-4279-a124-8503a085ebd7", "gpu_list": [], "disk_list": [ { "data_source_reference": { "name": "RHCOS_BOOTSTRAP", "kind": "app_package", "uuid": "" }, "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 0, "adapter_type": "IDE" } }, "disk_size_mib": 0 }, { "data_source_reference": null, "device_properties": { "device_type": "DISK", "disk_address": { "device_index": 0, "adapter_type": "SCSI" } }, "disk_size_mib": 122880 } ], "guest_customization": null, "serial_port_list": [], "boot_config": { "boot_device": { "disk_address": { "device_index": 0, "adapter_type": "IDE" } } } } }, "variable_list": [], "action_list": [ { "name": "pre_action_create", "description": "", "type": "fragment", "critical": false, "runbook": { "name": "ControlPlaneSubstrate___pre_create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlaneSubstrate___pre_create___dag" }, "task_definition_list": [ { "name": "ControlPlaneSubstrate___pre_create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_substrate", "name": "ControlPlaneSubstrate" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create Subnetref" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create Subnetref", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_substrate", "name": "ControlPlaneSubstrate" }, "attrs": { "script_type": "static", "script": "subnet_ref={\n \"kind\": \"subnet\",\n \"uuid\": \"@@{SUBNET_REF}@@\"\n }\nprint 'subnet_ref=',json.dumps(subnet_ref)", "eval_variables": [ "subnet_ref" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "readiness_probe": { "connection_type": "SSH", "connection_port": 22, "connection_protocol": "", "timeout_secs": "", "delay_secs": "30", "retries": "5", "address": "@@{platform.status.resources.nic_list[0].ip_endpoint_list[0].ip}@@", "disable_readiness_probe": false, "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "editables": { "create_spec": { "resources": { "disk_list": { "1": { "disk_size_mib": true } }, "nic_list": { "0": { "subnet_reference": true } } } }, "readiness_probe": { "retries": true, "delay_secs": true } } }, { "name": "LBDNSSubstrate", "description": "", "type": "AHV_VM", "os_type": "Linux", "create_spec": { "name": "lbdns-@@{OPENSHIFT_SUBDOMAIN}@@", "categories": {}, "resources": { "nic_list": [ { "network_function_nic_type": "INGRESS", "nic_type": "NORMAL_NIC", "subnet_reference": { "kind": "subnet", "uuid": "@@{subnet_ref.uuid}@@" }, "network_function_chain_reference": null, "mac_address": "", "ip_endpoint_list": [ { "ip": "@@{LBDNS_IP}@@", "type": "ASSIGNED" } ] } ], "num_vcpus_per_socket": 1, "num_sockets": 4, "memory_size_mib": 6144, "power_state": "ON", "account_uuid": "a74171d4-726c-4279-a124-8503a085ebd7", "gpu_list": [], "disk_list": [ { "data_source_reference": { "name": "OpenshiftC8", "kind": "app_package", "uuid": "" }, "device_properties": { "device_type": "DISK", "disk_address": { "device_index": 0, "adapter_type": "SCSI" } }, "disk_size_mib": 0 } ], "guest_customization": { "sysprep": null, "cloud_init": { "user_data": "#cloud-config\nusers:\n - name: @@{CRED.username}@@\n ssh-authorized-keys:\n - @@{CRED.public_key}@@\n sudo: ['ALL=(ALL) NOPASSWD:ALL']" } }, "serial_port_list": [], "boot_config": { "boot_device": { "disk_address": { "device_index": 0, "adapter_type": "SCSI" } } } } }, "variable_list": [], "action_list": [ { "name": "pre_action_create", "description": "", "type": "fragment", "critical": false, "runbook": { "name": "LBDNSSubstrate___pre_create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNSSubstrate___pre_create___dag" }, "task_definition_list": [ { "name": "LBDNSSubstrate___pre_create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_substrate", "name": "LBDNSSubstrate" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create SubnetRef" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create SubnetRef", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_substrate", "name": "LBDNSSubstrate" }, "attrs": { "script_type": "static", "script": "subnet_ref={\n \"kind\": \"subnet\",\n \"uuid\": \"@@{SUBNET_REF}@@\"\n }\nprint 'subnet_ref=',json.dumps(subnet_ref)", "eval_variables": [ "subnet_ref" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } }, { "name": "post_action_delete", "description": "", "type": "fragment", "critical": false, "runbook": { "name": "LBDNSSubstrate___post_delete___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "LBDNSSubstrate___post_delete___dag" }, "task_definition_list": [ { "name": "LBDNSSubstrate___post_delete___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_substrate", "name": "LBDNSSubstrate" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Remove Image from Image Service" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Remove Image from Image Service", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_substrate", "name": "LBDNSSubstrate" }, "attrs": { "script_type": "static", "script": "JWT = '@@{calm_jwt}@@'\nImageName ='RHCOS-@@{OPENSHIFT_SUBDOMAIN}@@'\n# Get VM\napi_url = 'https://localhost:9440/api/nutanix/v3/images/list'\nheaders = {'Content-Type': 'application/json', 'Accept':'application/json', 'Authorization': 'Bearer {}'.format(JWT)}\npayload = {'kind':'image'}\nr = urlreq(api_url, verb='POST', headers=headers,params=json.dumps(payload), verify=False)\nif r.ok:\n resp = json.loads(r.content)\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n\n# Get Image UUID \nfor entity in resp['entities']:\n if entity['status']['name'] == ImageName:\n ImageUUID = entity['metadata']['uuid']\n\napi_url = 'https://localhost:9440/api/nutanix/v3/images/{}'.format(ImageUUID)\n\nr = urlreq(api_url, verb='DELETE', headers=headers, verify=False)\nif r.ok:\n resp = json.loads(r.content)\n taskUuid = resp['status']['execution_context']['task_uuid']\n\nelse:\n print(\"Post request failed\", r.content)\n exit(1)\n \n \n# Monitor task\nstate = \"\"\nwhile state != \"SUCCEEDED\":\n api_url = 'https://localhost:9440/api/nutanix/v3/tasks/{}'.format(taskUuid)\n\n sleep(2)\n r = urlreq(api_url, verb='GET', headers=headers, verify=False)\n if r.ok:\n resp = json.loads(r.content)\n state = resp['status']\n if state == \"FAILED\":\n print(\"Task failed\", resp['progress_message'])\n exit(1)\n\n else:\n print(\"Post request failed\", r.content)\n exit(1)\n\nprint(\"Deleted {} from Image Service\".format(ImageName))\n\n" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "readiness_probe": { "connection_type": "SSH", "connection_port": 22, "connection_protocol": "", "timeout_secs": "", "delay_secs": "30", "retries": "5", "address": "@@{platform.status.resources.nic_list[0].ip_endpoint_list[0].ip}@@", "disable_readiness_probe": false, "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "editables": { "create_spec": { "resources": { "guest_customization": true, "memory_size_mib": true, "num_sockets": true, "num_vcpus_per_socket": true } } } }, { "name": "ProvisioningVMSubstrate", "description": "", "type": "EXISTING_VM", "os_type": "Linux", "create_spec": { "address": "@@{LBDNS.address}@@", "type": "PROVISION_EXISTING_MACHINE" }, "variable_list": [], "action_list": [], "readiness_probe": { "connection_type": "SSH", "connection_port": 22, "connection_protocol": "", "timeout_secs": "", "delay_secs": "30", "retries": "5", "address": "@@{LBDNS.address}@@", "disable_readiness_probe": false, "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "editables": {} }, { "name": "ComputeSubstrate", "description": "", "type": "AHV_VM", "os_type": "Linux", "create_spec": { "name": "compute-@@{calm_array_index}@@-@@{LBDNS.ST}@@", "categories": {}, "resources": { "nic_list": [ { "network_function_nic_type": "INGRESS", "nic_type": "NORMAL_NIC", "subnet_reference": { "kind": "subnet", "uuid": "@@{subnet_ref.uuid}@@" }, "network_function_chain_reference": null, "mac_address": "", "ip_endpoint_list": [] } ], "num_vcpus_per_socket": 1, "num_sockets": 4, "memory_size_mib": 16384, "power_state": "ON", "account_uuid": "a74171d4-726c-4279-a124-8503a085ebd7", "gpu_list": [], "disk_list": [ { "data_source_reference": { "name": "RHCOS_BOOTSTRAP", "kind": "app_package", "uuid": "" }, "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 0, "adapter_type": "IDE" } }, "disk_size_mib": 0 }, { "data_source_reference": null, "device_properties": { "device_type": "DISK", "disk_address": { "device_index": 0, "adapter_type": "SCSI" } }, "disk_size_mib": 122880 } ], "guest_customization": null, "serial_port_list": [], "boot_config": { "boot_device": { "disk_address": { "device_index": 0, "adapter_type": "IDE" } } } } }, "variable_list": [], "action_list": [ { "name": "pre_action_create", "description": "", "type": "fragment", "critical": false, "runbook": { "name": "ComputeSubstrate___pre_create___runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ComputeSubstrate___pre_create___dag" }, "task_definition_list": [ { "name": "ComputeSubstrate___pre_create___dag", "description": "", "type": "DAG", "target_any_local_reference": { "kind": "app_substrate", "name": "ComputeSubstrate" }, "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Create SubnetRef" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Create SubnetRef", "description": "", "type": "SET_VARIABLE", "target_any_local_reference": { "kind": "app_substrate", "name": "ComputeSubstrate" }, "attrs": { "script_type": "static", "script": "subnet_ref={\n \"kind\": \"subnet\",\n \"uuid\": \"@@{SUBNET_REF}@@\"\n }\nprint 'subnet_ref=',json.dumps(subnet_ref)", "eval_variables": [ "subnet_ref" ] }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [] } } ], "readiness_probe": { "connection_type": "SSH", "connection_port": 22, "connection_protocol": "", "timeout_secs": "", "delay_secs": "30", "retries": "5", "address": "@@{platform.status.resources.nic_list[0].ip_endpoint_list[0].ip}@@", "disable_readiness_probe": false, "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "editables": { "create_spec": { "resources": { "disk_list": { "1": { "disk_size_mib": true } }, "nic_list": { "0": { "subnet_reference": true } } } }, "readiness_probe": { "retries": true, "delay_secs": true } } } ], "credential_definition_list": [ { "name": "CRED", "description": "", "type": "KEY", "username": "core", "secret": { "attrs": { "is_secret_modified": true } }, "editables": { "username": false, "secret": true } } ], "app_profile_list": [ { "name": "ControlPlaneCompute", "deployment_create_list": [ { "published_service_local_reference_list": [], "package_local_reference_list": [ { "kind": "app_package", "name": "BootstrapPackage" } ], "substrate_local_reference": { "kind": "app_substrate", "name": "BootstrapSubstrate" }, "depends_on_list": [], "variable_list": [], "action_list": [], "min_replicas": "1", "default_replicas": "1", "max_replicas": "1", "type": "GREENFIELD", "name": "BootstrapDeployment", "options": {}, "description": "", "editables": {} }, { "published_service_local_reference_list": [], "package_local_reference_list": [ { "kind": "app_package", "name": "ControlPlanePackage" } ], "substrate_local_reference": { "kind": "app_substrate", "name": "ControlPlaneSubstrate" }, "depends_on_list": [], "variable_list": [], "action_list": [], "min_replicas": "3", "default_replicas": "3", "max_replicas": "3", "type": "GREENFIELD", "name": "9df14f84_deployment", "options": {}, "description": "", "editables": {} }, { "published_service_local_reference_list": [], "package_local_reference_list": [ { "kind": "app_package", "name": "LBDNSPackage" } ], "substrate_local_reference": { "kind": "app_substrate", "name": "LBDNSSubstrate" }, "depends_on_list": [], "variable_list": [], "action_list": [], "min_replicas": "1", "default_replicas": "1", "max_replicas": "1", "type": "GREENFIELD", "name": "8ff9c0f1_deployment", "options": {}, "description": "", "editables": {} }, { "published_service_local_reference_list": [], "package_local_reference_list": [ { "kind": "app_package", "name": "ProvisioningVMPackage" } ], "substrate_local_reference": { "kind": "app_substrate", "name": "ProvisioningVMSubstrate" }, "depends_on_list": [], "variable_list": [], "action_list": [], "min_replicas": "1", "default_replicas": "1", "max_replicas": "1", "type": "GREENFIELD", "name": "ProvisioningVMDeployment", "options": {}, "description": "", "editables": {} }, { "published_service_local_reference_list": [], "package_local_reference_list": [ { "kind": "app_package", "name": "ComputePackage" } ], "substrate_local_reference": { "kind": "app_substrate", "name": "ComputeSubstrate" }, "depends_on_list": [], "variable_list": [], "action_list": [], "min_replicas": "2", "default_replicas": "@@{COMPUTE_NODES}@@", "max_replicas": "99", "type": "GREENFIELD", "name": "4aff8c30_deployment", "options": {}, "description": "", "editables": {} } ], "variable_list": [ { "name": "BASE_DOMAIN", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "OPENSHIFT_SUBDOMAIN", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "PROVISIONING_VM", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "MACHINE_NETWORK", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "KUBECONFIGB64", "description": "", "type": "SECRET", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "KUBEADMINB64", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "SUBNET_REF", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": true }, { "name": "COMPUTE_NODES", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "2", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "LBDNS_IP", "description": "", "type": "LOCAL", "label": "", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false } ], "action_list": [ { "name": "Deploy CSI", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlaneCompute_DeployCSI_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlaneCompute_DeployCSI_dag" }, "task_definition_list": [ { "name": "ControlPlaneCompute_DeployCSI_dag", "description": "", "type": "DAG", "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Deploy CSI Driver" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Deploy CSI Driver", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "export KUBECONFIG=~/openshift/auth/kubeconfig\necho \"\"\"apiVersion: v1\nkind: Secret\nmetadata:\n name: ntnx-secret\n namespace: ntnx-system\nstringData:\n key: @@{PE_IP}@@:9440:@@{PE_ADMIN}@@:@@{PE_PW}@@\"\"\" > ntnx-secret.yaml\necho \"\"\"apiVersion: operators.coreos.com/v1\nkind: OperatorGroup\nmetadata:\n name: ntnx-system-r8czl\n namespace: ntnx-system\nspec:\n targetNamespaces:\n - ntnx-system\"\"\" > operatorgroup.yaml\necho \"\"\"apiVersion: operators.coreos.com/v1alpha1\nkind: Subscription\nmetadata:\n name: nutanixcsioperator\n namespace: ntnx-system\nspec:\n channel: stable\n name: nutanixcsioperator\n installPlanApproval: Automatic\n source: certified-operators\n sourceNamespace: openshift-marketplace\"\"\" > subscription.yaml\necho \"\"\"apiVersion: crd.nutanix.com/v1alpha1\nkind: NutanixCsiStorage\nmetadata:\n name: nutanixcsistorage\n namespace: ntnx-system\nspec:\n namespace: ntnx-system\"\"\" > instance.yaml\n \noc create ns ntnx-system\noc create -f ntnx-secret.yaml\noc create -f operatorgroup.yaml\noc create -f subscription.yaml\n\nATTEMPTS=0\nROLLOUT_STATUS_CMD=\"oc wait --for=condition=available --timeout=120s -n ntnx-system deployments nutanix-csi-operator-controller-manager\"\nuntil $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 12 ]; do\n $ROLLOUT_STATUS_CMD\n ATTEMPTS=$((attempts + 1))\n sleep 10\ndone\n\n# Check deployment rollout status every 10 seconds (max 2 minutes) until complete.\nATTEMPTS=0\nROLLOUT_STATUS_CMD=\"oc get NutanixCsiStorage -n ntnx-system\"\nuntil $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 12 ]; do\n $ROLLOUT_STATUS_CMD\n ATTEMPTS=$((attempts + 1))\n sleep 10\ndone\n\noc create -f instance.yaml", "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [ { "name": "PE_PW", "description": "", "type": "SECRET", "label": "Prism Element user password", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "PE_ADMIN", "description": "", "type": "LOCAL", "label": "Prism Element user with admin role", "attrs": {}, "val_type": "STRING", "value": "admin", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "PE_IP", "description": "", "type": "LOCAL", "label": "Prism Element VIP address", "attrs": {}, "val_type": "STRING", "value": "", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false } ] } }, { "name": "Enable Image Registry", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlaneCompute_EnableImageRegistry_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlaneCompute_EnableImageRegistry_dag" }, "task_definition_list": [ { "name": "ControlPlaneCompute_EnableImageRegistry_dag", "description": "", "type": "DAG", "attrs": { "edges": [] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Enable Image Registry" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Enable Image Registry", "description": "", "type": "EXEC", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "script_type": "sh", "script": "export KUBECONFIG=~/openshift/auth/kubeconfig\necho \"\"\"apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: nutanix-volume\nprovisioner: csi.nutanix.com\nparameters:\n csi.storage.k8s.io/provisioner-secret-name: ntnx-secret\n csi.storage.k8s.io/provisioner-secret-namespace: ntnx-system\n csi.storage.k8s.io/node-publish-secret-name: ntnx-secret\n csi.storage.k8s.io/node-publish-secret-namespace: ntnx-system\n csi.storage.k8s.io/controller-expand-secret-name: ntnx-secret\n csi.storage.k8s.io/controller-expand-secret-namespace: ntnx-system\n csi.storage.k8s.io/fstype: ext4\n dataServiceEndPoint: @@{DS_IP}@@:3260\n storageContainer: @@{PE_CONTAINER}@@\n storageType: NutanixVolumes\n #whitelistIPMode: ENABLED\n #chapAuth: ENABLED\nallowVolumeExpansion: true\nreclaimPolicy: Delete\"\"\" > storageclass.yaml\necho \"\"\"kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n name: image-registry-claim\n namespace: openshift-image-registry\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 100Gi\n storageClassName: nutanix-volume\"\"\" > pvc.yaml\n\noc create -f storageclass.yaml\noc create -f pvc.yaml\n\n# Patch OC Image Registry to use created PVC\noc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{\"spec\":{\"managementState\":\"Managed\",\"storage\":{\"pvc\":{\"claim\":\"image-registry-claim\"}},\"rolloutStrategy\": \"Recreate\"}}'\n", "login_credential_local_reference": { "kind": "app_credential", "name": "CRED" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [ { "name": "DS_IP", "description": "", "type": "LOCAL", "label": "Prism Element ISCSI Data Services IP", "attrs": {}, "val_type": "STRING", "value": "10.38.15.136", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false }, { "name": "PE_CONTAINER", "description": "", "type": "LOCAL", "label": "Prism Element Storage Container", "attrs": {}, "val_type": "STRING", "value": "Default", "data_type": "BASE", "editables": { "value": true }, "is_hidden": false, "is_mandatory": false } ] } }, { "name": "Scale Out", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlaneCompute_ScaleOut_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlaneCompute_ScaleOut_dag" }, "task_definition_list": [ { "name": "ControlPlaneCompute_ScaleOut_dag", "description": "", "type": "DAG", "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Scale Out Compute nodes" }, "to_task_reference": { "kind": "app_task", "name": "Save HAProxy State" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Scale Out Compute nodes" }, { "kind": "app_task", "name": "Save HAProxy State" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Scale Out Compute nodes", "description": "", "type": "SCALING", "target_any_local_reference": { "kind": "app_blueprint_deployment", "name": "4aff8c30_deployment" }, "attrs": { "scaling_type": "SCALEOUT", "scaling_count": "@@{SCALEOUT_COMPUTE}@@" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Save HAProxy State", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ProvisioningVM_SaveHAProxyState_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [ { "name": "SCALEOUT_COMPUTE", "description": "Number of Compute nodes to add", "type": "LOCAL", "label": "Scale out number of Compute nodes", "attrs": {}, "val_type": "INT", "value": "", "data_type": "BASE", "editables": { "value": true }, "regex": { "value": "^[\\d]*$", "should_validate": false }, "is_hidden": false, "is_mandatory": false } ] } }, { "name": "Scale In", "description": "", "type": "user", "critical": false, "runbook": { "name": "ControlPlaneCompute_ScaleIn_runbook", "description": "", "main_task_local_reference": { "kind": "app_task", "name": "ControlPlaneCompute_ScaleIn_dag" }, "task_definition_list": [ { "name": "ControlPlaneCompute_ScaleIn_dag", "description": "", "type": "DAG", "attrs": { "edges": [ { "from_task_reference": { "kind": "app_task", "name": "Scale In" }, "to_task_reference": { "kind": "app_task", "name": "Save HAProxy State" } } ] }, "child_tasks_local_reference_list": [ { "kind": "app_task", "name": "Scale In" }, { "kind": "app_task", "name": "Save HAProxy State" } ], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Scale In", "description": "", "type": "SCALING", "target_any_local_reference": { "kind": "app_blueprint_deployment", "name": "4aff8c30_deployment" }, "attrs": { "scaling_type": "SCALEIN", "scaling_count": "@@{SCALEIN_COMPUTE}@@" }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" }, { "name": "Save HAProxy State", "description": "", "type": "CALL_RUNBOOK", "target_any_local_reference": { "kind": "app_service", "name": "ProvisioningVM" }, "attrs": { "runbook_reference": { "kind": "app_runbook", "name": "ProvisioningVM_SaveHAProxyState_runbook" } }, "child_tasks_local_reference_list": [], "variable_list": [], "retries": "", "timeout_secs": "" } ], "variable_list": [ { "name": "SCALEIN_COMPUTE", "description": "Number of Compute nodes to remove", "type": "LOCAL", "label": "Scale in number of Compute nodes", "attrs": {}, "val_type": "INT", "value": "1", "data_type": "BASE", "editables": { "value": true }, "regex": { "value": "^[\\d]*$", "should_validate": false }, "is_hidden": false, "is_mandatory": false } ] } } ], "snapshot_config_list": [], "restore_config_list": [] } ], "client_attrs": { "None": { "Service": { "Bootstrap": { "dsl_name": "Bootstrap", "Action": { "Register Bootstrap into LoadBalancer": { "dsl_name": "RegisterBootstrapintoLoadBalancer" }, "Create DNS Entry": { "dsl_name": "CreateDNSEntry" } } }, "ControlPlane": { "dsl_name": "ControlPlane", "Action": { "Register ControlPlane node into LoadBalancer": { "dsl_name": "RegisterControlPlaneNodeintoLoadBalancer" }, "Remove ControlPlane node from LoadBalancer": { "dsl_name": "RemoveControlPlaneNodefromLoadBalancer" }, "Create DNS Entry": { "dsl_name": "CreateDNSEntry" }, "Delete DNS Entry": { "dsl_name": "DeleteDNSEntry" } } }, "LBDNS": { "dsl_name": "LBDNS", "Action": {} }, "ProvisioningVM": { "dsl_name": "ProvisioningVM", "Action": { "Remove Bootstrap from LoadBalancer": { "dsl_name": "RemoveBootstrapfromLoadBalancer" }, "Save HAProxy State": { "dsl_name": "SaveHAProxyState" } } }, "Compute": { "dsl_name": "Compute", "Action": { "Register Compute node into LoadBalancer": { "dsl_name": "RegisterComputeNodeintoLoadBalancer" }, "Remove Compute node from LoadBalancer": { "dsl_name": "RemoveComputeNodefromLoadBalancer" }, "Create DNS Entry": { "dsl_name": "CreateDNSEntry" }, "Delete DNS Entry": { "dsl_name": "DeleteDNSEntry" } } } }, "Package": { "RHCOS_BOOTSTRAP": { "dsl_name": "RHCOS_BOOTSTRAP", "Action": {} }, "OpenshiftC8": { "dsl_name": "OpenshiftC8", "Action": {} }, "BootstrapPackage": { "dsl_name": "BootstrapPackage", "Action": {} }, "ControlPlanePackage": { "dsl_name": "ControlPlanePackage", "Action": {} }, "LBDNSPackage": { "dsl_name": "LBDNSPackage", "Action": {} }, "ProvisioningVMPackage": { "dsl_name": "ProvisioningVMPackage", "Action": {} }, "ComputePackage": { "dsl_name": "ComputePackage", "Action": {} } }, "Deployment": { "BootstrapDeployment": { "dsl_name": "BootstrapDeployment", "Action": {} }, "9df14f84_deployment": { "dsl_name": "ControlPlaneDeployment", "Action": {} }, "8ff9c0f1_deployment": { "dsl_name": "_8ff9c0f1_deployment", "Action": {} }, "ProvisioningVMDeployment": { "dsl_name": "ProvisioningVMDeployment", "Action": {} }, "4aff8c30_deployment": { "dsl_name": "ComputeDeployment", "Action": {} } }, "Profile": { "ControlPlaneCompute": { "dsl_name": "ControlPlaneCompute", "Action": { "Deploy CSI": { "dsl_name": "DeployCSI" }, "Enable Image Registry": { "dsl_name": "EnableImageRegistry" }, "Scale Out": { "dsl_name": "ScaleOut" }, "Scale In": { "dsl_name": "ScaleIn" } } } }, "Substrate": { "BootstrapSubstrate": { "dsl_name": "BootstrapSubstrate", "Action": {}, "AhvVm": { "bootstrap-@@{calm_array_index}@@-@@{LBDNS.ST}@@": { "dsl_name": "bootstrapcalm_array_indexLBDNSST" } } }, "ControlPlaneSubstrate": { "dsl_name": "ControlPlaneSubstrate", "Action": {}, "AhvVm": { "controlplane-@@{calm_array_index}@@-@@{LBDNS.ST}@@": { "dsl_name": "controlplanecalm_array_indexLBDNSST" } } }, "LBDNSSubstrate": { "dsl_name": "LBDNSSubstrate", "Action": {}, "AhvVm": { "lbdns-@@{OPENSHIFT_SUBDOMAIN}@@": { "dsl_name": "lbdnsOPENSHIFT_SUBDOMAIN" } } }, "ProvisioningVMSubstrate": { "dsl_name": "ProvisioningVMSubstrate", "Action": {} }, "ComputeSubstrate": { "dsl_name": "ComputeSubstrate", "Action": {}, "AhvVm": { "compute-@@{calm_array_index}@@-@@{LBDNS.ST}@@": { "dsl_name": "computecalm_array_indexLBDNSST" } } } } } }, "default_credential_local_reference": { "kind": "app_credential", "name": "CRED" } } }, "api_version": "3.0", "metadata": { "name": "OCP-Installer", "kind": "blueprint", "categories": {}, "spec_version": 1 } }