Я отвечу на оба вопроса, приведя пример, в котором вы читаете внешний файл (файл .env), в котором хранится информация о хосте, к которому вы пытаетесь подключиться с конкретным пользователем.
info.env
content:
# The hostname of the server you want to connect to
DP_HOST=myserverAlias
# Username you use to connect to the remote server. It must be an existing user
DP_USER=bence
~/.ssh/config
contnet:
Host myserverAlias //it must be identical to the value of DP_HOST in info.env
Hostname THE_HOSTNAME_OR_THE_IP_ADDRESS
User bence //it must be identical to the value of DP_USER in info.env
Port 22
Теперь у вас fabfile.py
вы должны сделать следующее
from pathlib import Path
from fabric import Connection as connection, task
import os
from dotenv import load_dotenv
import logging as logger
from paramiko import AuthenticationException, SSHException
@task
def deploy(ctx, env=None):
logger.basicConfig(level=logger.INFO)
logger.basicConfig(format='%(name)s ----------------------------------- %(message)s')
if env is None:
logger.error("Env variable and branch name are required!, try to call it as follows : ")
exit()
# Load the env files
if os.path.exists(env):
load_dotenv(dotenv_path=env, verbose=True)
logger.info("The ENV file is successfully loaded")
else:
logger.error("The ENV is not found")
exit()
user = os.getenv("DP_USER")
host = os.getenv("DP_HOST")
try:
with connection(host=host, user=user,) as c:
c.run('whoami')
c.run('mkdir new_dir')
except AuthenticationException as message:
print(message)
except SSHException as message:
print(message)
Тогда вы можете позвонить вамfabfile.py
с помощью следующей команды:
fab deploy -e info.env
Убедитесь, что ваш info.env
находится в том же каталоге, что и ваш fabfile.py