1 /*
2  * libvirt-gconfig-secret.c: libvirt secret configuration
3  *
4  * Copyright (C) 2008 Daniel P. Berrange
5  * Copyright (C) 2010-2013 Red Hat, Inc.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library. If not, see
19  * <http://www.gnu.org/licenses/>.
20  *
21  * Author: Christophe Fergeau <cfergeau@redhat.com>
22  */
23 
24 #include <config.h>
25 
26 #include "libvirt-gconfig/libvirt-gconfig.h"
27 #include "libvirt-gconfig/libvirt-gconfig-private.h"
28 
29 #define GVIR_CONFIG_DOMAIN_SNAPSHOT_DISK_GET_PRIVATE(obj)                         \
30         (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_SNAPSHOT_DISK, GVirConfigDomainSnapshotDiskPrivate))
31 
32 struct _GVirConfigDomainSnapshotDiskPrivate
33 {
34     gboolean unused;
35 };
36 
37 G_DEFINE_TYPE_WITH_PRIVATE(GVirConfigDomainSnapshotDisk, gvir_config_domain_snapshot_disk, GVIR_CONFIG_TYPE_OBJECT);
38 
39 
gvir_config_domain_snapshot_disk_class_init(GVirConfigDomainSnapshotDiskClass * klass G_GNUC_UNUSED)40 static void gvir_config_domain_snapshot_disk_class_init(GVirConfigDomainSnapshotDiskClass *klass G_GNUC_UNUSED)
41 {
42 }
43 
44 
gvir_config_domain_snapshot_disk_init(GVirConfigDomainSnapshotDisk * disk)45 static void gvir_config_domain_snapshot_disk_init(GVirConfigDomainSnapshotDisk *disk)
46 {
47     disk->priv = GVIR_CONFIG_DOMAIN_SNAPSHOT_DISK_GET_PRIVATE(disk);
48 }
49 
50 
gvir_config_domain_snapshot_disk_new(void)51 GVirConfigDomainSnapshotDisk *gvir_config_domain_snapshot_disk_new(void)
52 {
53     GVirConfigObject *object;
54 
55     object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_SNAPSHOT_DISK,
56                                     "disk",
57                                     DATADIR "/libvirt/schemas/domainsnapshot.rng");
58     return GVIR_CONFIG_DOMAIN_SNAPSHOT_DISK(object);
59 }
60 
61 
gvir_config_domain_snapshot_disk_new_from_xml(const gchar * xml,GError ** error)62 GVirConfigDomainSnapshotDisk *gvir_config_domain_snapshot_disk_new_from_xml(const gchar *xml,
63                                                                             GError **error)
64 {
65     GVirConfigObject *object;
66 
67     object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_SNAPSHOT_DISK,
68                                              "disk",
69                                              DATADIR "/libvirt/schemas/domainsnapshot.rng",
70                                              xml, error);
71     return GVIR_CONFIG_DOMAIN_SNAPSHOT_DISK(object);
72 }
73 
74 
75 GVirConfigDomainSnapshotDisk *
gvir_config_domain_snapshot_disk_new_from_tree(GVirConfigXmlDoc * doc,xmlNodePtr tree)76 gvir_config_domain_snapshot_disk_new_from_tree(GVirConfigXmlDoc *doc,
77                                                xmlNodePtr tree)
78 {
79     GVirConfigObject *object;
80 
81     object = gvir_config_object_new_from_tree(GVIR_CONFIG_TYPE_DOMAIN_SNAPSHOT_DISK,
82                                               doc, NULL, tree);
83 
84     return GVIR_CONFIG_DOMAIN_SNAPSHOT_DISK(object);
85 }
86 
87 
gvir_config_domain_snapshot_disk_get_name(GVirConfigDomainSnapshotDisk * disk)88 const char *gvir_config_domain_snapshot_disk_get_name(GVirConfigDomainSnapshotDisk *disk)
89 {
90     g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk), NULL);
91 
92     return gvir_config_object_get_node_content(GVIR_CONFIG_OBJECT(disk),
93                                                "name");
94 }
95 
96 
gvir_config_domain_snapshot_disk_set_name(GVirConfigDomainSnapshotDisk * disk,const char * name)97 void gvir_config_domain_snapshot_disk_set_name(GVirConfigDomainSnapshotDisk *disk,
98                                                const char *name)
99 {
100     g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk));
101 
102     gvir_config_object_set_node_content(GVIR_CONFIG_OBJECT(disk),
103                                         "name", name);
104 }
105 
106 
gvir_config_domain_snapshot_disk_get_snapshot_type(GVirConfigDomainSnapshotDisk * disk)107 GVirConfigDomainDiskSnapshotType gvir_config_domain_snapshot_disk_get_snapshot_type(GVirConfigDomainSnapshotDisk *disk)
108 {
109     g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk),
110                          GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_NO);
111 
112     return gvir_config_object_get_attribute_genum(GVIR_CONFIG_OBJECT(disk),
113                                                   NULL,
114                                                   "snapshot",
115                                                   GVIR_CONFIG_TYPE_DOMAIN_DISK_SNAPSHOT_TYPE,
116                                                   GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_NO);
117 }
118 
119 
gvir_config_domain_snapshot_disk_set_snapshot_type(GVirConfigDomainSnapshotDisk * disk,GVirConfigDomainDiskSnapshotType type)120 void gvir_config_domain_snapshot_disk_set_snapshot_type(GVirConfigDomainSnapshotDisk *disk,
121                                                         GVirConfigDomainDiskSnapshotType type)
122 {
123     g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk));
124 
125     gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(disk), "snapshot",
126                                                GVIR_CONFIG_TYPE_DOMAIN_DISK_SNAPSHOT_TYPE,
127                                                type, NULL);
128 }
129 
130 
gvir_config_domain_snapshot_disk_get_source_file(GVirConfigDomainSnapshotDisk * disk)131 const char *gvir_config_domain_snapshot_disk_get_source_file(GVirConfigDomainSnapshotDisk *disk)
132 {
133     g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk), NULL);
134 
135     return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(disk),
136                                             "source", "file");
137 }
138 
139 
gvir_config_domain_snapshot_disk_set_source_file(GVirConfigDomainSnapshotDisk * disk,const char * filename)140 void gvir_config_domain_snapshot_disk_set_source_file(GVirConfigDomainSnapshotDisk *disk,
141                                                       const char *filename)
142 {
143     g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk));
144 
145     gvir_config_object_add_child_with_attribute(GVIR_CONFIG_OBJECT(disk),
146                                                 "source", "file", filename);
147 }
148 
gvir_config_domain_snapshot_disk_get_driver_format(GVirConfigDomainSnapshotDisk * disk)149 GVirConfigDomainDiskFormat gvir_config_domain_snapshot_disk_get_driver_format(GVirConfigDomainSnapshotDisk *disk)
150 {
151     g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk),
152                          GVIR_CONFIG_DOMAIN_DISK_FORMAT_RAW);
153 
154     return gvir_config_object_get_attribute_genum(GVIR_CONFIG_OBJECT(disk),
155                                                   "driver", "type",
156                                                   GVIR_CONFIG_TYPE_DOMAIN_DISK_FORMAT,
157                                                   GVIR_CONFIG_DOMAIN_DISK_FORMAT_RAW);
158 }
159 
160 
gvir_config_domain_snapshot_disk_set_driver_format(GVirConfigDomainSnapshotDisk * disk,GVirConfigDomainDiskFormat format)161 void gvir_config_domain_snapshot_disk_set_driver_format(GVirConfigDomainSnapshotDisk *disk,
162                                                         GVirConfigDomainDiskFormat format)
163 {
164     g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT_DISK(disk));
165 
166     gvir_config_object_add_child_with_attribute_enum(GVIR_CONFIG_OBJECT(disk),
167                                                      "driver", "type",
168                                                      GVIR_CONFIG_TYPE_DOMAIN_DISK_FORMAT,
169                                                      format);
170 }
171