def db_upgrade_003_004(): engine = anchore_engine.db.entities.common.get_engine() from anchore_engine.db import db_catalog_image, db_archivedocument, session_scope import anchore_engine.common newcolumns = [ Column('arch', String, primary_key=False), Column('distro', String, primary_key=False), Column('distro_version', String, primary_key=False), Column('dockerfile_mode', String, primary_key=False), Column('image_size', BigInteger, primary_key=False), Column('layer_count', Integer, primary_key=False) ] for column in newcolumns: try: table_name = 'catalog_image' cn = column.compile(dialect=engine.dialect) ct = column.type.compile(engine.dialect) engine.execute('ALTER TABLE %s ADD COLUMN IF NOT EXISTS %s %s' % (table_name, cn, ct)) except Exception as e: log.err('failed to perform DB upgrade on catalog_image adding column - exception: {}'.format(str(e))) raise Exception('failed to perform DB upgrade on catalog_image adding column - exception: {}'.format(str(e))) with session_scope() as dbsession: image_records = db_catalog_image.get_all(session=dbsession) for image_record in image_records: userId = image_record['userId'] imageDigest = image_record['imageDigest'] log.err("upgrade: processing image " + str(imageDigest) + " : " + str(userId)) try: # get the image analysis data from archive image_data = None with session_scope() as dbsession: result = db_archivedocument.get(userId, 'analysis_data', imageDigest, session=dbsession) if result and 'jsondata' in result: image_data = json.loads(result['jsondata'])['document'] if image_data: # update the record and store anchore_engine.common.helpers.update_image_record_with_analysis_data(image_record, image_data) with session_scope() as dbsession: db_catalog_image.update_record(image_record, session=dbsession) else: raise Exception("upgrade: no analysis data found in archive for image: " + str(imageDigest)) except Exception as err: log.err("upgrade: failed to populate new columns with existing data for image (" + str(imageDigest) + "), record may be incomplete: " + str(err)) return True
def db_upgrade_001_002(): global engine from anchore_engine.db import db_anchore, db_users, db_registries, db_policybundle, db_catalog_image try: table_name = 'registries' column = Column('registry_type', String, primary_key=False) cn = column.compile(dialect=engine.dialect) ct = column.type.compile(engine.dialect) engine.execute('ALTER TABLE %s ADD COLUMN IF NOT EXISTS %s %s' % (table_name, cn, ct)) with session_scope() as dbsession: registry_records = db_registries.get_all(session=dbsession) for registry_record in registry_records: try: if not registry_record['registry_type']: registry_record['registry_type'] = 'docker_v2' db_registries.update_record(registry_record, session=dbsession) except Exception as err: pass except Exception as err: raise Exception( "failed to perform DB registry table upgrade - exception: " + str(err)) try: table_name = 'policy_bundle' column = Column('policy_source', String, primary_key=False) cn = column.compile(dialect=engine.dialect) ct = column.type.compile(engine.dialect) engine.execute('ALTER TABLE %s ADD COLUMN IF NOT EXISTS %s %s' % (table_name, cn, ct)) with session_scope() as dbsession: policy_records = db_policybundle.get_all(session=dbsession) for policy_record in policy_records: try: if not policy_record['policy_source']: policy_record['policy_source'] = 'local' db_policybundle.update_record(policy_record, session=dbsession) except Exception as err: pass except Exception as err: raise Exception( "failed to perform DB policy_bundle table upgrade - exception: " + str(err)) if False: try: table_name = 'catalog_image' column = Column('image_content_metadata', String, primary_key=False) cn = column.compile(dialect=engine.dialect) ct = column.type.compile(engine.dialect) engine.execute('ALTER TABLE %s ADD COLUMN IF NOT EXISTS %s %s' % (table_name, cn, ct)) with session_scope() as dbsession: image_records = db_catalog_image.get_all(session=dbsession) for image_record in image_records: try: if not image_record['image_content_metadata']: image_record[ 'image_content_metadata'] = json.dumps({}) db_catalog_image.update_record(image_record, session=dbsession) except Exception as err: pass except Exception as err: raise Exception( "failed to perform DB catalog_image table upgrade - exception: " + str(err)) return (True)