blob: ba4d62e3b7957779fa07b6b384148aa30c19a3ba [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.hypervisor.ovm3.objects;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.w3c.dom.Document;
public class Repository extends OvmObject {
private static final String VERSION = "Version";
private static final String NAMETAG = "[@Name='";
private Object postDiscovery = null;
private Object postDbDiscovery = null;
private Map<String, RepoDbDetails> repoDbs = new HashMap<String, RepoDbDetails>();
private Map<String, RepoDetails> repos = new HashMap<String, RepoDetails>();
private List<String> repoDbList = new ArrayList<String>();
private List<String> repoList = new ArrayList<String>();
public Repository(Connection c) {
setClient(c);
}
public RepoDbDetails getRepoDb(String id) throws Ovm3ResourceException {
if (repoDbs.containsKey(id)) {
return repoDbs.get(id);
}
return null;
}
public List<String> getRepoDbList() throws Ovm3ResourceException {
return repoDbList;
}
public RepoDetails getRepo(String id) throws Ovm3ResourceException {
if (repos.containsKey(id)) {
return repos.get(id);
}
return null;
}
public List<String> getRepoList() throws Ovm3ResourceException {
return repoList;
}
public static class RepoDbDetails {
private static final long serialVersionUID = 2L;
private final Map<String, String> dbEntry = new HashMap<String, String>() {
{
put("Uuid", null);
put("Fs_location", null);
put("Mount_point", null);
put("Filesystem_type", null);
put(VERSION, null);
put("Alias", null);
put("Manager_uuid", null);
put("Status", null);
}
private static final long serialVersionUID = 1L;
};
public RepoDbDetails() {
}
public void setRepoDbDetails(Map<String, String> det) {
dbEntry.putAll(det);
}
public void setUuid(String id) {
dbEntry.put("Uuid", id);
}
public String getStatus() {
return dbEntry.get("Status");
}
public String getManagerUuid() {
return dbEntry.get("Manager_uuid");
}
public String getAlias() {
return dbEntry.get("Alias");
}
public String getVersion() {
return dbEntry.get(VERSION);
}
public String getFilesystemType() {
return dbEntry.get("Filesystem_type");
}
public String getMountPoint() {
return dbEntry.get("Mount_point");
}
public String getFsLocation() {
return dbEntry.get("Fs_location");
}
public String getUuid() {
return dbEntry.get("Uuid");
}
}
public static class RepoDetails {
private List<String> templates = new ArrayList<String>();
private List<String> virtualMachines = new ArrayList<String>();
private List<String> virtualDisks = new ArrayList<String>();
private List<String> isos = new ArrayList<String>();
private final Map<String, String> dbEntry = new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("Repository_UUID", null);
put(VERSION, null);
put("Repository_Alias", null);
put("Manager_UUID", null);
}
};
public RepoDetails() {
}
public String getManagerUuid() {
return dbEntry.get("Manager_UUID");
}
public String getAlias() {
return dbEntry.get("Repository_Alias");
}
public String getVersion() {
return dbEntry.get(VERSION);
}
public String getUuid() {
return dbEntry.get("Repository_UUID");
}
public void setRepoDetails(Map<String, String> det) {
dbEntry.putAll(det);
}
public void setRepoTemplates(List<String> temp) {
templates.addAll(temp);
}
public List<String> getRepoTemplates() {
return templates;
}
public void setRepoVirtualMachines(List<String> vms) {
virtualMachines.addAll(vms);
}
public List<String> getRepoVirtualMachines() {
return virtualMachines;
}
public void setRepoVirtualDisks(List<String> disks) {
virtualDisks.addAll(disks);
}
public List<String> getRepoVirtualDisks() {
return virtualDisks;
}
public void setRepoISOs(List<String> isolist) {
isos.addAll(isolist);
}
public List<String> getRepoISOs() {
return isos;
}
}
/*
* delete_repository, <class 'agent.api.repository.Repository'> argument:
* repo_uuid - default: None argument: erase - default: None
*/
public Boolean deleteRepo(String id, Boolean erase)
throws Ovm3ResourceException {
Object res = callWrapper("delete_repository", id, erase);
if (res == null) {
return true;
}
return false;
}
/*
* import_virtual_disk, <class 'agent.api.repository.Repository'> argument:
* url - default: None argument: virtual_disk_id - default: None argument:
* repo_uuid - default: None argument: option - default: None
*/
/* should add timeout ? */
public Boolean importVirtualDisk(String url, String vdiskid, String repoid,
String option) throws Ovm3ResourceException {
return nullIsTrueCallWrapper("import_virtual_disk", url, vdiskid,
repoid, option);
}
public Boolean importVirtualDisk(String url, String vdiskid, String repoid)
throws Ovm3ResourceException {
return nullIsTrueCallWrapper("import_virtual_disk", url, vdiskid,
repoid);
}
/*
* discover_repositories, <class 'agent.api.repository.Repository'>
* argument: args - default: None
*/
/*
* args are repo ids <Discover_Repositories_Result> <RepositoryList/>
* </Discover_Repositories_Result>
*/
public Boolean discoverRepo(String id) throws Ovm3ResourceException {
postDiscovery = callWrapper("discover_repositories", id);
if (postDiscovery == null) {
return false;
}
Document xmlDocument = prepParse((String) postDiscovery);
String path = "//Discover_Repositories_Result/RepositoryList/Repository";
repoList = new ArrayList<String>();
repoList.addAll(xmlToList(path + "/@Name", xmlDocument));
for (String name : repoList) {
RepoDetails repo = new RepoDetails();
repo.setRepoTemplates(xmlToList(path + NAMETAG + id
+ "']/Templates/Template/File", xmlDocument));
repo.setRepoVirtualMachines(xmlToList(path + NAMETAG + id
+ "']/VirtualMachines/VirtualMachine/@Name", xmlDocument));
repo.setRepoVirtualDisks(xmlToList(path + NAMETAG + name
+ "']/VirtualDisks/Disk", xmlDocument));
repo.setRepoISOs(xmlToList(
path + NAMETAG + name + "']/ISOs/ISO", xmlDocument));
Map<String, String> details = xmlToMap(path + NAMETAG + name
+ "']", xmlDocument);
repo.setRepoDetails(details);
repos.put(name, repo);
}
return true;
}
/*
* add_repository, <class 'agent.api.repository.Repository'> argument:
* fs_location - default: None argument: mount_point - default: None
*/
public Boolean addRepo(String remote, String local)
throws Ovm3ResourceException {
return nullIsTrueCallWrapper("add_repository", remote, local);
}
/**
* is the same as discoverRepoDb in principle (takes an id or mountpoint)
* get_repository_meta_data, <class 'agent.api.repository.Repository'>
* argument: repo_mount_point - default: None
*/
/*
* mount_repository_fs, <class 'agent.api.repository.Repository'> argument:
* fs_location - default: None argument: mount_point - default: None
*/
public Boolean mountRepoFs(String remote, String local)
throws Ovm3ResourceException {
return nullIsTrueCallWrapper("mount_repository_fs", remote, local);
}
/*
* unmount_repository_fs, <class 'agent.api.repository.Repository'>
* argument: mount_point - default: None
*/
public Boolean unmountRepoFs(String local) throws Ovm3ResourceException {
return nullIsTrueCallWrapper("unmount_repository_fs", local);
}
/*
* create_repository, <class 'agent.api.repository.Repository'> argument:
* fs_location - default: None argument: mount_point - default: None
* argument: repo_uuid - default: None argument: repo_alias - default: None
*/
public Boolean createRepo(String remote, String local, String repoid,
String repoalias) throws Ovm3ResourceException {
return nullIsTrueCallWrapper("create_repository", remote, local,
repoid, repoalias);
}
/*
* discover_repository_db, <class 'agent.api.repository.Repository'>
* <Discover_Repository_Db_Result> <RepositoryDbList> <Repository
* Uuid="0004fb0000030000aeaca859e4a8f8c0">
* <Fs_location>cs-mgmt:/volumes/cs-data/primary</Fs_location>
* <Mount_point>/
* OVS/Repositories/0004fb0000030000aeaca859e4a8f8c0</Mount_point>
* <Filesystem_type>nfs</Filesystem_type> <Version>3.0</Version>
* <Alias>MyRepo</Alias>
* <Manager_uuid>0004fb00000100000af70d20dcce7d65</Manager_uuid>
* <Status>Unmounted</Status> </Repository> <Repository> ... </Repository>
* </RepositoryDbList> </Discover_Repository_Db_Result>
*/
public Boolean discoverRepoDb() throws Ovm3ResourceException {
postDbDiscovery = callWrapper("discover_repository_db");
Document xmlDocument = prepParse((String) postDbDiscovery);
String path = "//Discover_Repository_Db_Result/RepositoryDbList/Repository";
repoDbList = new ArrayList<String>();
repoDbList.addAll(xmlToList(path + "/@Uuid", xmlDocument));
for (String id : repoDbList) {
RepoDbDetails repoDb = new RepoDbDetails();
Map<String, String> rep = xmlToMap(path + "[@Uuid='" + id + "']",
xmlDocument);
repoDb.setRepoDbDetails(rep);
repoDb.setUuid(id);
repoDbs.put(id, repoDb);
}
return true;
}
}