계정 만들어서 테스트 하다가 오너를 분명 다른 계정으로 해놨는데 나오길래 찾아보니 filter_by_owner 설정을 하면 된다고 하길래 설정에서 찾아보니 없음...
2버전에서는 없어졌다고 한다.
role설정으로 처리가 가능하겠지 했는데 해당 role에 DAG를 하나씩 넣어줘야 해서 사람 할 짓이 아닌 거 같았다. API로 자동화를 할까 했다가 너무 비효율적이라서 그냥 소스 수정하기로 함.
버전에 맞게 에어플로우 저장소에서 가져와도 되긴 하는데, 혹시나 해서 실제 쓰는 걸 가져오기로 함.
airflow k8s helm으로 설치를 한 거라 webserver pod 들어가서 찾아봄.
/home/airflow/.local/lib/python3.7/site-packages/airflow/www/views.py
내 경우에는 여기에 있었다. 일단 호스트로 가져옴.
kubectl cp -n airflow airflow-webserver-???:/home/airflow/.local/lib/python3.7/site-packages/airflow/www/views.py {복사할 경로}/views.py
대략 이 부분이 조회 조건이 쓰는 곳으로 보였다.
with create_session() as session:
# read orm_dags from the db
dags_query = session.query(DagModel).filter(~DagModel.is_subdag, DagModel.is_active)
if arg_search_query:
escaped_arg_search_query = arg_search_query.replace("_", r"\_")
dags_query = dags_query.filter(
DagModel.dag_id.ilike("%" + escaped_arg_search_query + "%", escape="\\")
| DagModel.owners.ilike("%" + escaped_arg_search_query + "%", escape="\\")
)
if arg_tags_filter:
dags_query = dags_query.filter(DagModel.tags.any(DagTag.name.in_(arg_tags_filter)))
접속 중인 사용자를 조건으로 넣어야 해서 소스를 좀 보니까 g.user에 접속자 정보가 있는 거 같았다.
admin은 전부 봐야 하니까, admin이 아니면 자기꺼만 나오게 추가
if g.user.username != 'admin':
dags_query = dags_query.filter(DagModel.owners.ilike(g.user.username, escape="\\"))
이걸 도커이미지에 있는 views.py랑 바꿔치기 해야 하니까 도커파일에 COPY 추가
COPY views.py /home/airflow/.local/lib/python3.7/site-packages/airflow/www/views.py
버전 바꾸고 빌드 다시 함.
docker build --pull --tag airflow-qa-pip-image:0.0.3 .
docker tag airflow-qa-pip-image:0.0.3 {저장소 주소}/airflow-qa-pip-image:0.0.3
docker push {저장소 주소}/airflow-qa-pip-image:0.0.3
values.yaml 적용
helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml
잘 된다.
내 경우에는 2.6.1버전이었는데, 예전 버전들 봐도 크게 다르지는 않은 거 같아서 참고해서 수정하면 될 거 같음.
반응형