Пример #1
0
Файл: lxc.c Проект: asmundg/lxc
static PyObject *
LXC_list_containers(PyObject *self, PyObject *args, PyObject *kwds)
{
    char **names = NULL;
    PyObject *list = NULL;
    int list_count = 0;

    int list_active = 1;
    int list_defined = 1;

    PyObject *py_list_active = NULL;
    PyObject *py_list_defined = NULL;

    char* config_path = NULL;

    int i = 0;
    PyObject *vargs = NULL;
    static char *kwlist[] = {"active", "defined", "config_path", NULL};

    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOs", kwlist,
                                      &py_list_active,
                                      &py_list_defined,
                                      &config_path, &vargs))
        return NULL;

    /* We default to listing everything */
    if (py_list_active && py_list_active != Py_True) {
        list_active = 0;
    }

    if (py_list_defined && py_list_defined != Py_True) {
        list_defined = 0;
    }

    /* Call the right API function based on filters */
    if (list_active == 1 && list_defined == 1)
        list_count = list_all_containers(config_path, &names, NULL);
    else if (list_active == 1)
        list_count = list_active_containers(config_path, &names, NULL);
    else if (list_defined == 1)
        list_count = list_defined_containers(config_path, &names, NULL);

    /* Handle failure */
    if (list_count < 0) {
        PyErr_SetString(PyExc_ValueError, "failure to list containers");
        return NULL;
    }

    /* Generate the tuple */
    list = PyTuple_New(list_count);
    for (i = 0; i < list_count; i++) {
        PyTuple_SET_ITEM(list, i, PyUnicode_FromString(names[i]));
        free(names[i]);
    }
    free(names);

    return list;
}
    TEST_FIXTURE(blob_service_test_base_with_objects_to_delete, list_containers)
    {
        auto prefix = get_random_container_name();

        create_containers(prefix, 1);

        auto listing = list_all_containers(utility::string_t(), azure::storage::container_listing_details::all, 5001, azure::storage::blob_request_options());
        
        check_container_list(listing, prefix, false);
    }
Пример #3
0
int lxctoolsLoadDomains(struct lxctools_driver *driver)
{
    int i,flags;
    virDomainObjPtr dom = NULL;
    virDomainDefPtr def = NULL;
    int cret_len;
    struct lxc_container** cret;
    char** names;
    virDomainXMLOptionPtr xmlopt;

    if ((cret_len = list_all_containers(driver->path, &names, &cret)) < 0)
        goto cleanup;

    for (i=0; i < cret_len; ++i) {
        if (!(def = virDomainDefNew()))
            goto cleanup;

        def->virtType = VIR_DOMAIN_VIRT_LXCTOOLS;
        if (!cret[i]->is_running(cret[i])) {
            def->id = -1;
        } else {
            def->id = cret[i]->init_pid(cret[i]);
        }

        
        if (lxctoolsReadUUID(cret[i], def->uuid) < 0) {
            virReportError(VIR_ERR_OPERATION_FAILED, "%s", "could not parse UUID");
            goto cleanup;
        } 


        def->os.type = VIR_DOMAIN_OSTYPE_EXE;
        def->name = names[i];

        if (lxctoolsReadConfig(cret[i], def) < 0){
            goto cleanup;
        }
        flags = VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE;
        if (def->id != -1)
           flags |= VIR_DOMAIN_OBJ_LIST_ADD_LIVE;

        if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)))
            goto cleanup;

        if (!(dom = virDomainObjListAdd(driver->domains,
                                        def,
                                        xmlopt,
                                        flags,
                                        NULL)))
            goto cleanup;
        if (!cret[i]->is_running(cret[i])) {
            virDomainObjSetState(dom, VIR_DOMAIN_SHUTOFF,
                                 VIR_DOMAIN_SHUTOFF_UNKNOWN);
            dom->pid = -1;
        } else {
            virDomainObjSetState(dom, VIR_DOMAIN_RUNNING,
                                 VIR_DOMAIN_RUNNING_UNKNOWN);
            dom->pid = cret[i]->init_pid(cret[i]);
        }
        dom->persistent = 1;
        dom->privateData = cret[i];
        dom->privateDataFreeFunc = &container_cleaner;
        virObjectUnlock(dom);
        dom = NULL;
        def = NULL;
    }
    return 0;

cleanup:
    VIR_FREE(cret);
    virObjectUnref(dom);
    virDomainDefFree(def);
    return -1;
}