#4739 [RFE] Support API clients newer than server
Closed: Fixed Opened by pvoborni.

Server can communicate only with clients which send API version lower or equal to the server one. This behavior is not desired because it's more common to have newer client and older server.

Server should be able to communicate with newer client and newer CLI should be able to communicate with older server.

Related discussion: http://www.redhat.com/archives/freeipa-devel/2014-November/msg00272.html


This will require considerable refactoring in the way how frameworks treats the API and commands.

Based on the discussion on the list pulling it in.

This would require thin IPA client first - too much work for 4.2. Postponing.

Linked to Bugzilla bug: https://bugzilla.redhat.com/show_bug.cgi?id=1298242 (Red Hat Enterprise Linux 7)

This is 4.4 priority.

master:

  • c37aba291f60f01a2aef5ebbff7f4dfb23d9bb67 rpc: do not crash when unable to parse JSON
  • 861294c0d62891dc9977e7203cc07496e35ec939 parameters: remove unused ConversionError and ValidationError arguments
  • e0275abe6f5192e68b7f57acf37b01aaa89003ea rpc: include structured error information in responses
  • 2f6b333187e150369e9f761520aaebca0b45c011 frontend: re-raise remote RequirementError using CLI name in CLI
  • 13b010685b60404e89ec0392ee3d4157fbb0788b frontend: remove the unused Command.soft_validate method
  • 278fa29906093ead4977ae68eb3bf37613329102 frontend: perform argument value validation only on server
  • f8cf136c55aeb20785c08c1fa6abf33cc3fe6291 batch: do not crash when no argument is specified
  • 71f960457ed2e2fe53c4c8ea5c37b50180d89a6a ipalib: make optional positional command arguments actually optional
  • 3eaafe42b52d3c76517946fa4c2c1c120065b9fa frontend: do not forward unspecified positional arguments to server
  • 213237c7fe053b43589de4bc64a871861da6db9a user: do not assume the preserve flags have value in user_del
  • ac2e9e84cf67b59488a07ffe932019ce3e23b41a frontend: do not forward argument defaults to server
  • 77e27de147729be36d19c89e21d5aa319412dc67 makeapi: optimize API.txt
  • b08f7715180c83b3dd15fd7547bf854a36d93278 ipalib: remove the unused csv argument of Param
  • 3f5091b55abed3a2d3f4b6b940fdb6bacabbf4fe makeaci: load additional plugins using API.add_module
  • 0d62968b6f853246d38b06e8378cb9cae7f9bbb4 plugable: replace API.import_plugins with new API.add_package
  • bed546ee8220992084520737320a646dc47ec1e3 ipalib, ipaserver: migrate all plugins to Registry-based registration
  • 15a4c0d2767c0a37d55463d4bba60442a83539bb ipalib, ipaserver: fix incorrect API.register calls in docstrings
  • 88c0b66abc69ea5ab4a5beb72a1de2c5a74fd0c6 plugable: remove the unused deprecated API.register method
  • a30bc8a351b983725c082e603f311e17a6d0178e plugable: switch API to Registry-based plugin discovery
  • 60fa6ed4442279c2c42a72ee34c51b401e6a18d0 frontend: merge baseldap.CallbackRegistry into Command
  • f28cd62285dd6336fa7919b700149b23567595da frontend: move the interactive_prompt callback type to Command
  • 1bcf08aab69821bea26c288cda02537a110372f8 automount: do not inherit automountlocation_import from LDAPQuery
  • b6af621432a4120f1e895315259537546dd99f4d dns: move code called on client to the module level
  • eb8be95043210cf3be0e07d3def1bd3439f9e540 dns: do not rely on server data structures in code called on client
  • be471699b637526ab613eabfe97ce2c4a55f0529 otptoken: fix import of DN
  • 4a243536b3200caff80f9f8317892e3b38888edf otptoken_yubikey: fix otptoken_add_yubikey arguments
  • b09b92831f8b8cda26dcf01a04113ae6547b355c vault: move client-side code to the module level
  • 4b119e21a2f93ca16c5edf3d1058552b44feeaf8 vault: copy arguments of client commands from server counterparts
  • 9e3c16e322ffc65e7d0799bcfbadec5df0ce1ad6 ipalib: use relative imports for cross-plugin imports
  • 2b50fc617024f18a81e97f30f75ed1b9221c4055 frontend: allow commands to have an argument named name

master:

  • aa4123d852d81b908cd18208577bb509fff08c5b fix pylint false positive errors

master:

  • 748a4c31bf9018482b411578127eada176f47cec cli: make optional positional command arguments actually optional
  • 9b0df69f75e70bcba60b0732dfca4b3dbc7eace4 dns: fix dnsrecord interactive mode
  • f1ad3e67ae765ed6bf72fc861ffb47f1d6637c47 ipaclient: introduce ipaclient.plugins
  • 327d95296a5b28179469c20ec5f98dba3c333017 ipalib: move client-side plugins to ipaclient
  • 0a984afd8170b349b0745fb89168d363dfa28ffa help, makeapi: allow setting command topic explicitly
  • cd5ecdbaeef153523afdeff77f07945944118115 help, makeapi: specify module topic by name
  • fe18adb25839bf191aa748f13e75bfccb10f4a57 help, makeapi: do not use hardcoded plugin package name
  • ed4c2d9252a995d01dc098e5b761ded8cd9373d8 plugable: turn Plugin attributes into properties
  • 19cf6e950943725986bca5732e343c3a793f5b70 plugable: simplify API plugin initialization code
  • 1391cd65ad87e70b9544c11cf8c9d22f54df2902 plugable: remember overriden plugins in API
  • 60d946241cc5a13050fd67873a2044df144d6743 frontend: turn Method attributes into properties
  • b8988da0968e3b0bf27ac97a18b1ceae77e41cc3 ipaclient: add client-side command override class
  • 6cfb9d73d9701767d8b76d7ff5bbc080a6be9386 dns: move code shared by client and server to separate module
  • 4c7be74526bd89ed1b481f3a1ac4bb467ee0ea2c ipalib: split off client-side plugin code into ipaclient
  • 98ede1b0e8c8473d6910fab2328dbc81d740945c parameters: introduce cli_metavar keyword argument
  • 0e989e2a28fb8093528176574ffd2ae2ecac4c14 parameters: introduce no_convert keyword argument
  • 3cf5f83d92a2c315eb8a0dd2ed06cd1d61df5d36 ipalib: replace DeprecatedParam with deprecated Param argument
  • f35beca68ceaab34ec1bed86be5ae49a0a931658 ipalib: introduce API schema plugins
  • 43dc424041e6766dbadd46f6f3982d85e69049cc rpc: respect API config in RPCClient.create_connection
  • e056b8dea208ccde8e06b199809ce038ccd0531e rpc: allow overriding NSS DB directory in API config
  • 56c66f44a0e356504bf8a7edcc924777adc1b352 rpc: specify connection options in API config
  • 11de39651f1547464ce38f013bd4d2f88141569a rpc: optimize JSON-RPC response handling
  • 5a4a29be1c28e416174a9040d66c17d5288d3975 rpc: do not validate command name in RPCClient.forward
  • 08ff248eeedd6dc4ebc5b118b7e4e81773594f51 client install: finalize API after CA certs are available
  • 875801d1d9406af6bcd4281962121f04b90287b7 ipactl: use server API
  • 2f7df393fd17b115112c39c714cc6c9b0b37460c ipalib: move File command arguments to ipaclient
  • f5fd2b87506366f29ffca88b4a03e27143c79eae misc: hide the unused --all option of env and plugins in CLI
  • ec841e5d7ab29d08de294b3fa863a631cd50e30a ipaclient: implement thin client
  • 6e44557b601f769d23ee74555a72e8b5cc62c0c9 ipalib: move server-side plugins to ipaserver
  • 8b7f2500ba16029faf02ae9318c0e1c51f60ffac frontend: do not check API minor version of the client

master:

  • 05878f115334dda75ae9db82e6f31b9f91ec4d2a test: test_cli: Do not expect defaults in kwargs.

master:

  • bebdce89b6075f77beb36ce194b36ad4d7104ca3 plugable: allow plugins to be non-classes
  • 4128c565ea716625b8510a476222690f0297ab8c plugable: initialize plugins on demand
  • 3ac2215ddb9452e7ebeee43a5eaadcd589c94530 schema: generate client-side commands on demand
  • e2a8290af1848ae22db27bcde8a9dc25572a1a43 batch, schema: use Dict instead of Any
  • 365d9737639f38e4252bdb0203760739ca7b1edc misc: fix empty CLI output of env and plugins commands
  • 448af06234030d171cd0cee654f970456d53e9e6 dns, passwd: fix outputs of dns_resolve and passwd commands
  • f7240c6df8bb6f3188faaf518031f9f0fbf89f5c frontend: call execute rather than forward in Local
  • a64aba36a42397b02b4032dcd7e7cfa84ae6d30f schema: exclude local commands
  • d26e42ffb065cc524c63d65d87c2a2b5d943c54a schema: fix client-side dynamic defaults

master:

  • db13494045198842a049d40a3481d9081c7ce175 makeaci, makeapi: use in-server API
  • f554078291d682d59956998af97f7d3066fbe7e7 frontend: don't copy command arguments to output params
  • 0b53ae4cda6034d9198a62d09ecdf6ce4cabb7e1 frontend: skip value output in output_for_cli
  • b405a1218bde060f2297d428c7f2f80af55bf3ff frontend: do not crash on missing output in output_for_cli
  • ade8d425254864dd0155719714b81ef444bbb57b automember: add object plugin for automember_rebuild
  • 234270dc753ef39cd5c0ada17e88ef7f512a8cd0 dns: do not rely on custom param fields in record attributes
  • 538286490922ff40f15048f71e520c616f796976 misc: skip count and total output in env.output_for_cli
  • 71de8878bd3c2aadf61ebefc91f5b50a3f73c9d2 passwd: handle sort order of passwd argument on the client
  • 3ec7a52aea104ce0f37d9204fcba21a42abfc798 permission: handle ipapermright deprecated CLI alias on the client
  • ec1b3e71b2688eed2264b7b24d9e8fcff938967f schema: add object class schema
  • 91faf3ecd7708409350c8c5961833cbde202b2b2 schema: remove output_params
  • d0cfe37a7ebda848abd32fc46129e7844da5a9be schema: merge command args and options
  • cbe73c6d2816d590d4314c6d4207de2cfc7d274e schema: remove redundant information
  • 8cc8b6fb1023fa4aeafac0df01cfacff4ebf537a schema: remove no_cli from command schema

master:

  • 91d6d87ca76e3aa27d5f87fd4f0b70f1d4fe4e72 replica install: fix thin client regression

master:

  • 894be1bd50905b86d87244d0ede3f266e9737b9a dns: fix dns_update_system_records to work with thin client

master:

  • 034a111972df7e1b2db71ea30440b36dc93e2c7b schema: Add fingerprint and TTL
  • 4b97cabb52585e9f58a2f2034ba71fd7e8d678d7 schema: Add known_fingerprints option to schema command
  • d0e708cba240bd92a4467495caeb654eff6ae69a schema: Cache schema in api instance

master:

  • a5f48476adfd9971a1756bd5ad3cb7c9e2afef22 schema: return fingerprint as unicode text

master:

  • ac8e8ecdd3f75c104e30f68630290b0b1ad5a40b schema: fix param default value handling
  • 055dfaf65725bec60e2e85273ec10ce027798fde schema: do not crash in command_defaults if argument is None
  • 61987b66ba8dfcb0c683de64cbda77eb29f9f767 automember: fix automember to work with thin client
  • f7cc15f0990ef2db57717a3c6a8e9db2c3dee951 schema: client-side code cleanup

master:

  • 65aa2d48ffeeacafd5736db33b9be050153077c3 env: Add 'server' variable to api.env
  • a636842889f832e977df61dbeac4e1055e129c0f schema: Caching on schema on client

master:

  • 95191e1612f93823bd0e325ef9b97fa9a4d7869c test: automember: Fix expected exception message

master:

  • 573819eb07ea67311004850b7726f3368bacb49b test: cert: Reflect change in behavior in tests

master:

  • ae5f11b4de1d5e353a2e1b8345e316949f4b75ed server: define missing virtual attributes
  • 0f578ec36ccb3ceb91d64e3967a4fcd01b240895 user: add object plugin for user_status
  • e4ec4796a38f2143a9df200d55edb990684d67db frontend: do not ignore client-side output params
  • 1a03bd322df65ecb9302f0cd70ec2b9bbfa3812e cert: fix CLI output of cert_remove_hold
  • 390fd3d305daf3844dd7c5e36b2d9e7b3c651e3d plugable: add option to ignore override errors
  • c1d8c710e749110d157a6769a48ac0b9552f458e client: ignore override errors in command overrides
  • 8278da6967dbe425b4e0c6cf37dc1c53052525b2 client: add placeholders for required remote plugins
  • 2beb72ffa4bea5e22c2ba4685a524df36d1f800c server: exclude Local commands from RPC

master:

  • e5635f7ef423c7b203004a0cbf625360d351a78e schema: Decrease schema TTL to one hour

master:

  • cf713ac28362c40e6414e9bf9701e58e36c07deb client: do not crash when overriding remote command as method
  • 2cf7c7b4ac2a71457d026d6312cf4fd57b55062b client: add support for pre-schema servers

master:

  • cea1f33606e85ac83a7bda66fbef318e47412531 schema: Perform the check for schema update when force_schema_check is True

Metadata Update from @pvoborni:
- Issue assigned to jcholast
- Issue set to the milestone: FreeIPA 4.4

Metadata