client: add placeholders for required remote plugins

Add placeholders for remote plugins which are required by client-side
commands. They are used when the remote plugins are not available.

This fixes API initialization error when the remote server does not have
the plugins.

https://fedorahosted.org/freeipa/ticket/4739

Reviewed-By: David Kupka <dkupka@redhat.com>
This commit is contained in:
Jan Cholasta 2016-06-28 11:05:01 +02:00
parent c1d8c710e7
commit 8278da6967
3 changed files with 78 additions and 3 deletions

View File

@ -25,7 +25,7 @@ import six
from ipaclient.frontend import MethodOverride from ipaclient.frontend import MethodOverride
from ipalib import api, errors from ipalib import api, errors
from ipalib import Flag, Str from ipalib import Flag, Str
from ipalib.frontend import Command from ipalib.frontend import Command, Method, Object
from ipalib.plugable import Registry from ipalib.plugable import Registry
from ipalib import _ from ipalib import _
from ipapython.dn import DN from ipapython.dn import DN
@ -39,8 +39,23 @@ DEFAULT_MAPS = (u'auto.direct', )
DEFAULT_KEYS = (u'/-', ) DEFAULT_KEYS = (u'/-', )
@register(no_fail=True)
class _fake_automountlocation(Object):
name = 'automountlocation'
@register(no_fail=True)
class _fake_automountlocation_show(Method):
name = 'automountlocation_show'
NO_CLI = True
@register(override=True, no_fail=True) @register(override=True, no_fail=True)
class automountlocation_tofiles(MethodOverride): class automountlocation_tofiles(MethodOverride):
@property
def NO_CLI(self):
return self.api.Command.automountlocation_show.NO_CLI
def output_for_cli(self, textui, result, *keys, **options): def output_for_cli(self, textui, result, *keys, **options):
maps = result['result']['maps'] maps = result['result']['maps']
keys = result['result']['keys'] keys = result['result']['keys']

View File

@ -25,7 +25,7 @@ import yubico
from ipalib import _, IntEnum from ipalib import _, IntEnum
from ipalib.errors import NotFound from ipalib.errors import NotFound
from ipalib.frontend import Command from ipalib.frontend import Command, Method, Object
from ipalib.plugable import Registry from ipalib.plugable import Registry
if six.PY3: if six.PY3:
@ -50,6 +50,17 @@ register = Registry()
topic = 'otp' topic = 'otp'
@register(no_fail=True)
class _fake_otptoken(Object):
name = 'otptoken'
@register(no_fail=True)
class _fake_otptoken_add(Method):
name = 'otptoken_add'
NO_CLI = True
@register() @register()
class otptoken_add_yubikey(Command): class otptoken_add_yubikey(Command):
__doc__ = _('Add a new YubiKey OTP token.') __doc__ = _('Add a new YubiKey OTP token.')
@ -63,6 +74,10 @@ class otptoken_add_yubikey(Command):
) )
has_output_params = takes_options has_output_params = takes_options
@property
def NO_CLI(self):
return self.api.Command.otptoken_add.NO_CLI
def get_args(self): def get_args(self):
for arg in self.api.Command.otptoken_add.args(): for arg in self.api.Command.otptoken_add.args():
yield arg yield arg

View File

@ -37,7 +37,7 @@ from cryptography.hazmat.primitives.serialization import load_pem_public_key,\
import nss.nss as nss import nss.nss as nss
from ipaclient.frontend import MethodOverride from ipaclient.frontend import MethodOverride
from ipalib.frontend import Local from ipalib.frontend import Local, Method, Object
from ipalib import errors from ipalib import errors
from ipalib import Bytes, Flag, Str from ipalib import Bytes, Flag, Str
from ipalib.plugable import Registry from ipalib.plugable import Registry
@ -169,6 +169,17 @@ def decrypt(data, symmetric_key=None, private_key=None):
message=_('Invalid credentials')) message=_('Invalid credentials'))
@register(no_fail=True)
class _fake_vault(Object):
name = 'vault'
@register(no_fail=True)
class _fake_vault_add_internal(Method):
name = 'vault_add_internal'
NO_CLI = True
@register() @register()
class vault_add(Local): class vault_add(Local):
__doc__ = _('Create a new vault.') __doc__ = _('Create a new vault.')
@ -191,6 +202,10 @@ class vault_add(Local):
), ),
) )
@property
def NO_CLI(self):
return self.api.Command.vault_add_internal.NO_CLI
def get_args(self): def get_args(self):
for arg in self.api.Command.vault_add_internal.args(): for arg in self.api.Command.vault_add_internal.args():
yield arg yield arg
@ -327,6 +342,12 @@ class vault_add(Local):
return response return response
@register(no_fail=True)
class _fake_vault_mod_internal(Method):
name = 'vault_mod_internal'
NO_CLI = True
@register() @register()
class vault_mod(Local): class vault_mod(Local):
__doc__ = _('Modify a vault.') __doc__ = _('Modify a vault.')
@ -373,6 +394,10 @@ class vault_mod(Local):
), ),
) )
@property
def NO_CLI(self):
return self.api.Command.vault_mod_internal.NO_CLI
def get_args(self): def get_args(self):
for arg in self.api.Command.vault_mod_internal.args(): for arg in self.api.Command.vault_mod_internal.args():
yield arg yield arg
@ -512,6 +537,12 @@ class vaultconfig_show(MethodOverride):
return response return response
@register(no_fail=True)
class _fake_vault_archive_internal(Method):
name = 'vault_archive_internal'
NO_CLI = True
@register() @register()
class vault_archive(Local): class vault_archive(Local):
__doc__ = _('Archive data into a vault.') __doc__ = _('Archive data into a vault.')
@ -541,6 +572,10 @@ class vault_archive(Local):
), ),
) )
@property
def NO_CLI(self):
return self.api.Command.vault_archive_internal.NO_CLI
def get_args(self): def get_args(self):
for arg in self.api.Command.vault_archive_internal.args(): for arg in self.api.Command.vault_archive_internal.args():
yield arg yield arg
@ -741,6 +776,12 @@ class vault_archive(Local):
return self.api.Command.vault_archive_internal(*args, **options) return self.api.Command.vault_archive_internal(*args, **options)
@register(no_fail=True)
class _fake_vault_retrieve_internal(Method):
name = 'vault_retrieve_internal'
NO_CLI = True
@register() @register()
class vault_retrieve(Local): class vault_retrieve(Local):
__doc__ = _('Retrieve a data from a vault.') __doc__ = _('Retrieve a data from a vault.')
@ -779,6 +820,10 @@ class vault_retrieve(Local):
), ),
) )
@property
def NO_CLI(self):
return self.api.Command.vault_retrieve_internal.NO_CLI
def get_args(self): def get_args(self):
for arg in self.api.Command.vault_retrieve_internal.args(): for arg in self.api.Command.vault_retrieve_internal.args():
yield arg yield arg