**Description**

Expose the connection into the jinja template context via `conn.value.<connectionname>.{host,port,login,password,extra_config,etc}`

Today is possible to conveniently access [airflow's variables](https://airflow.apache.org/docs/apache-airflow/stable/concepts.html#variables) in jinja templates using `{{ var.value.<variable_name> }}`. 

There is no equivalent (to my knowledge for [connections](https://airflow.apache.org/docs/apache-airflow/stable/concepts.html#connections)), I understand that most of the time connection are used programmatically in Operators and Hooks source code, but there are use cases where the connection info has to be pass as parameters to the operators and then it becomes cumbersome to do it without jinja template syntax.

I seen workarounds like using [user defined macros to provide get_login(my_conn_id)](https://stackoverflow.com/questions/65826404/use-airflow-connection-from-a-jinja-template/65873023#65873023
), but I'm after a consistent interface for accessing both variables and connections in the same way


**Workaround**
The following `user_defined_macro` (from my [stackoverflow answer](https://stackoverflow.com/a/66471911/90580)) provides the suggested syntax `connection.mssql.host` where `mssql` is the connection name: 

```
   class ConnectionGrabber:
       def __getattr__(self, name):
           return  Connection.get_connection_from_secrets(name)
dag = DAG( user_defined_macros={'connection': ConnectionGrabber()}, ...)
 task = BashOperator(task_id='read_connection', bash_command='echo {{connection.mssql.host }}', dag=dag)
```

This macro can be added to each DAG individually or to all DAGs via an Airflow's Plugin. What I suggest is to make this macro part of the default. 

**Use case / motivation**

For example, passing credentials to a [KubernetesPodOperator](https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/stable/operators.html#howto-operator-kubernetespodoperator) via [env_vars](https://cloud.google.com/composer/docs/how-to/using/using-kubernetes-pod-operator) today has to be done like this: 

```
connection = Connection.get_connection_from_secrets('somecredentials')
k = KubernetesPodOperator(
  task_id='task1', 
  env_vars={'MY_VALUE': '{{ var.value.my_value }}', 'PWD': conn.password,},
  )
```
where I would prefer to use consistent syntax for both variables and connections like this: 
```
# not needed anymore: connection = Connection.get_connection_from_secrets('somecredentials')
k = KubernetesPodOperator(
  task_id='task1', 
  env_vars={'MY_VALUE': '{{ var.value.my_value }}', 'PWD':  '{{ conn.somecredentials.password }}',},
  )
```

The same applies to `BashOperator` where I sometimes feel the need to pass connection information to the templated script.

**Are you willing to submit a PR?**

yes, I can write the PR.

**Related Issues**


airflow/models/taskinstance.py
"""
        Refreshes the task instance from the database based on the primary key
        :param session: SQLAlchemy ORM Session
        :type session: Session
        :param lock_for_update: if True, indicates that the database should
            lock the TaskInstance (issuing a FOR UPDATE clause) until the
            session is committed.
        :type lock_for_update: bool
        """
        self.log.debug("Refreshing TaskInstance %s from DB", self)
        qry = session.query(TaskInstance).filter(
            TaskInstance.dag_id == self.dag_id,
            TaskInstance.task_id == self.task_id,
            TaskInstance.execution_date == self.execution_date,
        )
        if lock_for_update:
            ti = qry.with_for_update().first()
        else:
            ti = qry.first()
        if ti:
            
            self.start_date = ti.start_date
            self.end_date = ti.end_date
            self.duration = ti.duration
            self.state = ti.state
            
            
            self.try_number = ti._try_number
            self.max_tries = ti.max_tries
            self.hostname = ti.hostname