class Synology < Oxidized::Model using Refinements #Synology DSM 6.x/7.x # You will need to set this variables to do a more efficient backup. # vars: # enable: true # selfcopy: true # bkppath_local: /volume1/local_backup # bkpsvr: server_ip # bkppath_ftp: folder # bkpusr: username # bkppwd: password prompt /[a-zA-Z0-9-]+@[a-zA-Z0-9-]+[:].[$|#]/ comment '# ' # replace all used vt100 control sequences expect /\e\[\??\d+(;\d+)*[A-Za-z]/ do |data, re| data.gsub re, '' end cmd :all do |cfg| # always remove first/last line cfg.cut_both end pre do cfg = cmd 'awk \'{printf "%-13s : %s\n", "hostname", $0}\' /etc/hostname 2>/dev/null' cfg += cmd 'awk \'{printf "%-13s : %s\n", "model", $0}\' /proc/sys/kernel/syno_hw_version 2>/dev/null' cfg += cmd 'awk \'{printf "%-13s : %s\n", "serial number", $0}\' /proc/sys/kernel/syno_serial 2>/dev/null' cfg += cmd 'awk \'{printf "%-13s : %s\n", "machine-id", $0}\' /etc/machine-id 2>/dev/null' cfg += cmd 'awk \'/Hardware/ {print $0; exit}\' /proc/cpuinfo 2>/dev/null' cfg += cmd 'awk \'/model name|Processor/ {print $0; exit}\' /proc/cpuinfo 2>/dev/null' cfg += cmd 'awk \'/MemTotal/ { unit="Go"; coef=$2/1000000; if ($2<1000000) {unit="Mo"; coef=$2/1000}; printf "%-13s : %.1f %s\n", "ram", coef, unit}\' /proc/meminfo 2>/dev/null' cfg += cmd 'synodisk --enum | awk \'/Disk model/ {count++; sub(/^>.*: /, ""); printf "%-13s : %s\n", "disk model "count, $0}\' 2>/dev/null' cfg += cmd 'synodisk --enum -t cache | awk \'/Disk model/ {count++; sub(/^>.*: /, ""); printf "%-13s : %s\n", "disk cache "count, $0}\' 2>/dev/null' cfg += cmd 'awk \'{count++; printf "%-13s : %s\n", "mac address "count, $0}\' /proc/sys/kernel/syno_mac_addresses 2>/dev/null' comment "\n ### Hardware ###\n\n#{cfg}" end cmd 'awk -F \" \'/productversion|os_name|buildphase|buildnumber|builddate/ {sub(/=/,""); printf "%-14s : %s\n", $1, $2}\' /etc/VERSION 2>/dev/null | sort' do |cfg| comment "\n ### DSM version ###\n\n#{cfg}" end cmd 'cat /etc/synoinfo.conf 2>/dev/null' do |cfg| comment "\n ### System basic config ###\n\n#{cfg}" end cmd 'cat /etc/motd 2>/dev/null' do |cfg| comment "\n ### Motd ###\n\n#{cfg}" end post do if vars(:enable) == true if vars(:selfcopy) == true #Local backup cfg = cmd "if [ -d #{vars(:bkppath_local)} ]; then mkdir -p #{vars(:bkppath_local)}; chmod 755 #{vars(:bkppath_local)}; fi; mv -f #{vars(:bkppath_local)}/#{node.name}.dss #{vars(:bkppath_local)}/#{node.name}.old 2>/dev/null" cfg += cmd "/usr/syno/bin/synoconfbkp export --filepath=#{vars(:bkppath_local)}/#{node.name}.dss" #Distant server backup cfg += cmd "/bin/lftp -u #{vars(:bkpusr)},#{vars(:bkppwd)} -e \"""put #{vars(:bkppath_local)}/#{node.name}.dss -o #{vars(:bkppath_ftp)}/; quit""\" #{vars(:bkpsvr)}" #normalize linefeeds cfg.gsub! /(\r|\r\n|\n\r|\n\n|\r\r)/, "\n" comment "\n ### Backup on local and server ###\n\n#{cfg}" end end end cfg :ssh do post_login do if vars(:enable) == true cmd "sudo su -", /Password/ cmd @node.auth[:password] end end #Oxidized scp copy: not working yet # if vars(:oxcopy) == true # cmd "#{vars(:bkppath_local)}/#{node.name}.dss" # cfg :scp do # end # end pre_logout do cmd "exit" if vars(:enable) end pre_logout 'exit' end end