Esempio n. 1
0
def test_exclusive_ns_create():
    """Namespace creation fails by default if it already exists."""
    ns_name = f"ns-{random.randrange(999999999)}"
    kube.create_namespace(ns_name)
    with pytest.raises(ApiException):
        kube.create_namespace(ns_name)
    _delete_namespace(ns_name)
Esempio n. 2
0
def test_existing_ns_create():
    """Namespace creation succeeds with existing if existing_ok."""
    ns_name = f"ns-{random.randrange(999999999)}"
    res = kube.create_namespace(ns_name)
    res2 = kube.create_namespace(ns_name, existing_ok=True)
    assert res["metadata"]["name"] == ns_name
    assert res2["metadata"]["name"] == ns_name
    _delete_namespace(ns_name)
Esempio n. 3
0
def main() -> None:
    """Run the workload."""
    parser = argparse.ArgumentParser()
    parser.add_argument("-l", "--log-dir",
                        default=os.getcwd(),
                        type=str,
                        help="Path to use for log files")
    parser.add_argument("-m", "--accessmode",
                        default="ReadWriteOnce",
                        type=str, choices=["ReadWriteOnce", "ReadWriteMany"],
                        help="StorageClassName for the workload's PVCs")
    parser.add_argument("-n", "--namespace",
                        default="ocs-monkey",
                        type=str,
                        help="Namespace to use for the workload")
    parser.add_argument("--oc",
                        default="oc",
                        type=str,
                        help="Path/executable for the oc command")
    parser.add_argument("--ocs-namespace",
                        default="openshift-storage",
                        type=str,
                        help="Namespace where the OCS components are running")
    parser.add_argument("-s", "--storageclass",
                        default="gp2",
                        type=str,
                        help="StorageClassName for the workload's PVCs")
    parser.add_argument("-z", "--sleep-on-error",
                        action="store_true",
                        help="On error, sleep forever instead of exit")
    global CLI_ARGS  # pylint: disable=global-statement
    CLI_ARGS = parser.parse_args()

    log_dir = os.path.join(CLI_ARGS.log_dir, f'ocs-monkey-{RUN_ID}')
    os.mkdir(log_dir)

    handlers = [
        logging.FileHandler(os.path.join(log_dir, "runner.log")),
        logging.StreamHandler()
    ]
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    logging.Formatter.converter = time.gmtime
    formatter = \
        logging.Formatter("%(asctime)s %(name)s - %(levelname)s - %(message)s")
    for handler in handlers:
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    logging.info("starting execution-- run id: %d", RUN_ID)
    logging.info("program arguments: %s", CLI_ARGS)
    logging.info("log directory: %s", log_dir)

    # register log collector(s)
    log_gather.add(OcsMustGather())
    log_gather.add(MustGather())
    log_gather.add(OcsImageVersions(CLI_ARGS.ocs_namespace))

    kube.create_namespace(CLI_ARGS.namespace, existing_ok=True)

    dispatch = event.Dispatcher()
    dispatch.add(*osio.resume(CLI_ARGS.namespace))
    dispatch.add(osio.start(namespace=CLI_ARGS.namespace,
                            storage_class=CLI_ARGS.storageclass,
                            access_mode=CLI_ARGS.accessmode,
                            interarrival=10,
                            lifetime=300,
                            active=60,
                            idle=30))
    try:
        dispatch.run()
    except osio.UnhealthyDeployment:
        logging.info("starting log collection")
        log_gather.gather(log_dir)
        logging.info("Controller stopped due to detected error")
        while CLI_ARGS.sleep_on_error:
            time.sleep(9999)
Esempio n. 4
0
def test_create_namespace():
    """We can create a new namespace."""
    ns_name = f"ns-{random.randrange(999999999)}"
    res = kube.create_namespace(ns_name)
    assert res["metadata"]["name"] == ns_name
    _delete_namespace(ns_name)
def main() -> None:
    """Run the workload."""
    parser = argparse.ArgumentParser()
    parser.add_argument("-l", "--log-dir",
                        default=os.getcwd(),
                        type=str,
                        help="Path to use for log files")
    parser.add_argument("-m", "--accessmode",
                        default="ReadWriteOnce",
                        type=str, choices=["ReadWriteOnce", "ReadWriteMany"],
                        help="StorageClassName for the workload's PVCs")
    parser.add_argument("-n", "--namespace",
                        default="ocs-monkey",
                        type=str,
                        help="Namespace to use for the workload")
    parser.add_argument("--oc",
                        default="oc",
                        type=str,
                        help="Path/executable for the oc command")
    parser.add_argument("--ocs-namespace",
                        default="openshift-storage",
                        type=str,
                        help="Namespace where the OCS components are running")
    parser.add_argument("-s", "--storageclass",
                        default="ocs-storagecluster-ceph-rbd",
                        type=str,
                        help="StorageClassName for the workload's PVCs")
    parser.add_argument("-z", "--sleep-on-error",
                        action="store_true",
                        help="On error, sleep forever instead of exit")
    parser.add_argument("--osio-interarrival",
                        default=20,
                        type=float,
                        help="OSIO workload mean interrarival time (s)")
    parser.add_argument("--osio-lifetime",
                        default=3600,
                        type=float,
                        help="OSIO workload mean lifetime (s)")
    parser.add_argument("--osio-active-time",
                        default=300,
                        type=float,
                        help="OSIO workload mean active period (s)")
    parser.add_argument("--osio-idle-time",
                        default=60,
                        type=float,
                        help="OSIO workload mean idle period (s)")
    parser.add_argument("--osio-kernel-slots",
                        default=3,
                        type=int,
                        help="OSIO workload slots for kernel untar")
    parser.add_argument("--osio-kernel-untar",
                        default=10,
                        type=float,
                        help="OSIO workload kernel untar rate (#/hr)")
    parser.add_argument("--osio-kernel-rm",
                        default=10,
                        type=float,
                        help="OSIO workload kernel rm rate (#/hr)")
    parser.add_argument("--osio-image",
                        default="quay.io/ocsci/osio-workload",
                        type=str,
                        help="Container image for OSIO worker pods")
    parser.add_argument("-t", "--runtime",
                        default=7200,
                        type=int,
                        help="Run time in seconds")
    global CLI_ARGS  # pylint: disable=global-statement
    CLI_ARGS = parser.parse_args()

    log_dir = os.path.join(CLI_ARGS.log_dir, f'ocs-monkey-{RUN_ID}')
    util.setup_logging(log_dir)

    logging.info("starting execution-- run id: %d", RUN_ID)
    logging.info("program arguments: %s", CLI_ARGS)
    logging.info("log directory: %s", log_dir)

    # register log collector(s)
    log_gather.add(log_gather_ocs.OcsMustGather(CLI_ARGS.oc))
    log_gather.add(log_gather_ocs.MustGather(CLI_ARGS.oc))
    log_gather.add(log_gather_ocs.OcsImageVersions(CLI_ARGS.oc,
                                                   CLI_ARGS.ocs_namespace))

    kube.create_namespace(CLI_ARGS.namespace, existing_ok=True)

    if CLI_ARGS.sleep_on_error:
        set_health(True)

    dispatch = event.Dispatcher()
    dispatch.add(*osio.resume(CLI_ARGS.namespace))
    dispatch.add(osio.start(namespace=CLI_ARGS.namespace,
                            storage_class=CLI_ARGS.storageclass,
                            access_mode=CLI_ARGS.accessmode,
                            interarrival=CLI_ARGS.osio_interarrival,
                            lifetime=CLI_ARGS.osio_lifetime,
                            active=CLI_ARGS.osio_active_time,
                            idle=CLI_ARGS.osio_idle_time,
                            kernel_slots=CLI_ARGS.osio_kernel_slots,
                            kernel_untar=CLI_ARGS.osio_kernel_untar,
                            kernel_rm=CLI_ARGS.osio_kernel_rm,
                            workload_image=CLI_ARGS.osio_image))
    try:
        dispatch.run(runtime=CLI_ARGS.runtime)
    except osio.UnhealthyDeployment:
        if CLI_ARGS.sleep_on_error:
            set_health(False)
        logging.info("starting log collection")
        log_gather.gather(log_dir)
        logging.error("Controller stopped due to detected error")
        while CLI_ARGS.sleep_on_error:
            time.sleep(9999)
        raise