Python Fabric 部署脚本结构和语义
Python Fabric deploy script structure and semantics
我正在尝试编写一个基本的 Python Fabric 部署脚本,我有一些初学者级别的问题。
这是我目前的 fabfile.py
(从这个 example 修改而来):
#!/usr/bin/env python
from fabric.api import *
import socket
import paramiko
env.roledefs = {'dev':['server.domain.tld']}
@task
@roles("dev")
def print_contents():
echo("Printing working directory contents:\n")
run("ls")
@task
@roles("dev")
def update_upgrade():
""" Update the default OS installation's basic default tools. """
sudo("sudo apt-get update")
sudo("apt-get -y upgrade")
@task
@roles("dev")
def install_memcached():
""" Download and install memcached. """
sudo("apt-get install -y memcached")
@task
@roles("dev")
def deploy():
print_contents()
# Update
update_upgrade()
# Install
install_memcached()
问题:
- 我需要
import socket
和 import paramiko
吗?
- 我不打算直接调用函数
print_contents()
、update_upgrade()
和 install_memcached()
- 它们只会在 deploy()
函数中调用。每个函数都需要成为 @task
装饰器的任务吗?
- 由于这是一个 Fabric 部署脚本,是否需要调用最终任务
deploy()
?或者我们可以为该函数使用任何其他名称,例如。 update_all()
?
- 您不需要为此脚本导入
socket
和paramiko
,因为您不是直接从您的fabfile 调用它们。
@task
装饰器仅用于您希望在命令行上作为结构任务使用的功能。在您提供的示例中,您只需要修饰 deploy
函数。
When this decorator is used, it signals to Fabric that only functions wrapped in the decorator are to be loaded up as valid tasks.
- 你可以用任何你喜欢的名字! Fabric 将使用您的函数名称作为任务名称,除非您使用 alias argument.
有关所有这些的更多信息,请参阅 docs for the task decorator。
我正在尝试编写一个基本的 Python Fabric 部署脚本,我有一些初学者级别的问题。
这是我目前的 fabfile.py
(从这个 example 修改而来):
#!/usr/bin/env python
from fabric.api import *
import socket
import paramiko
env.roledefs = {'dev':['server.domain.tld']}
@task
@roles("dev")
def print_contents():
echo("Printing working directory contents:\n")
run("ls")
@task
@roles("dev")
def update_upgrade():
""" Update the default OS installation's basic default tools. """
sudo("sudo apt-get update")
sudo("apt-get -y upgrade")
@task
@roles("dev")
def install_memcached():
""" Download and install memcached. """
sudo("apt-get install -y memcached")
@task
@roles("dev")
def deploy():
print_contents()
# Update
update_upgrade()
# Install
install_memcached()
问题:
- 我需要
import socket
和import paramiko
吗? - 我不打算直接调用函数
print_contents()
、update_upgrade()
和install_memcached()
- 它们只会在deploy()
函数中调用。每个函数都需要成为@task
装饰器的任务吗? - 由于这是一个 Fabric 部署脚本,是否需要调用最终任务
deploy()
?或者我们可以为该函数使用任何其他名称,例如。update_all()
?
- 您不需要为此脚本导入
socket
和paramiko
,因为您不是直接从您的fabfile 调用它们。 @task
装饰器仅用于您希望在命令行上作为结构任务使用的功能。在您提供的示例中,您只需要修饰deploy
函数。
When this decorator is used, it signals to Fabric that only functions wrapped in the decorator are to be loaded up as valid tasks.
- 你可以用任何你喜欢的名字! Fabric 将使用您的函数名称作为任务名称,除非您使用 alias argument.
有关所有这些的更多信息,请参阅 docs for the task decorator。