Ok. I think I will get it to work like that.
But after fiddling around with it I found out that the type of the first
argument depends on whether a "hosts" argument was passed into the task
decorator or not. This was quite confusing. And the error is a bit cryptic.
When calling "local" on an invoke context, the following AttributeError is
thrown:
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/invoke/config.py", line 113, in
__getattr__
return self._get(key)
File "/usr/lib/python3.7/site-packages/invoke/config.py", line 178, in
_get
value = self._config[key]
File "/usr/lib/python3.7/site-packages/invoke/config.py", line 169, in
__getitem__
return self._get(key)
File "/usr/lib/python3.7/site-packages/invoke/config.py", line 178, in
_get
value = self._config[key]
KeyError: 'local'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/exhuma/.local/bin/fab", line 10, in <module>
sys.exit(program.run())
File "/usr/lib/python3.7/site-packages/invoke/program.py", line 363, in
run
self.execute()
File "/usr/lib/python3.7/site-packages/invoke/program.py", line 532, in
execute
executor.execute(*self.tasks)
File "/usr/lib/python3.7/site-packages/invoke/executor.py", line 129, in
execute
result = call.task(*args, **call.kwargs)
File "/usr/lib/python3.7/site-packages/invoke/tasks.py", line 128, in
__call__
result = self.body(*args, **kwargs)
File "/home/exhuma/tmp/fabfile.py", line 8, in get_version
version = ctx.local('python setup.py --version').strip()
File "/usr/lib/python3.7/site-packages/invoke/config.py", line 125, in
__getattr__
raise AttributeError(err)
AttributeError: No attribute or config key found for 'local'
Valid keys: ['connect_kwargs', 'forward_agent', 'gateway',
'inline_ssh_env', 'load_ssh_configs', 'port', 'run', 'runners',
'ssh_config_path', 'sudo', 'tasks', 'timeouts', 'user']
Valid real attributes: ['cd', 'clear', 'config', 'cwd', 'from_data', 'pop',
'popitem', 'prefix', 'run', 'setdefault', 'sudo', 'update']
On Mon, Apr 1, 2019 at 5:37 PM Brandon Whaley <[email protected]> wrote:
> Hi Mich,
>
> The connection object (you're using ctx in your examples) has a .local
> method that is just a pass-through to invoke.run. It's documented on
> the connection object's page:
>
> http://docs.fabfile.org/en/2.4/api/connection.html?highlight=local#fabric.connection.Connection.local
>
> On Mon, Apr 1, 2019 at 5:55 AM Michel Albert <[email protected]> wrote:
> >
> > Hi,
> >
> >
> > Consider the following fabric-1 task. For illustration I kept it really
> short:
> >
> > @fab.task
> > def sample():
> > version = fab.local('python setup.py --version')
> > fab.run('mkdir -p /snapshots/%s' % version.strip())
> >
> > This task needs to run a local and remote command. I am now trying to
> port this to fabric-2, and I can't figure out how I can implement this. If
> I define the "hosts" variable in the task, then the first line will be
> executed on the remote host as well, which I don't want. A naive aproach
> which won't work:
> >
> > @task(hosts=PROD)
> > def sample(ctx):
> > version = ctx.run('python setup.py --version').strip() # <- this
> won't work
> > ctx.run('mkdir -p /snapshots/%s' % version)
> >
> > At first I thought I would split the task into two, one for just local
> commands and one for remote tasks, but then I am forced to pass in the
> context, which will in turn cause it again to be run remotely:
> >
> > @task
> > def get_version(ctx):
> > version = ctx.run('python setup.py --version').strip()
> > return version
> >
> > @task(hosts=PROD)
> > def sample(ctx):
> > version = get_version(ctx) # <- this won't work
> > ctx.run('mkdir -p /snapshots/%s' % version)
> >
> > How can I accomplish something like this? And where is it noted in the
> docs? In the current example on the "Upgrading from 1.x" page does not have
> a single task mixing local with remote commands in any way.
> >
> >
> > Regards,
> >
> >
> > Mich
> >
> > _______________________________________________
> > Fab-user mailing list
> > [email protected]
> > https://lists.nongnu.org/mailman/listinfo/fab-user
>
_______________________________________________
Fab-user mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/fab-user