コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
0
                        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))
コード例 #4
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
                 
     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')