# This is a prototype. It still needs documentation. # # Copyright (c) 2001-2013 NetApp, Inc., All Rights Reserved # Any use, modification, or distribution is prohibited # without prior written consent from NetApp, Inc. # ## @summary VserverNfs ComponentState Module ## @author Rupamjyoti.Baruah@netapp.com, dl-nacl-dev@netapp.com ## @status shared ## @pod here =head1 NAME NACL::CS::VserverNfs =head1 DESCRIPTION C is a derived class of L. It represents the state of a Vserver NFS . A related class is L, which represents access to ONTAP Vserver NFS. =head1 ATTRIBUTES The individual pieces of data that are part of the state of the element are the attributes of the ComponentState. =over =item C<< vserver >> Filled in for CMode CLI/ZAPI. Maps to same option for CMode ZAPI. =item C<< access >> Filled in for CMode CLI/ZAPI. Maps to same option for CMode ZAPI. =item C<< rpsec_ctx_high >> Filled in only for CMode CLI. =item C<< rpsec_ctx_idle >> Filled in only for CMode CLI. =item C<< v2 >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv2-enabled for CMode ZAPI. =item C<< v3 >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv3-enabled for CMode ZAPI. =item C<< v4 >> Filled in only for CMode CLI. =item C<< udp >> Filled in only for CMode CLI. =item C<< tcp >> Filled in only for CMode CLI. =item C<< spinauth >> Filled in only for CMode CLI. =item C<< default_win_user >> Filled in for CMode CLI/ZAPI. Maps to option default-windows-user for CMode ZAPI. =item C<< enable_ejukebox >> Filled in for CMode CLI/ZAPI. Maps to same option for CMode ZAPI. =item C<< cache_ejukebox >> Filled in only for CMode CLI. =item C<< v3_require_read_attributes >> Filled in only for CMode CLI. =item C<< v3_fsid_change >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv3-fsid-change-enabled for CMode ZAPI. =item C<< v3_connection_drop >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv3-connection-drop-enabled for CMode ZAPI. =item C<< ntfs_unix_security_ops >> Filled in for CMode CLI/ZAPI. Maps to same option for CMode ZAPI. =item C<< chown_mode >> Filled in for CMode CLI/ZAPI. Maps to same option for CMode ZAPI. =item C<< force_spinnp_readdir >> Filled in only for CMode CLI. =item C<< trace_enable >> Filled in only for CMode CLI. =item C<< trigger >> Filled in only for CMode CLI. =item C<< udp_max_xfer_size >> Filled in only for CMode CLI. =item C<< tcp_max_xfer_size >> Filled in only for CMode CLI. =item C<< v4_read_delegation >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv40-read-delegation-enabled for CMode ZAPI. =item C<< v4_write_delegation >> Filled in only for CMode CLI. =item C<< v4_fsid_change >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv4-fsid-change-enabled for CMode ZAPI =item C<< v4_reply_drop >> Filled in only for CMode CLI. =item C<< v4_referrals >> Filled in only for CMode CLI. =item C<< v4_req_open_confirm >> Filled in only for CMode CLI. =item C<< v4_id_domain >> Filled in for CMode CLI/ZAPI. Maps to option nfsv4-id-domain for CMode ZAPI. =item C<< v4_validate_symlinkdata >> Filled in only for CMode CLI. =item C<< v4_lease_seconds >> Filled in for CMode CLI/ZAPI. Maps to option nfsv4-lease-seconds for CMode ZAPI. =item C<< v4_grace_seconds >> Filled in for CMode CLI/ZAPI. Maps to option nfsv4-grace-seconds for CMode ZAPI. =item C<< is_drained >> Filled in only for 7Mode CLI. =item C<< is_enabled >> Filled in only for 7Mode CLI. =item C<< v4_0_migration >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv40-migration-enabled for CMode ZAPI. =item C<< v4_1_implementation_date >> Filled in for CMode CLI/ZAPI. Maps to option nfsv41-implementation-id-time for CMode ZAPI. =item C<< v4_1_implementation_domain >> Filled in for CMode CLI/ZAPI. Maps to option nfsv41-implementation-id-domain for CMode ZAPI. =item C<< v4_1_acl >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-acl-enabled for CMode ZAPI. =item C<< v4_1_pnfs_striped_volumes >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-pnfs-striped-volumes-enabled for CMode ZAPI. =item C<< v3_tcp_max_write_size >> Filled in only for CMode CLI. =item C<< v4_acl_preserve >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-acl-preserve-enabled for CMode ZAPI. =item C<< rquota >> Filled in only for CMode CLI. =item C<< v4_1_referrals >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-referrals-enabled for CMode ZAPI. =item C<< v4_0_referrals >> Filled in only for CMode CLI. =item C<< v4_0_acl >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv40-acl-enabled for CMode ZAPI. =item C<< v4_1 >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-enabled for CMode ZAPI. =item C<< v4_numeric_ids >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv4-numeric-ids-enabled for CMode ZAPI. =item C<< v4_1_pnfs >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-pnfs-enabled for CMode ZAPI. =item C<< v4_0_read_delegation >> Filled in only for CMode CLI. =item C<< v4_0_req_open_confirm >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv40-req-open-confirm-enabled for CMode ZAPI. =item C<< v4_1_implementation_name >> Filled in for CMode CLI/ZAPI. Maps to option nfsv41-implementation-id-name for CMode ZAPI. =item C<< v4_1_state_protection >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-state-protection-enabled for CMode ZAPI. =item C<< v4_0 >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv40-enabled for CMode ZAPI. =item C<< vstorage >> Filled in for CMode CLI/ZAPI. Maps to option is-vstorage-enabled for CMode ZAPI. =item C<< v3_tcp_max_read_size >> Filled in only for CMode CLI. =item C<< v4_0_write_delegation >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv40-write-delegation-enabled for CMode ZAPI. =item C<< v4_1_migration >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-migration-enabled for CMode ZAPI. =item C<< v4_id_numeric >> Filled in only for CMode CLI. =item C<< default_win_group >> Filled in for CMode CLI/ZAPI. Maps to option default-windows-group for CMode ZAPI. =item C<< v4_x_session_slot_reply_cache_size >> Filled in for CMode CLI/ZAPI. Maps to option nfsv4x-session-slot-reply-cache-size for CMode ZAPI. =item C<< v4_1_read_delegation >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-read-delegation-enabled for CMode ZAPI. =item C<< v4_x_session_num_slots >> Filled in for CMode CLI/ZAPI. Maps to option nfsv4x-session-num-slots for CMode ZAPI. =item C<< ipv6 >> Filled in for CMode CLI/ZAPI. Maps to option is-nfs-ipv6-enabled for CMode ZAPI. =item C<< v4_1_write_delegation >> Filled in for CMode CLI/ZAPI. Maps to option is-nfsv41-write-delegation-enabled for CMode ZAPI. =item C<< mount_rootonly >> Filled in for CMode CLI/ZAPI. Maps to option is-mount-rootonly-enabled for CMode ZAPI. =item C<< v4_acl_max_aces >> Filled in for CMode CLI/ZAPI. Maps to option nfsv4-acl-max-aces for CMode ZAPI. =item C<< nfs_rootonly >> NFS Root Only, possible value(s) are enabled,disabled Filled in for CMode CLI/ZAPI. Maps to option is-nfs-rootonly-enabled for CMode ZAPI. =item C<< qtree_export >> Qtree Exports Enabled possible value(s) are, enabled,disabled Filled in for CMode CLI. =item C<< is_auth_sys_extended_groups_enabled >> AUTH_SYS Extended Groups Support possible value(s) are, true,false Filled in for CMode CLI. =item C<< extended_groups_limit >> AUTH_SYS and RPCSEC_GSS Auxillary Groups Limit ranges from 32 to 256 Filled in for CMode CLI. =item C<< validate_qtree_export >> Validation of Qtree IDs for Qtree File Operations possible value(s) are, enabled,disabled Filled in for CMode CLI. =item C<< rquotad_port >> NFS Quota Daemon Port ranges from 1 to 65535 Filled in for CMode CLI. =item C<< mountd_port >> NFS Mount Daemon Port ranges from 1 to 65535 Filled in for CMode CLI. =item C<< nlm_port >> Network Lock Manager Port ranges from 1 to 65535 Filled in for CMode CLI. =item C<< nsm_port >> Network Status Monitor Port ranges from 1 to 65535 Filled in for CMode CLI. =item C<< permitted_enc_types >> Permitted Kerberos Encryption Types (Array) Note that for array fields, the accessor method can be invoked in either scalar or list context. my $permitted_enc_types = $obj->permitted_enc_types(); # $permitted_enc_types contains a reference to the array of values my @permitted_enc_types = $obj->permitted_enc_types(); # @permitted_enc_types contains the array of values If this field needs to be passed to the filter hash, the value for this field should be passed in as an arrayref # filter => { permitted_enc_types = [ value1, value2...] } Filled in for CMode CLI. =item C<< is_showmount_enabled >> Showmount Enabled possible value(s) are, enabled,disabled Filled in for CMode CLI. =item C<< showmount >> Showmount Support possible value(s) are, enabled,disabled Filled in for CMode CLI. =item C<< auth_sys_extended_groups >> AUTH_SYS Extended Groups Support possible value(s) are, enabled,disabled Filled in for CMode CLI. =item C<< name_service_lookup_protocol >> Set the Protocol Used for Name Services Lookups for Exports possible value(s) are, TCP,UDP Filled in for CMode CLI. =item C<< netgroup_dns_domain_search >> DNS Domain Search Enabled During Netgroup Lookup possible value(s) are, enabled,disabled Filled in for CMode CLI/ZAPI. =item C<< map_unknown_uid_to_default_windows_user >> Map Unknown UID to Default Windows User Filled in for CMode CLI/ZAPI. =item C<< netgroup_trust_any_ns_switch_no_match >> Trust No-Match Result from Any Name Service Switch Source During Netgroup Lookup possible value(s) are, enabled,disabled Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< cached_cred_negative_ttl >> Time To Live Value (in msecs) of a Negative Cached Credential ranges from 60000 to 604800000 Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< ignore_nt_acl_for_root >> Ignore the NT ACL Check for NFS User 'root' possible value(s) are, enabled,disabled Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< cached_transient_err_ttl >> Time To Live Value (in msecs) of a Cached Entry for a Transient Error ranges from 30000 to 300000 Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< skip_root_owner_write_perm_check >> Skip Permission Check for NFS Write Calls from Root/Owner possible value(s) are, enabled,disabled Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< ntacl_display_permissive_perms >> Display maximum NT ACL Permissions to NFS Client possible value(s) are, enabled,disabled Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< cached_cred_positive_ttl >> Time To Live Value (in msecs) of a Positive Cached Credential ranges from 60000 to 604800000 Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =item C<< v3_ms_dos_client >> NFSv3 MS-DOS Client Support possible value(s) are, enabled,disabled Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: Mapping for CMode ZAPI non-iter: is-v3-ms-dos-client-enabled =item C<< showmount_timestamp >> timestamp to indicate whether we want to update exports data file or not Filled in for CMode CLI/ZAPI iter, non-iter. Mapping for CMode ZAPI iter: =back =cut package NACL::CS::VserverNfs; use strict; use warnings; use Params::Validate qw(validate); use NATE::Log qw(log_global); my $Log = log_global(); my $may_enter = $Log->may_enter(); my $may_exit = $Log->may_exit(); use NACL::APISet::Exceptions::ResponseException qw(:try); use NACL::CS::ComponentState::ZapiSkip qw(make_zapi_skip); use NACL::CS::ComponentState::ZapiArray qw(make_zapi_array); use base qw(NACL::CS::ComponentState::ONTAP); use Class::MethodMaker [ scalar => 'vserver', scalar => 'access', scalar => 'rpcsec_ctx_high', scalar => 'rpcsec_ctx_idle', scalar => 'v2', scalar => 'v3', scalar => 'v4', scalar => 'udp', scalar => 'tcp', scalar => 'spinauth', scalar => 'default_win_user', scalar => 'enable_ejukebox', scalar => 'cache_ejukebox', scalar => 'v3_require_read_attributes', scalar => 'v3_fsid_change', scalar => 'v3_connection_drop', scalar => 'ntfs_unix_security_ops', scalar => 'chown_mode', scalar => 'force_spinnp_readdir', scalar => 'trace_enabled', scalar => 'trigger', scalar => 'udp_max_xfer_size', scalar => 'tcp_max_xfer_size', scalar => 'v4_acl', scalar => 'v4_read_delegation', scalar => 'v4_write_delegation', scalar => 'v4_fsid_change', scalar => 'v4_reply_drop', scalar => 'v4_referrals', scalar => 'v4_req_open_confirm', scalar => 'v4_id_domain', scalar => 'v4_validate_symlinkdata', scalar => 'v4_lease_seconds', scalar => 'v4_grace_seconds', scalar => 'is_drained', scalar => 'is_enabled', scalar => 'v4_0_migration', scalar => 'v4_1_implementation_date', scalar => 'v4_1_implementation_domain', scalar => 'v4_1_acl', scalar => 'v4_1_pnfs_striped_volumes', scalar => 'v3_tcp_max_write_size', scalar => 'v4_acl_preserve', scalar => 'rquota', scalar => 'v4_1_referrals', scalar => 'v4_0_referrals', scalar => 'v4_0_acl', scalar => 'v4_1', scalar => 'v4_numeric_ids', scalar => 'v4_1_pnfs', scalar => 'v4_0_read_delegation', scalar => 'v4_0_req_open_confirm', scalar => 'v4_1_implementation_name', scalar => 'v4_1_state_protection', scalar => 'v4_0', scalar => 'vstorage', scalar => 'v3_tcp_max_read_size', scalar => 'v4_0_write_delegation', scalar => 'v4_1_migration', scalar => 'v4_id_numeric', scalar => 'default_win_group', scalar => 'v4_x_session_slot_reply_cache_size', scalar => 'v4_1_read_delegation', scalar => 'v4_x_session_num_slots', scalar => 'ipv6', scalar => 'v4_1_write_delegation', scalar => 'mount_rootonly', scalar => 'v4_acl_max_aces', scalar => 'nfs_rootonly', scalar => 'qtree_export', scalar => 'is_auth_sys_extended_groups_enabled', scalar => 'extended_groups_limit', scalar => 'validate_qtree_export', scalar => 'rquotad_port', scalar => 'mountd_port', scalar => 'nlm_port', scalar => 'nsm_port', array => 'permitted_enc_types', scalar => 'is_showmount_enabled', scalar => 'showmount', scalar => 'auth_sys_extended_groups', scalar => 'name_service_lookup_protocol', scalar => 'netgroup_dns_domain_search', scalar => 'map_unknown_uid_to_default_windows_user', scalar => 'netgroup_trust_any_ns_switch_no_match', scalar => 'cached_cred_negative_ttl', scalar => 'ignore_nt_acl_for_root', scalar => 'cached_transient_err_ttl', scalar => 'skip_root_owner_write_perm_check', scalar => 'ntacl_display_permissive_perms', scalar => 'cached_cred_positive_ttl', scalar => 'v3_ms_dos_client', scalar => 'showmount_timestamp', ]; sub isa { $Log->enter() if $may_enter; my ($pkg_or_obj, $kind) = @_; my $isa = $pkg_or_obj->_build_isa( kind => $kind, alias => 'NACL::CS::VserverNFS' ); $Log->exit() if $may_exit; return $isa; } =head1 METHODS =head2 fetch my $node_state = NACL::CS::VserverNfs->fetch(command_interface=>$ci,...); my @node_states = NACL::CS::VserverNfs->fetch(command_interface=>$ci,...); see L. Uses a CMode CLI or CMode-ZAPI or 7Mode CLI APISet. Invokes 'nfs-service-get-iter' api for CMode ZAPI. Invokes 'nfs-status' api for 7Mode CLI. =over =item Exceptions =over =item C When there are no elements matching the query specified or elements of that type doesn't exist, then this exception will be thrown. =back =back =cut sub fetch { $Log->enter() if $may_enter; my ($pkg, @args) = @_; my @state_objs = $pkg->SUPER::fetch( @args, show_cmd =>'vserver nfs show', choices => [ { method => '_fetch_cmode_cli', interface => 'CLI', set => 'CMode', }, { method => '_fetch_cmode_zapi', interface => 'ZAPI', set => 'CMode', check => '_zapi_check_tcp_udp', zapi_type => 'iter', }, { method => '_fetch_cmode_zapi_non_iter', interface => 'ZAPI', set => 'CMode', zapi_type => 'non-iter', check => '_check_non_iter' }, { method => '_fetch_7mode_cli', interface => 'CLI', set => '7Mode', }, ], exception_text => 'No matching vserver n f s(s) found' ); $Log->exit() if $may_exit; return wantarray ? @state_objs : $state_objs[0]; } ## end sub fetch sub _fetch_cmode_cli { $Log->enter() if $may_enter; my $pkg = shift; my @state_objs = $pkg->SUPER::_fetch_cmode_cli(@_, api => 'vserver_nfs_show'); $Log->exit() if $may_exit; return @state_objs; } ## end sub _fetch_cmode_cli sub _fetch_cmode_zapi { $Log->enter() if $may_enter; my ($pkg, %args) = @_; my $filter_conversion_values = {'enabled' => 'true', 'disabled' => 'false'}; my $options_values_to_translate = $pkg->_get_enable_disable_list(); foreach my $filter (@$options_values_to_translate) { if ( defined $args{filter}->{$filter} && defined $filter_conversion_values->{$args{filter}->{$filter}}) { $args{filter}->{$filter} = $filter_conversion_values->{$args{filter}->{$filter}}; } } my @state_objs = $pkg->SUPER::_fetch_cmode_zapi( %args, api => 'nfs-service-get-iter', copy => [ qw( showmount chown-mode rpcsec-ctx-high ntfs-unix-security-ops rpcsec-ctx-idle enable-ejukebox vserver map-unknown-uid-to-default-windows-user auth-sys-extended-groups cached-cred-negative-ttl cached-cred-positive-ttl cached-transient-err-ttl ignore-nt-acl-for-root mountd-port netgroup-trust-any-ns-switch-no-match name-service-lookup-protocol ntacl-display-permissive-perms rquotad-port showmount-timestamp skip-root-owner-write-perm-check) ], map => { 'default-win-group' => 'default-windows-group', 'default-win-user' => 'default-windows-user', 'mount-rootonly' => 'is-mount-rootonly-enabled', 'netgroup-dns-domain-search' => 'is-netgroup-dns-domain-search', 'access' => 'is-nfs-access-enabled', 'ipv6' => 'is-nfs-ipv6-enabled', 'nfs-rootonly' => 'is-nfs-rootonly-enabled', 'v2' => 'is-nfsv2-enabled', 'v3-connection-drop' => 'is-nfsv3-connection-drop-enabled', 'v3' => 'is-nfsv3-enabled', 'v3-fsid-change' => 'is-nfsv3-fsid-change-enabled', 'v4-fsid-change' => 'is-nfsv4-fsid-change-enabled', 'v4-numeric-ids' => 'is-nfsv4-numeric-ids-enabled', 'v4.0-acl' => 'is-nfsv40-acl-enabled', 'v4.0' => 'is-nfsv40-enabled', 'v4.0-migration' => 'is-nfsv40-migration-enabled', 'v4.0-read-delegation' => 'is-nfsv40-read-delegation-enabled', 'v4.0-referrals' => 'is-nfsv40-referrals-enabled', 'v4.0-read-delegation' => 'is-nfsv40-read-delegation-enabled', 'v4.0-referrals' => 'is-nfsv40-referrals-enabled', 'v4.0-req-open-confirm' => 'is-nfsv40-req-open-confirm-enabled', 'v4.0-write-delegation' => 'is-nfsv40-write-delegation-enabled', 'v4.1-acl' => 'is-nfsv41-acl-enabled', 'v4-acl-preserve' => 'is-nfsv41-acl-preserve-enabled', 'v4.1' => 'is-nfsv41-enabled', 'v4.1-migration' => 'is-nfsv41-migration-enabled', 'v4.1-pnfs' => 'is-nfsv41-pnfs-enabled', 'v4.1-pnfs-striped-volumes' => 'is-nfsv41-pnfs-striped-volumes-enabled', 'v4.1-read-delegation' => 'is-nfsv41-read-delegation-enabled', 'v4.1-referrals' => 'is-nfsv41-referrals-enabled', 'v4.1-state-protection' => 'is-nfsv41-state-protection-enabled', 'v4.1-write-delegation' => 'is-nfsv41-write-delegation-enabled', 'vstorage' => 'is-vstorage-enabled', 'v4-acl-max-aces' => 'nfsv4-acl-max-aces', 'v4-grace-seconds' => 'nfsv4-grace-seconds', 'v4-id-domain' => 'nfsv4-id-domain', 'v4-lease-seconds' => 'nfsv4-lease-seconds', 'v4.1-implementation-domain' => 'nfsv41-implementation-id-domain', 'v4.1-implementation-name' => 'nfsv41-implementation-id-name', 'v4.1-implementation-date' => 'nfsv41-implementation-id-time', 'v4.x-session-num-slots' => 'nfsv4x-session-num-slots', 'v4.x-session-slot-reply-cache-size' => 'nfsv4x-session-slot-reply-cache-size', 'qtree-export' => 'is-qtree-export-enabled', 'validate-qtree-export' => 'is-validate-qtree-export-enabled', 'v3-ms-dos-client' => 'is-v3-ms-dos-client-enabled', }, ); $Log->exit() if $may_exit; return @state_objs; } ## end sub _fetch_cmode_zapi sub _zapi_check_tcp_udp { $Log->enter() if $may_enter; my ($pkg, %opts) = @_; my @fields = $pkg->_invalid_fields_check(%opts, _fields => [qw(tcp udp)]); if (@fields) { my $fields_str = join ',', @fields; my $msg = 'Could not use the ZAPI implementation of ' . "NACL::CS::VserverNfs->fetch() because field(s) $fields_str " . 'was provided. This is currently not returned by the ZAPI ' . '(see burt 927716)'; $Log->comment($msg); require NACL::Exceptions::InvalidChoice; $Log->exit() if $may_exit; NACL::Exceptions::InvalidChoice->throw($msg); } $Log->exit() if $may_exit; } sub _fetch_7mode_cli { $Log->enter() if $may_enter; my $pkg = shift; my %opts = validate @_, $pkg->_fetch_backend_validate_spec(); my @state_objs; my $apiset = delete $opts{apiset}; my $response = $apiset->nfs_status(); my $output = $response->get_parsed_output(); my $temp = $output->[0]; my $obj = $pkg->new(); if ($temp->{'status'} =~ /NOT running/i) { $obj->is_enabled('0'); } else { $obj->is_enabled('1'); } $obj->is_drained('0'); push @state_objs, $obj; $Log->exit() if $may_exit; return @state_objs; } ## end sub _fetch_7mode_cli sub _fetch_cmode_zapi_non_iter { $Log->enter() if $may_enter; my ($pkg, @args) = @_; my @state_objs = $pkg->SUPER::_fetch_cmode_zapi_non_iter( @args, copy => [ qw(netgroup-trust-any-ns-switch-no-match cached-cred-negative-ttl rpcsec-ctx-high ignore-nt-acl-for-root cached-transient-err-ttl rquotad-port enable-ejukebox mountd-port nlm-port auth-sys-extended-groups showmount map-unknown-uid-to-default-windows-user chown-mode skip-root-owner-write-perm-check ntfs-unix-security-ops rpcsec-ctx-idle ntacl-display-permissive-perms cached-cred-positive-ttl extended-groups-limit vserver nsm-port name-service-lookup-protocol showmount-timestamp ) ], map => { 'v4-id-domain' => 'nfsv4-id-domain', 'v4-acl-preserve' => 'is-nfsv41-acl-preserve-enabled', 'v4.1-referrals' => 'is-nfsv41-referrals-enabled', 'v4.x-session-num-slots' => 'nfsv4x-session-num-slots', 'default-win-user' => 'default-windows-user', 'v4.1-pnfs' => 'is-nfsv41-pnfs-enabled', 'default-win-group' => 'default-windows-group', 'v4.0-req-open-confirm' => 'is-nfsv40-req-open-confirm-enabled', 'v4.1-implementation-name' => 'nfsv41-implementation-id-name', 'access' => 'is-nfs-access-enabled', 'v4.1-state-protection' => 'is-nfsv41-state-protection-enabled', 'v4-grace-seconds' => 'nfsv4-grace-seconds', 'vstorage' => 'is-vstorage-enabled', 'nfs-rootonly' => 'is-nfs-rootonly-enabled', 'v3-fsid-change' => 'is-nfsv3-fsid-change-enabled', 'v4.0-write-delegation' => 'is-nfsv40-write-delegation-enabled', 'v2' => 'is-nfsv2-enabled', 'v4.1-migration' => 'is-nfsv41-migration-enabled', 'v4.0-migration' => 'is-nfsv40-migration-enabled', 'v3-connection-drop' => 'is-nfsv3-connection-drop-enabled', 'v4.1-implementation-date' => 'nfsv41-implementation-id-time', 'v4.1-implementation-domain' => 'nfsv41-implementation-id-domain', 'permitted-enc-types' => [ make_zapi_array('permitted-enc-types'), make_zapi_skip('string'), ], 'v4.1-acl' => 'is-nfsv41-acl-enabled', 'v4.x-session-slot-reply-cache-size' => 'nfsv4x-session-slot-reply-cache-size', 'v4-fsid-change' => 'is-nfsv4-fsid-change-enabled', 'v3' => 'is-nfsv3-enabled', 'v4.1-read-delegation' => 'is-nfsv41-read-delegation-enabled', 'qtree-export' => 'is-qtree-export-enabled', 'v4.0-referrals' => 'is-nfsv40-referrals-enabled', 'v4.0-acl' => 'is-nfsv40-acl-enabled', 'v4-lease-seconds' => 'nfsv4-lease-seconds', 'netgroup-dns-domain-search' => 'is-netgroup-dns-domain-search', 'v4-numeric-ids' => 'is-nfsv4-numeric-ids-enabled', 'v4.1' => 'is-nfsv41-enabled', 'v4.0-read-delegation' => 'is-nfsv40-read-delegation-enabled', 'v4.1-write-delegation' => 'is-nfsv41-write-delegation-enabled', 'v3-ms-dos-client' => 'is-v3-ms-dos-client-enabled', 'mount-rootonly' => 'is-mount-rootonly-enabled', 'v4.0' => 'is-nfsv40-enabled', 'validate-qtree-export' => 'is-validate-qtree-export-enabled', 'v4-acl-max-aces' => 'nfsv4-acl-max-aces', }, api => "nfs-service-get", vserver_operated_on => \my $vserver, primary_keys => [qw( )], ); $Log->exit() if $may_exit; return @state_objs; } sub _update_state_objs_cmode_zapi { $Log->enter() if $may_enter; my ($pkg, @args) = @_; $pkg->SUPER::_update_state_objs_cmode_zapi( @args, zapi_field_translations => {enable_disable => $pkg->_get_enable_disable_list()}, ); $Log->exit() if $may_exit; } sub _check_non_iter { $Log->enter() if $may_enter; my ($pkg, @opts) = @_; $pkg->_base_check_non_iter( @opts, _primary_keys => [qw(vserver)], _vs_context => 1 ); $Log->exit() if $may_exit; } sub _get_enable_disable_list { $Log->enter() if $may_enter; my $List= [ qw( showmount nfs-rootonly mount-rootonly ipv6 vstorage v4.1-pnfs-striped-volumes tcp nfs-rootonly v2 v3-connection-drop v3 v3-fsid-change v4.1-write-delegation v4-fsid-change v4-numeric-ids v4.0-acl v4.0 v4.0-migration v4.0-read-delegation v4.0-referrals v4.0-req-open-confirm v4.0-write-delegation v4.1-acl v4-acl-preserve v4.1 v4.1-migration v4.1-pnfs v4.1-read-delegation v4.1-referrals v4.1-state-protection netgroup-dns-domain-search netgroup-trust-any-ns-switch-no-match ignore-nt-acl-for-root skip-root-owner-write-perm-check ntacl-display-permissive-perms v3-ms-dos-client qtree-export validate-qtree-export ) ]; $Log->exit() if $may_exit; return $List; } # "vserver" is optional in _primary_keys_validate_spec (to handle 7Mode), # so the base-class implementation automatically drops "vserver" from # -fields, even though it's valid. We add it back here. # See burt 875113. sub _compute_cmode_cli_options { $Log->enter() if $may_enter; my ($pkg, %opts) = @_; my $api_opts = $pkg->SUPER::_compute_cmode_cli_options(%opts); if (grep {$_ eq 'vserver'} @{$opts{requested_fields}}) { if (exists $api_opts->{fields}) { $api_opts->{fields} .= ',vserver'; } else { $api_opts->{fields} = 'vserver'; } } $Log->exit() if $may_exit; return $api_opts; } 1;