Fabric:如何提示用户在env.roledefs中定义的主机之间输入?

时间:2014-01-21 13:22:39

标签: python fabric

在部署到生产环境时,我想在每台服务器之后暂停,以检查在Fabric继续到下一台服务器之前,部署是否按计划在THAT ONE SERVER上进行。

这是我定义角色的方式:

 def dev():
     """Development Environment
     """
     env.environment='dev'
     env.roledefs = {
            'backend': ['dev_back1', 'dev_back2'],
            'fronts': ['dev_front1','dev_front2','dev_front3']
            }

 def stage():
     """Stage Environment
     """
     env.environment='stage'
     env.roledefs = {
             'backend': ['stage_back1', 'stage_back2'],
             'fronts': ['stage_front1','stage_front2','stage_front3']
             }


 def prod():
     """Production Environment
     """
     env.environment='prod'
     env.roledefs = {
             'backend': ['prod_back1', 'prod_back2'],
             'fronts': ['prod_front1','prod_front2','prod_front3']
             }

就像它在生产环境中的所有服务器上执行一样,我确实希望管理员和Fabric之间进行交互。

喜欢这样:

prod_front1已完成,您是否希望继续使用prod_front2?

当完成时:

prod_front2完成了,你想继续prod_front3吗?

1 个答案:

答案 0 :(得分:1)

这样可行,但肯定不是最好的:

def deploy_this_server()

    do_deployment_stuff()

    answer = query_user_function("Server done. Continue to next server?")

    if answer == "no":
        sys.exit()

front_machines = env.roledefs ['fronts']

对于front_machines中的front_machine

    env.host_string = front_machine

    deploy_this_server()