]> git.proxmox.com Git - pve-installer.git/blame - Proxmox/Install/Config.pm
switch "hostname" & "domain" over to central config
[pve-installer.git] / Proxmox / Install / Config.pm
CommitLineData
390889ab
TL
1package Proxmox::Install::Config;
2
3use strict;
4use warnings;
5
6use Carp;
7use JSON qw(from_json to_json);
8
9use Proxmox::Install::ISOEnv;
10
11my sub init_cfg {
74041d68
TL
12 my $iso_env = Proxmox::Install::ISOEnv::get();
13
14 my $country = Proxmox::Install::RunEnv::get('country');
15 if (!defined($iso_env->{locales}->{country}->{$country})) {
16 log_warn("ignoring detected country '$country', invalid or unknown\n");
17 $country = undef;
18 }
19
20 my $initial = {
390889ab
TL
21 # installer behavior related
22 autoreboot => 1,
23
24 # disk and filesystem related
25 filesys => 'ext4',
26 hdsize => undef,
27 swapsize => undef,
28 maxroot => undef,
29 minfree => undef,
30 maxvz => undef,
74041d68
TL
31
32 # locale
33 country => $country,
2959225b 34 timezone => 'Europe/Vienna',
b3bcf70e 35 keymap => 'en-us',
a024147b
TL
36
37 # root credentials & details
38 password => undef,
8924c145 39 mailto => 'mail@example.invalid',
8a7e31ce
TL
40
41 # network related
42 mngmt_nic => undef,
43 mngmt_nic_id => undef,
e02f38dc
TL
44 hostname => 'proxmox',
45 domain => 'example.invalid',
390889ab 46 };
74041d68
TL
47
48 # TODO add disksel$i => undef entries
49
50 return $initial;
390889ab
TL
51}
52
53# merge a $new hash into the current config, with $new taking precedence
54sub merge {
55 my ($new) = @_;
56
57 my $current = get();
58
59 for my $k (sort keys $new->%*) { # first check all
60 croak "unknown key '$k'" if !exists($current->{$k})
61 }
62 $current->{$_} = $new->{$_} for sort keys $new->%*; # then merge
63
64 return $current;
65}
66
67my $_cfg = undef; # NOTE: global singleton
68sub get {
69 my ($k) = @_;
70 $_cfg = init_cfg() if !defined($_cfg);
71 return defined($k) ? $_cfg->{$k} : $_cfg;
72}
73
74sub set_key {
75 my ($k, $v) = @_;
76 my $cfg = get();
77 croak "unknown key '$k'" if !exists($cfg->{$k});
78 $cfg->{$k} = $v;
79}
80
81sub parse_kernel_cmdline {
82 my $cfg = get();
83
84 my $cmdline = Proxmox::Install::RunEnv::get('kernel_cmdline');
85
86 if ($cmdline =~ m/\s(ext4|xfs)(\s.*)?$/) {
87 $cfg->{filesys} = $1;
88 }
89
90 if ($cmdline =~ m/hdsize=(\d+(\.\d+)?)[\s\n]/i) {
91 $cfg->{hdsize} = $1;
92 }
93
94 if ($cmdline =~ m/swapsize=(\d+(\.\d+)?)[\s\n]/i) {
95 $cfg->{swapsize} = $1;
96 }
97
98 if ($cmdline =~ m/maxroot=(\d+(\.\d+)?)[\s\n]/i) {
99 $cfg->{maxroot} = $1;
100 }
101
102 if ($cmdline =~ m/minfree=(\d+(\.\d+)?)[\s\n]/i) {
103 $cfg->{minfree} = $1;
104 }
105
106 my $iso_env = Proxmox::Install::ISOEnv::get();
107 if ($iso_env->{product} eq 'pve') {
108 if ($cmdline =~ m/maxvz=(\d+(\.\d+)?)[\s\n]/i) {
109 $cfg->{maxvz} = $1;
110 }
111 }
112
113 return $cfg;
114}
115
0a3ac982
TL
116sub set_autoreboot { set_key('autoreboot', $_[0]); }
117sub get_autoreboot { return get('autoreboot'); }
118
cd1a45ad
TL
119sub set_filesys { set_key('filesys', $_[0]); }
120sub get_filesys { return get('filesys'); }
121
a8a14c4d
TL
122sub set_hdsize { set_key('hdsize', $_[0]); }
123sub get_hdsize { return get('hdsize'); }
124
ef41b049
TL
125sub set_swapsize { set_key('swapsize', $_[0]); }
126sub get_swapsize { return get('swapsize'); }
127
b4ab3f19
TL
128sub set_maxroot { set_key('maxroot', $_[0]); }
129sub get_maxroot { return get('maxroot'); }
130
35e7bf16
TL
131sub set_minfree { set_key('minfree', $_[0]); }
132sub get_minfree { return get('minfree'); }
133
140f2e85
TL
134sub set_maxvz { set_key('maxvz', $_[0]); }
135sub get_maxvz { return get('maxvz'); }
136
74041d68
TL
137sub set_country { set_key('country', $_[0]); }
138sub get_country { return get('country'); }
139
2959225b
TL
140sub set_timezone { set_key('timezone', $_[0]); }
141sub get_timezone { return get('timezone'); }
142
b3bcf70e
TL
143sub set_keymap { set_key('keymap', $_[0]); }
144sub get_keymap { return get('keymap'); }
145
a024147b
TL
146sub set_password { set_key('password', $_[0]); }
147sub get_password { return get('password'); }
148
8924c145
TL
149sub set_mailto { set_key('mailto', $_[0]); }
150sub get_mailto { return get('mailto'); }
151
8a7e31ce
TL
152sub set_mngmt_nic { set_key('mngmt_nic', $_[0]); }
153sub get_mngmt_nic { return get('mngmt_nic'); }
154
155sub set_mngmt_nic_id { set_key('mngmt_nic_id', $_[0]); }
156sub get_mngmt_nic_id { return get('mngmt_nic_id'); }
157
e02f38dc
TL
158sub set_hostname { set_key('hostname', $_[0]); }
159sub get_hostname { return get('hostname'); }
160
161sub set_domain { set_key('domain', $_[0]); }
162sub get_domain { return get('domain'); }
163
164sub get_fqdn { # virtual config
165 my ($hostname, $domain) = (get('hostname'), get('domain'));
166 return defined($hostname) && defined($domain) ? "${hostname}.${domain}" : undef;
167}
168
390889ab 1691;