faire le backup xen-metadata avec une clef ssh plutôt qu'avec le mdp
This commit is contained in:
		
							parent
							
								
									c08bbd165b
								
							
						
					
					
						commit
						f624d28f28
					
				@ -20,57 +20,53 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import shutil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import datetime
 | 
					 | 
				
			||||||
import base64
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
from common import *
 | 
					from common import *
 | 
				
			||||||
 | 
					import paramiko
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class backup_xcp_metadata(backup_generic):
 | 
					class backup_xcp_metadata(backup_generic):
 | 
				
			||||||
    """Backup metatdata of a xcp pool using xe pool-dump-database"""
 | 
					    """Backup metatdata of a xcp pool using xe pool-dump-database"""
 | 
				
			||||||
    type = 'xcp-dump-metadata'    
 | 
					    type = 'xcp-dump-metadata'    
 | 
				
			||||||
    required_params = ['type','server_name','password_file','backup_name']
 | 
					    required_params = ['type','server_name','private_key','backup_name']
 | 
				
			||||||
 | 
					    optional_params = backup_generic.optional_params + ['ssh_port']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ssh_port = 22
 | 
				
			||||||
    def do_backup(self,stats):
 | 
					    def do_backup(self,stats):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.logger.debug('[%s] Connecting to %s with user root and key %s',self.backup_name,self.server_name,self.private_key)
 | 
					        self.logger.debug('[%s] Connecting to %s with user root and key %s',self.backup_name,self.server_name,self.private_key)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    	if os.path.isfile('/opt/xensource/bin/xe') == False:
 | 
					 | 
				
			||||||
    	    raise Exception('Aborting, /opt/xensource/bin/xe binary not present"')
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        t = datetime.datetime.now()
 | 
					        t = datetime.datetime.now()
 | 
				
			||||||
        backup_start_date = t.strftime('%Y%m%d-%Hh%Mm%S')
 | 
					        backup_start_date = t.strftime('%Y%m%d-%Hh%Mm%S')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # dump pool medatadata
 | 
					        # dump pool medatadata
 | 
				
			||||||
        localpath = os.path.join(self.backup_dir ,  'xcp_metadata-' + backup_start_date + '.dump.gz')
 | 
					        localpath = os.path.join(self.backup_dir ,  'xcp_metadata-' + backup_start_date + '.dump')
 | 
				
			||||||
        temppath = '/tmp/xcp_metadata-' + backup_start_date + '.dump'
 | 
					        try:
 | 
				
			||||||
 | 
					            mykey = paramiko.RSAKey.from_private_key_file(self.private_key)
 | 
				
			||||||
 | 
					        except paramiko.SSHException:
 | 
				
			||||||
 | 
					            mykey = paramiko.DSSKey.from_private_key_file(self.private_key)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.ssh = paramiko.SSHClient()
 | 
				
			||||||
 | 
					        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 | 
				
			||||||
 | 
					        self.ssh.connect(self.server_name,username='root',pkey = mykey, port=self.ssh_port)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        stats['status']='Dumping'
 | 
					        stats['status']='Dumping'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        if not self.dry_run:
 | 
					        if not self.dry_run:
 | 
				
			||||||
            cmd = "/opt/xensource/bin/xe -s %s -pwf %s pool-dump-database file-name=%s" %(self.server_name,self.password_file,temppath)
 | 
					            cmd = "/opt/xensource/bin/xe pool-dump-database file-name="
 | 
				
			||||||
            self.logger.debug('[%s] Dump XCP Metadata : %s',self.backup_name,cmd)
 | 
					            self.logger.debug('[%s] Dump XCP Metadata : %s', self.backup_name, cmd)
 | 
				
			||||||
            call_external_process(cmd)
 | 
					            (error_code, output) = ssh_exec(cmd, ssh=self.ssh)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            with open(localpath,"w") as f:
 | 
				
			||||||
 | 
					                f.write(output)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # zip the file
 | 
					        # zip the file
 | 
				
			||||||
        stats['status']='Zipping'
 | 
					        stats['status']='Zipping'
 | 
				
			||||||
        cmd = 'gzip %s '  %temppath
 | 
					        cmd = 'gzip %s '  % localpath
 | 
				
			||||||
        self.logger.debug('[%s] Compress backup : %s',self.backup_name,cmd)
 | 
					        self.logger.debug('[%s] Compress backup : %s',self.backup_name,cmd)
 | 
				
			||||||
        if not self.dry_run:
 | 
					        if not self.dry_run:
 | 
				
			||||||
            call_external_process(cmd)
 | 
					            call_external_process(cmd)
 | 
				
			||||||
 | 
					        localpath += ".gz"
 | 
				
			||||||
        # get the file
 | 
					 | 
				
			||||||
        stats['status']='move to backup directory'
 | 
					 | 
				
			||||||
        self.logger.debug('[%s] Moving temp backup file %s to backup new path %s',self.backup_name,self.server_name,localpath)
 | 
					 | 
				
			||||||
        if not self.dry_run:
 | 
					 | 
				
			||||||
            shutil.move (temppath + '.gz' ,localpath)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if not self.dry_run:
 | 
					        if not self.dry_run:
 | 
				
			||||||
            stats['total_files_count']=1
 | 
					            stats['total_files_count']=1
 | 
				
			||||||
            stats['written_files_count']=1
 | 
					            stats['written_files_count']=1
 | 
				
			||||||
 | 
				
			|||||||
@ -76,18 +76,24 @@ maximum_backup_age=30
 | 
				
			|||||||
;db_user=root
 | 
					;db_user=root
 | 
				
			||||||
;db_passwd=
 | 
					;db_passwd=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;[[backup_sql_srvintranet]]
 | 
					;[backup_sql_srvintranet]
 | 
				
			||||||
;[type=sqlserver+ssh]
 | 
					;type=sqlserver+ssh
 | 
				
			||||||
;[server_name=srvintranet  ]
 | 
					;server_name=srvintranet
 | 
				
			||||||
;[private_key=/root/.ssh/id_dsa]
 | 
					;private_key=/root/.ssh/id_dsa
 | 
				
			||||||
;[db_name=testbackup]
 | 
					;db_name=testbackup
 | 
				
			||||||
;[db_user=sa]
 | 
					;db_user=sa
 | 
				
			||||||
;[db_password=xxx]
 | 
					;db_password=xxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;[debian-ovf]]
 | 
					;[debian-ovf]
 | 
				
			||||||
;[type=esx-vmdk]
 | 
					;type=esx-vmdk
 | 
				
			||||||
;[server_name=debian]
 | 
					;server_name=debian
 | 
				
			||||||
;[esxhost=192.168.149.213]
 | 
					;esxhost=192.168.149.213
 | 
				
			||||||
;[password_file=/etc/.esx_passwd]
 | 
					;password_file=/etc/.esx_passwd
 | 
				
			||||||
;[create_ovafile=yes]
 | 
					;create_ovafile=yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;[srvxen1-metadata]
 | 
				
			||||||
 | 
					;type=xcp-dump-metadata
 | 
				
			||||||
 | 
					;server_name=srvxen1
 | 
				
			||||||
 | 
					;private_key=/root/.ssh/id_dsa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user