def non_rds_collect_config_file(self, run_time): logger.info('[config file start]') prev_snapshot = set( ConfigFile.objects.find_versions( 'config_file', txn='latest').values_list('id', flat=True)) cur_snapshot = prev_snapshot.copy() prev_version = ConfigFile.objects.filter(id__in=prev_snapshot) for host in settings.NON_RDS_HOSTS: hostname = host.get('hostname') ssh_user = host.get('ssh_user') identity_file = host.get('identity_file') try: ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy( paramiko.AutoAddPolicy()) ssh_client.connect(hostname, username=ssh_user, key_filename=identity_file) sftp_client = ssh_client.open_sftp() temp_file = os.path.join(settings.PROJECT_ROOT, 'temp_my.cnf') if os.path.isfile(temp_file): os.remove(temp_file) sftp_client.get(settings.MYSQL_CNF_FILE_PATH, temp_file) config = ConfigParser.ConfigParser(allow_no_value=True) config.readfp(open(temp_file)) if config.has_section('mysqld'): items = dict(config.items('mysqld')) params_dict = {} for k in items.keys(): if items.get(k) is None: params_dict[k] = 'ON' else: params_dict[k] = items.get(k) new_cf = ConfigFile( name=hostname, parameters=params_dict, run_time=run_time, ) with open(temp_file) as f: new_cf.raw_content = f.read() old_cf = ConfigFile.objects.find_last(new_cf.name) if old_cf is None or old_cf.parameters is None: new_cf.save() cur_snapshot.add(new_cf.id) logger.info('[new] %s' % (new_cf.name)) elif len( ConfigFile.objects.get_changed_parameters( old_cf, new_cf)) > 0: new_cf.save() self._snapshot_updated(cur_snapshot, new_cf.id, old_cf.id) logger.info('[changed] %s' % (new_cf.name)) if os.path.isfile(temp_file): os.remove(temp_file) except Exception, e: logger.error('[error] Problem processing host %s' % (hostname)) continue
def non_rds_collect_config_file(self, run_time): logger.info('[config file start]') prev_snapshot = set(ConfigFile.objects.find_versions('config_file', txn='latest').values_list('id', flat=True)) cur_snapshot = prev_snapshot.copy() prev_version = ConfigFile.objects.filter(id__in=prev_snapshot) for host in settings.NON_RDS_HOSTS: hostname = host.get('hostname') ssh_user = host.get('ssh_user') identity_file = host.get('identity_file') try: ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(hostname, username=ssh_user, key_filename=identity_file) sftp_client = ssh_client.open_sftp() temp_file = os.path.join(settings.PROJECT_ROOT, 'temp_my.cnf') if os.path.isfile(temp_file): os.remove(temp_file) sftp_client.get(settings.MYSQL_CNF_FILE_PATH, temp_file) config = ConfigParser.ConfigParser(allow_no_value=True) config.readfp(open(temp_file)) if config.has_section('mysqld'): items = dict(config.items('mysqld')) params_dict = {} for k in items.keys(): if items.get(k) is None: params_dict[k] = 'ON' else: params_dict[k] = items.get(k) new_cf = ConfigFile( name=hostname, parameters=params_dict, run_time=run_time, ) with open(temp_file) as f: new_cf.raw_content = f.read() old_cf = ConfigFile.objects.find_last(new_cf.name) if old_cf is None or old_cf.parameters is None: new_cf.save() cur_snapshot.add(new_cf.id) logger.info('[new] %s' % (new_cf.name)) elif len(ConfigFile.objects.get_changed_parameters(old_cf, new_cf)) > 0: new_cf.save() self._snapshot_updated(cur_snapshot, new_cf.id, old_cf.id) logger.info('[changed] %s' % (new_cf.name)) if os.path.isfile(temp_file): os.remove(temp_file) except Exception, e: logger.error('[error] Problem processing host %s' % (hostname)) continue
self._snapshot_updated(cur_snapshot, new_cf.id, old_cf.id) logger.info('[changed] %s' % (new_cf.name)) if os.path.isfile(temp_file): os.remove(temp_file) except Exception, e: logger.error('[error] Problem processing host %s' % (hostname)) continue for cf in prev_version: logger.info('[delete-check] %s' % (cf.name)) g = self._find_in_hosts(cf.name, settings.NON_RDS_HOSTS) if g is None and not ConfigFile.objects.deleted(cf): del_cf = ConfigFile( name=cf.name, raw_content=cf.raw_content, parameters=None, run_time=run_time, ) del_cf.save() self._snapshot_updated(cur_snapshot, del_cf.id, cf.id) logger.info("[deleted] %s" % (del_cf.name)) logger.info('[config file end]') return prev_snapshot, cur_snapshot def non_rds_collect_db_instance(self, run_time): logger.info('[non-rds db instances start]') prev_snapshot = set( DBInstance.objects.find_versions( 'db_instance', txn='latest').filter( db_instance_type=DBInstance.HOST).values_list('id', flat=True))
new_cf.save() self._snapshot_updated(cur_snapshot, new_cf.id, old_cf.id) logger.info('[changed] %s' % (new_cf.name)) if os.path.isfile(temp_file): os.remove(temp_file) except Exception, e: logger.error('[error] Problem processing host %s' % (hostname)) continue for cf in prev_version: logger.info('[delete-check] %s' % (cf.name)) g = self._find_in_hosts(cf.name, settings.NON_RDS_HOSTS) if g is None and not ConfigFile.objects.deleted(cf): del_cf = ConfigFile( name=cf.name, raw_content=cf.raw_content, parameters=None, run_time=run_time, ) del_cf.save() self._snapshot_updated(cur_snapshot, del_cf.id, cf.id) logger.info("[deleted] %s" % (del_cf.name)) logger.info('[config file end]') return prev_snapshot, cur_snapshot def non_rds_collect_db_instance(self, run_time): logger.info('[non-rds db instances start]') prev_snapshot = set(DBInstance.objects.find_versions('db_instance', txn='latest').filter(db_instance_type=DBInstance.HOST).values_list('id', flat=True)) cur_snapshot = prev_snapshot.copy() prev_version = DBInstance.objects.filter(id__in=prev_snapshot) for host in settings.NON_RDS_HOSTS: hostname = host.get('hostname')