9e3ced0797a6fbeab4818600bcaa07e6bfc4ad44
[pve-docs.git] / debian / tree / pve-docs-mediawiki / 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 }