]> git.proxmox.com Git - pve-installer.git/blame - Proxmox/Install/Config.pm
switch "password" 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,
390889ab 39 };
74041d68
TL
40
41 # TODO add disksel$i => undef entries
42
43 return $initial;
390889ab
TL
44}
45
46# merge a $new hash into the current config, with $new taking precedence
47sub merge {
48 my ($new) = @_;
49
50 my $current = get();
51
52 for my $k (sort keys $new->%*) { # first check all
53 croak "unknown key '$k'" if !exists($current->{$k})
54 }
55 $current->{$_} = $new->{$_} for sort keys $new->%*; # then merge
56
57 return $current;
58}
59
60my $_cfg = undef; # NOTE: global singleton
61sub get {
62 my ($k) = @_;
63 $_cfg = init_cfg() if !defined($_cfg);
64 return defined($k) ? $_cfg->{$k} : $_cfg;
65}
66
67sub set_key {
68 my ($k, $v) = @_;
69 my $cfg = get();
70 croak "unknown key '$k'" if !exists($cfg->{$k});
71 $cfg->{$k} = $v;
72}
73
74sub parse_kernel_cmdline {
75 my $cfg = get();
76
77 my $cmdline = Proxmox::Install::RunEnv::get('kernel_cmdline');
78
79 if ($cmdline =~ m/\s(ext4|xfs)(\s.*)?$/) {
80 $cfg->{filesys} = $1;
81 }
82
83 if ($cmdline =~ m/hdsize=(\d+(\.\d+)?)[\s\n]/i) {
84 $cfg->{hdsize} = $1;
85 }
86
87 if ($cmdline =~ m/swapsize=(\d+(\.\d+)?)[\s\n]/i) {
88 $cfg->{swapsize} = $1;
89 }
90
91 if ($cmdline =~ m/maxroot=(\d+(\.\d+)?)[\s\n]/i) {
92 $cfg->{maxroot} = $1;
93 }
94
95 if ($cmdline =~ m/minfree=(\d+(\.\d+)?)[\s\n]/i) {
96 $cfg->{minfree} = $1;
97 }
98
99 my $iso_env = Proxmox::Install::ISOEnv::get();
100 if ($iso_env->{product} eq 'pve') {
101 if ($cmdline =~ m/maxvz=(\d+(\.\d+)?)[\s\n]/i) {
102 $cfg->{maxvz} = $1;
103 }
104 }
105
106 return $cfg;
107}
108
0a3ac982
TL
109sub set_autoreboot { set_key('autoreboot', $_[0]); }
110sub get_autoreboot { return get('autoreboot'); }
111
cd1a45ad
TL
112sub set_filesys { set_key('filesys', $_[0]); }
113sub get_filesys { return get('filesys'); }
114
a8a14c4d
TL
115sub set_hdsize { set_key('hdsize', $_[0]); }
116sub get_hdsize { return get('hdsize'); }
117
ef41b049
TL
118sub set_swapsize { set_key('swapsize', $_[0]); }
119sub get_swapsize { return get('swapsize'); }
120
b4ab3f19
TL
121sub set_maxroot { set_key('maxroot', $_[0]); }
122sub get_maxroot { return get('maxroot'); }
123
35e7bf16
TL
124sub set_minfree { set_key('minfree', $_[0]); }
125sub get_minfree { return get('minfree'); }
126
140f2e85
TL
127sub set_maxvz { set_key('maxvz', $_[0]); }
128sub get_maxvz { return get('maxvz'); }
129
74041d68
TL
130sub set_country { set_key('country', $_[0]); }
131sub get_country { return get('country'); }
132
2959225b
TL
133sub set_timezone { set_key('timezone', $_[0]); }
134sub get_timezone { return get('timezone'); }
135
b3bcf70e
TL
136sub set_keymap { set_key('keymap', $_[0]); }
137sub get_keymap { return get('keymap'); }
138
a024147b
TL
139sub set_password { set_key('password', $_[0]); }
140sub get_password { return get('password'); }
141
390889ab 1421;