9e3ced0797a6fbeab4818600bcaa07e6bfc4ad44
[pve-docs.git] / doc-debian / pve-docs-mediawiki-import
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6
7 use IO::File;
8 use File::Basename;
9 use MediaWiki::API;
10
11 my $config_fn = "/root/.pve-docs"; # format 'username:pw'
12
13 my $fh = IO::File->new("$config_fn") ||
14 die "Please configure the mediawiki user/passswd in '$config_fn'\n";
15
16 my $api_url = "http://localhost/api.php";
17
18 my $config = <$fh>;
19 chomp $config;
20
21 my ($username, $passwd) = split(':', $config, 2);
22
23 my $mw = MediaWiki::API->new();
24 $mw->{config}->{api_url} = $api_url;
25
26 # log in to the wiki
27 $mw->login({ lgname => $username, lgpassword => $passwd })
28 || die $mw->{error}->{code} . ': ' . $mw->{error}->{details};
29
30 sub update_page {
31 my ($pagename, $include, $category) = @_;
32
33 print "update mediawiki page: $pagename\n";
34
35 my $ref = $mw->get_page( { title => $pagename } );
36 my $page = $ref->{'*'} || '';
37
38 if ($page !~ m/^\{\{#pvedocs:.*\}\}\s*$/m) {
39 $page = "{{#pvedocs:$include}}\n$page";
40 } else {
41 $page =~ s/^\{\{#pvedocs:.*\}\}\s*$/\{\{#pvedocs:$include\}\}\n/m;
42 }
43
44 if ($category) {
45 my $catstr = "Category:$category";
46
47 if ($page !~ m/^\[\[$catstr\]\]\s*$/m) {
48 $page .= "\n[[$catstr]]\n";
49 }
50 }
51
52 my $timestamp = $ref->{timestamp};
53 my $wcmd = {
54 action => 'edit',
55 title => $pagename,
56 basetimestamp => $timestamp, # to avoid edit conflicts
57 text => $page,
58 };
59
60 $mw->edit($wcmd) ||
61 die $mw->{error}->{code} . ': ' . $mw->{error}->{details};
62 }
63
64 my $cat_refdoc = "Reference Documentation";
65
66 my $docs = {
67 'chapter-ha-manager-plain.html' => {
68 title => "High Availability",
69 category => $cat_refdoc,
70 },
71 'chapter-sysadmin-plain.html' => {
72 title => "Host System Administration",
73 category => $cat_refdoc,
74 },
75 'chapter-pct-plain.html' => {
76 title => "Linux Container",
77 category => $cat_refdoc,
78 },
79 'chapter-pmxcfs-plain.html' => {
80 title => "Proxmox Cluster File System (pmxcfs)",
81 category => $cat_refdoc,
82 },
83 'chapter-pve-bibliography-plain.html' => {
84 title => "Bibliography",
85 category => $cat_refdoc,
86 },
87 'chapter-pvecm-plain.html' => {
88 title => "Cluster Manager",
89 category => $cat_refdoc,
90 },
91 'chapter-pve-faq-plain.html' => {
92 title => "FAQ",
93 category => $cat_refdoc,
94 },
95 'chapter-pve-firewall-plain.html' => {
96 title => "Firewall",
97 category => $cat_refdoc,
98 },
99 'chapter-pvesm-plain.html' => {
100 title => "Storage",
101 category => $cat_refdoc,
102 },
103 'chapter-pveum-plain.html' => {
104 title => "User Management",
105 category => $cat_refdoc,
106 },
107 'chapter-qm-plain.html' => {
108 title => "Qemu/KVM Virtual Machines",
109 category => $cat_refdoc,
110 },
111 'chapter-vzdump-plain.html' => {
112 title => "Backup and Restore",
113 category => $cat_refdoc,
114 },
115 'qm.conf.5-plain.html' => {
116 title => "Manual: vm.conf",
117 category => $cat_refdoc,
118 },
119 'pct.conf.5-plain.html' => {
120 title => "Manual: pct.conf",
121 category => $cat_refdoc,
122 },
123 'datacenter.cfg.5-plain.html' => {
124 title => "Manual: datacenter.cfg",
125 category => $cat_refdoc,
126 },
127 # Storage Plugins
128 'pve-storage-dir-plain.html' => {
129 title => "Storage: Directory",
130 category => $cat_refdoc,
131 },
132 'pve-storage-glusterfs-plain.html' => {
133 title => "Storage: GlusterFS",
134 category => $cat_refdoc,
135 },
136 'pve-storage-iscsidirect-plain.html' => {
137 title => "Storage: User Mode iSCSI",
138 category => $cat_refdoc,
139 },
140 'pve-storage-iscsi-plain.html' => {
141 title => "Storage: iSCSI",
142 category => $cat_refdoc,
143 },
144 'pve-storage-lvm-plain.html' => {
145 title => "Storage: LVM",
146 category => $cat_refdoc,
147 },q
148 'pve-storage-lvmthin-plain.html' => {
149 title => "Storage: LVM Thin",
150 category => $cat_refdoc,
151 },
152 'pve-storage-nfs-plain.html' => {
153 title => "Storage: NFS",
154 category => $cat_refdoc,
155 },
156 'pve-storage-rbd-plain.html' => {
157 title => "Storage: RBD",
158 category => $cat_refdoc,
159 },
160 'pve-storage-zfspool-plain.html' => {
161 title => "Storage: ZFS",
162 category => $cat_refdoc,
163 },
164 };
165
166 #update_page("testpage1", $filename, $d->{category});
167
168 foreach my $filename (keys %$docs) {
169 my $path = "/usr/share/pve-docs/$filename";
170 die "no such file '$path'" if ! -f $path;
171 my $d = $docs->{$filename};
172 update_page($d->{title}, $filename, $d->{category});
173 }