Skip to content

Commit 1a6cc73

Browse files
committed
filter roles feature improvements
1 parent 2759321 commit 1a6cc73

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

aiven_db_migrate/migrate/pgmigrate.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def __init__(
112112
self,
113113
conn_info: Union[str, Dict[str, Any]],
114114
filtered_db: Optional[str] = None,
115-
filtered_roles: Optional[str] = None,
115+
filtered_roles: Tuple[str] = ((),),
116116
mangle: bool = False
117117
):
118118
self.log = logging.getLogger(self.__class__.__name__)
@@ -131,10 +131,8 @@ def __init__(
131131
self.filtered_db = filtered_db.split(",")
132132
else:
133133
self.filtered_db = []
134-
if filtered_roles:
135-
self.filtered_roles = filtered_roles.split(",")
136-
else:
137-
self.filtered_roles = []
134+
self.filtered_roles = filtered_roles
135+
138136
if "application_name" not in self.conn_info:
139137
self.conn_info["application_name"] = f"aiven-db-migrate/{__version__}"
140138
self._mangle = mangle
@@ -328,18 +326,19 @@ def pg_lang(self) -> List[Dict[str, Any]]:
328326

329327
@property
330328
def pg_roles(self) -> Dict[str, PGRole]:
331-
filtered_roles = ["rdstopmgr"]
332-
if self.filtered_roles:
333-
filtered_roles.extend(self.filtered_roles)
334-
roles_list = ",".join(f"'{role}'" for role in filtered_roles)
335329

336330
if not self._pg_roles:
337331
# exclude system roles
338-
roles = self.c(
339-
f"SELECT quote_ident(rolname) as safe_rolname, * FROM pg_catalog.pg_roles WHERE oid > 16384 AND rolname NOT IN ({roles_list})"
340-
)
332+
roles = self.c(f"SELECT quote_ident(rolname) as safe_rolname, * FROM pg_catalog.pg_roles WHERE oid > 16384")
333+
341334
for r in roles:
342335
rolname = r["rolname"]
336+
337+
if rolname in self.filtered_roles:
338+
self.log.debug(f'Skipping filtered role: [{r["rolname"]}]')
339+
continue
340+
341+
self.log.debug(f'Migrating role: [{r["rolname"]}]')
343342
# create semi-random placeholder password for role with login
344343
rolpassword = (
345344
"placeholder_{}".format("".join(random.choices(string.ascii_lowercase, k=16)))
@@ -755,7 +754,7 @@ def __init__(
755754
verbose: bool = False,
756755
mangle: bool = False,
757756
filtered_db: Optional[str] = None,
758-
filtered_roles: Optional[str] = None,
757+
filtered_roles: Tuple[str] = ((),),
759758
skip_tables: Optional[List[str]] = None,
760759
with_tables: Optional[List[str]] = None,
761760
replicate_extensions: bool = True,
@@ -1373,6 +1372,9 @@ def main(args=None, *, prog="pg_migrate"):
13731372
else:
13741373
logging.basicConfig(level=logging.INFO, format=log_format)
13751374

1375+
if not args.filtered_roles:
1376+
args.filtered_roles = ()
1377+
13761378
pg_mig = PGMigrate(
13771379
source_conn_info=args.source,
13781380
target_conn_info=args.target,

0 commit comments

Comments
 (0)