Exemplo n.º 1
0
def drain_nodes(node_names):
    """
    Drain nodes

    Args:
        node_names (list): The names of the nodes

    Raises:
        TimeoutExpired: in case drain command fails to complete in time

    """
    ocp = OCP(kind="node")
    node_names_str = " ".join(node_names)
    log.info(f"Draining nodes {node_names_str}")
    try:
        ocp.exec_oc_cmd(
            f"adm drain {node_names_str} --force=true --ignore-daemonsets "
            f"--delete-local-data",
            timeout=1800,
        )
    except TimeoutExpired:
        ct_pod = pod.get_ceph_tools_pod()
        ceph_status = ct_pod.exec_cmd_on_pod("ceph status",
                                             out_yaml_format=False)
        log.error(
            f"Drain command failed to complete. Ceph status: {ceph_status}")
        # TODO: Add re-balance status once pull/1679 is merged
        raise
Exemplo n.º 2
0
def schedule_nodes(node_names):
    """
    Change nodes to be scheduled

    Args:
        node_names (list): The names of the nodes

    """
    ocp = OCP(kind="node")
    node_names_str = " ".join(node_names)
    ocp.exec_oc_cmd(f"adm uncordon {node_names_str}")
    log.info(f"Scheduling nodes {node_names_str}")
    wait_for_nodes_status(node_names)
Exemplo n.º 3
0
def drain_nodes(node_names):
    """
    Drain nodes

    Args:
        node_names (list): The names of the nodes

    """
    ocp = OCP(kind='node')
    node_names_str = ' '.join(node_names)
    log.info(f'Draining nodes {node_names_str}')
    ocp.exec_oc_cmd(
        f"adm drain {node_names_str} --force=true --ignore-daemonsets "
        f"--delete-local-data")
Exemplo n.º 4
0
def unschedule_nodes(node_names):
    """
    Change nodes to be unscheduled

    Args:
        node_names (list): The names of the nodes

    """
    ocp = OCP(kind="node")
    node_names_str = " ".join(node_names)
    log.info(f"Unscheduling nodes {node_names_str}")
    ocp.exec_oc_cmd(f"adm cordon {node_names_str}")

    wait_for_nodes_status(node_names, status=constants.NODE_READY_SCHEDULING_DISABLED)
Exemplo n.º 5
0
def scale_down_deployments(node_name):
    """
    Scale down the deployments of a node as described in the documents
    of node replacement with LSO

    Args:
        node_name (str): The node name

    """
    ocp = OCP(kind="node", namespace=defaults.ROOK_CLUSTER_NAMESPACE)
    pods_to_scale_down = get_node_pods_to_scale_down(node_name)
    for p in pods_to_scale_down:
        deployment_name = pod.get_deployment_name(p.name)
        log.info(f"Scale down deploymet {deployment_name}")
        ocp.exec_oc_cmd(f"scale deployment {deployment_name} --replicas=0")

    log.info("Scale down rook-ceph-crashcollector")
    ocp.exec_oc_cmd(
        f"scale deployment --selector=app=rook-ceph-crashcollector,"
        f"node_name='{node_name}' --replicas=0")
Exemplo n.º 6
0
def taint_ocs_nodes(nodes_to_taint=None):
    """
    Function to taint nodes with "node.ocs.openshift.io/storage=true:NoSchedule"

    Args:
        nodes_to_taint (list): Nodes to taint

    """
    if not check_taint_on_ocs_nodes():
        ocp = OCP()
        ocs_nodes = get_ocs_nodes()
        nodes_to_taint = nodes_to_taint if nodes_to_taint else ocs_nodes
        log.info(f"Taint nodes with taint: " f"{constants.OPERATOR_NODE_TAINT}")
        for node in nodes_to_taint:
            taint_cmd = f"adm taint nodes {node.name} {constants.OPERATOR_NODE_TAINT}"
            ocp.exec_oc_cmd(command=taint_cmd)
    else:
        log.info(
            f"One or more nodes already have taint {constants.OPERATOR_NODE_TAINT} "
        )
Exemplo n.º 7
0
def remove_nodes(nodes):
    """
    Remove the nodes from cluster

    Args:
        nodes (list): list of node instances to remove from cluster

    """
    ocp = OCP(kind="node")
    node_names = [node.get().get("metadata").get("name") for node in nodes]
    node_names_str = " ".join(node_names)

    # unschedule node
    unschedule_nodes(node_names)

    # Drain all the pods from the node
    drain_nodes(node_names)

    # delete the nodes
    log.info(f"Deleting nodes {node_names_str}")
    ocp.exec_oc_cmd(f"delete nodes {node_names_str}")
Exemplo n.º 8
0
def untaint_ocs_nodes(taint=constants.OPERATOR_NODE_TAINT, nodes_to_untaint=None):
    """
    Function to remove taints from nodes

    Args:
        taint (str): taint to use
        nodes_to_taint (list): list of nodes to untaint

    Return:
        bool: True if untainted, false otherwise

    """
    if check_taint_on_nodes():
        ocp = OCP()
        ocs_nodes = get_ocs_nodes()
        nodes_to_taint = nodes_to_untaint if nodes_to_untaint else ocs_nodes
        for node in nodes_to_taint:
            taint_cmd = f"adm taint nodes {node.name} {taint}-"
            ocp.exec_oc_cmd(command=taint_cmd)
            log.info(f"Untainted {node.name}")
        return True
    return False
Exemplo n.º 9
0
def add_scc_policy(sa_name, namespace):
    """
    Adding ServiceAccount to scc privileged

    Args:
        sa_name (str): ServiceAccount name
        namespace (str): The namespace for the scc_policy creation

    """
    ocp = OCP()
    out = ocp.exec_oc_cmd(
        command=
        f"adm policy add-scc-to-user privileged system:serviceaccount:{namespace}:{sa_name}",
        out_yaml_format=False)

    logger.info(out)
Exemplo n.º 10
0
def remove_scc_policy(sa_name, namespace):
    """
    Removing ServiceAccount from scc privileged

    Args:
        sa_name (str): ServiceAccount name
        namespace (str): The namespace for the scc_policy deletion

    """
    ocp = OCP()
    out = ocp.exec_oc_cmd(
        command=
        f"adm policy remove-scc-from-user privileged system:serviceaccount:{namespace}:{sa_name}",
        out_yaml_format=False)

    logger.info(out)