Is there a way to create/modify connections through Airflow API

前端 未结 3 1872
醉酒成梦
醉酒成梦 2020-12-05 04:58

Going through Admin -> Connections, we have the ability to create/modify a connection\'s params, but I\'m wondering if I can do the same through API so I can

相关标签:
3条回答
  • 2020-12-05 05:31

    You can also add, delete, and list connections from the Airflow CLI if you need to do it outside of Python/Airflow code, via bash, in a Dockerfile, etc.

    airflow connections --add ...
    

    Usage:

    airflow connections [-h] [-l] [-a] [-d] [--conn_id CONN_ID]
                        [--conn_uri CONN_URI] [--conn_extra CONN_EXTRA]
                        [--conn_type CONN_TYPE] [--conn_host CONN_HOST]
                        [--conn_login CONN_LOGIN] [--conn_password CONN_PASSWORD]
                        [--conn_schema CONN_SCHEMA] [--conn_port CONN_PORT]
    

    https://airflow.apache.org/cli.html#connections

    It doesn't look like the CLI currently supports modifying an existing connection, but there is a Jira issue for it with an active open PR on GitHub.

    • AIRFLOW-2840 - cli option to update existing connection
    • https://github.com/apache/incubator-airflow/pull/3684
    0 讨论(0)
  • 2020-12-05 05:54

    Connection is actually a model which you can use to query and insert a new connection

    from airflow import settings
    from airflow.models import Connection
    conn = Connection(
            conn_id=conn_id,
            conn_type=conn_type,
            host=host,
            login=login,
            password=password,
            port=port
    ) #create a connection object
    session = settings.Session() # get the session
    session.add(conn)
    session.commit() # it will insert the connection object programmatically.
    
    0 讨论(0)
  • 2020-12-05 05:54

    First check if connection exists, after create new Connection using from airflow.models import Connection :

    def create_conn(conn_id, conn_type, host, login, password, port):
        conn = Connection(
            conn_id=conn_id,
            conn_type=conn_type,
            host=host,
            login=login,
            password=password,
            port=port
        )
        session = settings.Session()
        conn_name = session\
        .query(Connection)\
        .filter(Connection.conn_id == conn.conn_id)\
        .first()
    
        if str(conn_name) == str(conn_id):
            return logging.info(f"Connection {conn_id} already exists")
    
        session.add(conn)
        session.commit()
        logging.info(Connection.log_info(conn))
        logging.info(f'Connection {conn_id} is created')
    
    0 讨论(0)
提交回复
热议问题