]> git.proxmox.com Git - qemu-defaults.git/blob - PVE/QemuDefaults.pm
initial import
[qemu-defaults.git] / PVE / QemuDefaults.pm
1 package PVE::QemuDefaults;
2
3 use strict;
4 use warnings;
5 use File::chdir;
6 use File::Path;
7 use PVE::Tools qw(run_command);
8 use PVE::JSONSchema qw(get_standard_option);
9 use PVE::Cluster qw(cfs_register_file);
10 use PVE::QemuServer;
11
12 use Data::Dumper;
13
14 use base qw(PVE::SectionConfig);
15
16 #cfs_register_file('qemu-defaults.cfg',
17 # sub { __PACKAGE__->parse_config(@_); },
18 # sub { __PACKAGE__->write_config(@_); });
19
20 # fixme: remove this, use cfs_register_file above
21 sub load_defaults {
22 #my $filename = "/etc/pve/qemu-defaults.cfg";
23 my $filename = "./qemu-defaults.cfg";
24 my $raw = PVE::Tools::file_get_contents($filename);
25 return __PACKAGE__->parse_config($filename, $raw);
26 }
27
28 my $defaultData = {
29 propertyList => {
30 type => {
31 description => "Section type.",
32 type => 'string',
33 },
34 group => {
35 description => "User Group.",
36 type => 'string', format => 'pve-groupid',
37 },
38 },
39 };
40
41 sub private {
42 return $defaultData;
43 }
44
45 sub parse_section_header {
46 my ($class, $line) = @_;
47
48 if ($line =~ m/^((qm|storage):([^\s\:\@]*)(:([^\s\:\@]+))?)(\s+\@(\S+))?$/) {
49 my ($sid, $type, $pool, $subid, $group) = ($1, $2, $3, $5, $7);
50 my $errmsg = undef; # set if you want to skip whole section
51 my $config = {}; # to return additional attributes
52 $sid = "$sid\@$group" if defined($group);
53 eval {
54 if ($type eq 'qm') {
55 if ($subid) {
56 __PACKAGE__->check_value($type, 'ostype', $subid, $sid);
57 $config->{ostype} = $subid;
58 }
59
60 } elsif ($type eq 'storage') {
61 if ($subid) {
62 PVE::JSONSchema::parse_storage_id($subid);
63 $config->{storage} = $subid;
64 }
65 }
66 if ($group) {
67 __PACKAGE__->check_value($type, 'group', $group, $sid);
68 $config->{group} = $group;
69 }
70 };
71 $errmsg = $@ if $@;
72 $config->{pool} = $pool if $pool;
73 return ($type, $sid, $errmsg, $config);
74 }
75 return undef;
76 }
77
78 sub parse_config {
79 my ($class, $filename, $raw) = @_;
80
81 my $cfg = $class->SUPER::parse_config($filename, $raw);
82
83 return $cfg;
84 }
85
86 package PVE::QemuDefaults::qm;
87
88 use PVE::JSONSchema qw(get_standard_option);
89 use base qw(PVE::QemuDefaults);
90
91 my $option_list = ['ostype', 'memory', 'sockets', 'cores'];
92
93 sub type {
94 return 'qm';
95 }
96
97 sub properties {
98 my $props = {
99 pool => {
100 description => "VM pool.",
101 type => 'string', format => 'pve-poolid',
102 },
103 };
104
105 foreach my $k (@$option_list) {
106 $props->{$k} = get_standard_option("pve-qm-$k");
107 }
108
109 return $props;
110 }
111
112 sub options {
113 my $opts = {
114 group => { optional => 1 },
115 pool => { optional => 1 },
116 };
117
118 foreach my $k (@$option_list) {
119 $opts->{$k} = { optional => 1 };
120 }
121
122 return $opts;
123 }
124
125 __PACKAGE__->register();
126
127 package PVE::QemuDefaults::storage;
128
129 use PVE::JSONSchema qw(get_standard_option);
130 use base qw(PVE::QemuDefaults);
131
132 sub type {
133 return 'storage';
134 }
135
136 sub properties {
137 return {
138 storage => get_standard_option('pve-storage-id'),
139 };
140 }
141
142 sub options {
143 return {
144 group => { optional => 1 },
145 pool => { optional => 1 },
146 storage => { optional => 1 },
147 };
148 }
149
150 __PACKAGE__->register();
151
152
153 PVE::QemuDefaults->init();
154
155 1;