#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use IO::File; use File::Basename; use MediaWiki::API; use JSON; my $data_str = ""; while () { $data_str .= $_; } my $fileinfo = decode_json($data_str); my $config_fn = "/root/.pve-docs"; # format 'username:pw' my $fh = IO::File->new("$config_fn") || die "Please configure the mediawiki user/passswd in '$config_fn'\n"; my $api_url = "http://localhost/mediawiki/api.php"; my $config = <$fh>; chomp $config; my ($username, $passwd) = split(':', $config, 2); my $mw = MediaWiki::API->new(); $mw->{config}->{api_url} = $api_url; # log in to the wiki $mw->login({ lgname => $username, lgpassword => $passwd }) || die $mw->{error}->{code} . ': ' . $mw->{error}->{details}; sub update_page { my ($pagename, $include, $category) = @_; print "update mediawiki page: $pagename\n"; my $ref = $mw->get_page( { title => $pagename } ); my $page = $ref->{'*'} || ''; if ($page !~ m/^\{\{#pvedocs:.*\}\}\s*$/m) { $page = "{{#pvedocs:$include}}\n$page"; } else { $page =~ s/^\{\{#pvedocs:.*\}\}\s*$/\{\{#pvedocs:$include\}\}\n/m; } if ($category) { my $catstr = "Category:$category"; if ($page !~ m/^\[\[$catstr\]\]\s*$/m) { $page .= "\n[[$catstr]]\n"; } } my $timestamp = $ref->{timestamp}; my $wcmd = { action => 'edit', title => $pagename, basetimestamp => $timestamp, # to avoid edit conflicts text => $page, }; $mw->edit($wcmd) || die $mw->{error}->{code} . ': ' . $mw->{error}->{details}; } my $cat_refdoc = "Reference Documentation"; my $docs_old = { 'ha-manager-plain.html' => { title => "High Availability", category => $cat_refdoc, }, 'pve-installation-plain.html' => { title => "Installation", category => $cat_refdoc, }, 'pve-usbstick-plain.html' => { title => "Install from USB Stick", category => $cat_refdoc, }, 'pve-system-requirements-plain.html' => { title => "System Requirements", category => $cat_refdoc, }, 'getting-help-plain.html' => { title => "Getting Help", category => $cat_refdoc, }, 'pve-network-plain.html' => { title => "Network Configuration", category => $cat_refdoc, }, 'pve-disk-health-monitoring-plain.html' => { title => "Disk Health Monitoring", category => $cat_refdoc, }, 'local-lvm-plain.html' => { title => "Logical Volume Manager (LVM)", category => $cat_refdoc, }, 'pve-package-repos-plain.html' => { title => "Package Repositories", category => $cat_refdoc, }, 'system-software-updates-plain.html' => { title => "System Software Updates", category => $cat_refdoc, }, 'sysadmin-plain.html' => { title => "Host System Administration", category => $cat_refdoc, }, 'pct-plain.html' => { title => "Linux Container", category => $cat_refdoc, }, 'pmxcfs-plain.html' => { title => "Proxmox Cluster File System (pmxcfs)", category => $cat_refdoc, }, 'pve-bibliography-plain.html' => { title => "Bibliography", category => $cat_refdoc, }, 'pvecm-plain.html' => { title => "Cluster Manager", category => $cat_refdoc, }, 'pve-faq-plain.html' => { title => "FAQ", category => $cat_refdoc, }, 'pve-firewall-plain.html' => { title => "Firewall", category => $cat_refdoc, }, 'pvesm-plain.html' => { title => "Storage", category => $cat_refdoc, }, 'pveum-plain.html' => { title => "User Management", category => $cat_refdoc, }, 'qm-plain.html' => { title => "Qemu/KVM Virtual Machines", category => $cat_refdoc, }, 'vzdump-plain.html' => { title => "Backup and Restore", category => $cat_refdoc, }, 'qm.conf.5-plain.html' => { title => "Manual: vm.conf", category => $cat_refdoc, }, 'pct.conf.5-plain.html' => { title => "Manual: pct.conf", category => $cat_refdoc, }, 'datacenter.cfg.5-plain.html' => { title => "Manual: datacenter.cfg", category => $cat_refdoc, }, # Storage Plugins 'pve-storage-dir-plain.html' => { title => "Storage: Directory", category => $cat_refdoc, }, 'pve-storage-glusterfs-plain.html' => { title => "Storage: GlusterFS", category => $cat_refdoc, }, 'pve-storage-iscsidirect-plain.html' => { title => "Storage: User Mode iSCSI", category => $cat_refdoc, }, 'pve-storage-iscsi-plain.html' => { title => "Storage: iSCSI", category => $cat_refdoc, }, 'pve-storage-lvm-plain.html' => { title => "Storage: LVM", category => $cat_refdoc, }, 'pve-storage-lvmthin-plain.html' => { title => "Storage: LVM Thin", category => $cat_refdoc, }, 'pve-storage-nfs-plain.html' => { title => "Storage: NFS", category => $cat_refdoc, }, 'pve-storage-rbd-plain.html' => { title => "Storage: RBD", category => $cat_refdoc, }, 'pve-storage-zfspool-plain.html' => { title => "Storage: ZFS", category => $cat_refdoc, }, }; my $wiki_man5_pages = { 'datacenter.cfg.adoc' => 1, 'qm.conf.adoc' => 1, 'pct.conf.adoc' => 1, }; my $docs = {}; foreach my $source (sort keys %{$fileinfo->{toplevel}->{wiki}}) { my $title = $fileinfo->{titles}->{wiki}->{$source}; my $doctype = $fileinfo->{doctype}->{wiki}->{$source}; my $suffix = $wiki_man5_pages->{$source} ? '.5-plain.html' : '-plain.html'; my $filename = $source; $filename =~ s/\.adoc//; $filename .= $suffix; my $path = "/usr/share/pve-docs/$filename"; die "no such file '$path'" if ! -f $path; update_page($title, $filename, category => $cat_refdoc); } # also update 'Get support' page, because this is used since a long # time and is referenced from outside update_page("Get support", 'getting-help-plain.html', 'HOWTO'); __END__