How can I properly set the `env.hosts` in a function in my Python Fabric `fabfile.py`?

前端 未结 5 977
挽巷
挽巷 2021-01-11 23:08

When I run this fabfile.py...

from fabric.api import env, run, local, cd

def setenv(foo):
  env.hosts = [\'myhost\']

def mycmd(foo):
  setenv(         


        
5条回答
  •  萌比男神i
    2021-01-11 23:48

    I know this question is super old, but just in case someone stumbles across this, I have found that you don't need to call this as a fab file per se (your file doesn't need to be called "fabfile.py" and command doesn't need to be fab setenv(foo) mycmd(bar). Since you are importing the needed fab elements, you can call the file anything you want (let's call it "testfile.py") and simply use the execute function in the file. That would make your command python testfile.py.

    Inside the testfile, set everything up like you would normally, but start the function using the execute keyword. Your file would look something like this:

    from fabric.api import env, run
    
    def setenv(foo):
        env.hosts = ['myhost']
        execute(mycmd, bar)
    
    def mycmd(bar):
        run('ls')
    
    setenv(foo)
    

    ** It's important to note that the execute command does look like a regular function call. It will call the function and send the arguments in a single comma separated line. You can find more information here

    So you'd start your program which would first call setenv, then setenv would execute the mycmd function. With this, you can also set multiple hosts within the same array. Something like:

    env.hosts=['myhost1','myhost2','myhost3']
    

提交回复
热议问题