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

Reply via email to