Software Development Kit (SDK) and API Discussions
Software Development Kit (SDK) and API Discussions
I am attempting to run "system-cli" calls that show some statistics. I am using a user called "monitor" that has role "readonly" [1] . This is on ONTAP 9.2. I keep getting "
Insufficient privileges: user \'monitor\' does not have write access to this resource" when I use the "system-cli" API [2] call but the exact same command works just fine via SSH [3].
What am I missing in the readonly role that would prevent access only when running the command via system-cli?
Thanks,
- Trey
[1]:
netapp-home::> security login show -user-or-group-name monitor
Vserver: netapp-home
                             Authentication             Acct   Is-Nsswitch
User/Group Name  Application Method    Role Name        Locked Group
---------------- ----------- --------- ---------------- ------ -----------
monitor          console     password  readonly         no     no
monitor          http        password  readonly         no     no
monitor          ontapi      password  readonly         no     no
monitor          ssh         password  readonly         no     no
monitor          ssh         publickey readonly         -      no
5 entries were displayed.
netapp-home::> security login role show -role readonly
           Role          Command/                                      Access
Vserver    Name          Directory                               Query Level
---------- ------------- --------- ----------------------------------- --------
netapp-home 
           readonly      DEFAULT                                       readonly
                         security                                      none
                         security login password                       all
                         security login role show-user-capability      all
                         set                                           all
5 entries were displayed.
[2]:
>>> from NetApp.NaServer import *
>>> s = NaServer('netapp-home', 1, 31)
>>> s.set_style('LOGIN')
>>> s.set_admin_user('monitor', 'OMIT')
>>> s.set_transport_type('HTTPS')
>>> import shlex
>>> cmd = shlex.split('statistics show -object nfsv4_diag -instance nfs4_diag -counter storePool_* -raw -node netapp-home01')
>>> args = NaElement('args')
>>> for arg in cmd:
...     args.child_add(NaElement('arg', arg))
... 
>>> cli = NaElement('system-cli')
>>> cli.child_add(args)
>>> cli.child_add(NaElement('priv', 'diagnostic'))
>>> out = s.invoke_elem(cli)
>>> out.sprintf()
u'<results status="failed" errno="13003" reason="Insufficient privileges: user \'monitor\' does not have write access to this resource"></results>\n'
>>> s.set_admin_user('admin', 'OMIT')
>>> out = s.invoke_elem(cli)
>>> out.sprintf()
u'<results status="passed">\n\t<cli-output>\n\nObject: nfsv4_diag\nInstance: nfs4_diag\nStart-time: 12/7/2017 11:11:00\nEnd-time: 12/7/2017 11:11:00\nScope: netapp-home01\n\n    Counter                                                     Value\n    -------------------------------- --------------------------------\n    storePool_ByteLockAlloc                                        11\n    storePool_ByteLockMax                                     1024005\n    storePool_ClientAlloc                                        1305\n    storePool_ClientMax                                        102402\n    storePool_CopyStateAlloc                                        0\n    storePool_CopyStateMax                                      10241\n    storePool_DelegAlloc                                        32298\n    storePool_DelegMax                                        1024002\n    storePool_DelegStateAlloc                                   32298\n    storePool_DelegStateMax                                   1024010\n    storePool_LayoutAlloc                                           0\n    storePool_LayoutMax                                       1024005\n    storePool_LayoutStateAlloc                                      0\n    storePool_LayoutStateMax                                  1024010\n    storePool_LockStateAlloc                                       11\n    storePool_LockStateMax                                    1024002\n    storePool_OpenAlloc                                        204365\n    storePool_OpenMax                                         1024002\n    storePool_OpenStateAlloc                                   204365\n    storePool_OpenStateMax                                    1024010\n    storePool_OwnerAlloc                                       129643\n    storePool_OwnerMax                                        1024002\n    storePool_StateRefHistoryAlloc                                  0\n    storePool_StateRefHistoryMax                              9216008\n    storePool_StringAlloc                                      130910\n    storePool_StringMax                                       1024002\n26 entries were displayed.\n\n</cli-output>\n\t<cli-result-value>1</cli-result-value>\n</results>\n'
>>> 
[3]:
$ ssh -l monitor netapp-home "set diag; statistics show -object nfsv4_diag -instance nfs4_diag -counter storePool_* -raw -node netapp-home01"
Password:
Object: nfsv4_diag
Instance: nfs4_diag
Start-time: 12/7/2017 11:07:05
End-time: 12/7/2017 11:07:05
Scope: netapp-home01
    Counter                                                     Value
    -------------------------------- --------------------------------
    storePool_ByteLockAlloc                                        11
    storePool_ByteLockMax                                     1024005
    storePool_ClientAlloc                                        1303
    storePool_ClientMax                                        102402
    storePool_CopyStateAlloc                                        0
    storePool_CopyStateMax                                      10241
    storePool_DelegAlloc                                        32145
    storePool_DelegMax                                        1024002
    storePool_DelegStateAlloc                                   32145
    storePool_DelegStateMax                                   1024010
    storePool_LayoutAlloc                                           0
    storePool_LayoutMax                                       1024005
    storePool_LayoutStateAlloc                                      0
    storePool_LayoutStateMax                                  1024010
    storePool_LockStateAlloc                                       11
    storePool_LockStateMax                                    1024002
    storePool_OpenAlloc                                        204158
    storePool_OpenMax                                         1024002
    storePool_OpenStateAlloc                                   204158
    storePool_OpenStateMax                                    1024010
    storePool_OwnerAlloc                                       129557
    storePool_OwnerMax                                        1024002
    storePool_StateRefHistoryAlloc                                  0
    storePool_StateRefHistoryMax                              9216008
    storePool_StringAlloc                                      130822
    storePool_StringMax                                       1024002
26 entries were displayed.
					
				
			
			
				
			
			
				Solved! See The Solution
Hello @treydock,
Just a couple of things before using the system-cli API...please remember that it is an unsupported, "private", API, so we do actively discourage it's use. It also has some quirks, noteably it has a buffer in the return output that, when it overflows, may incorrectly report that the call fails.
That being said, system-cli is the CLI equivalent of "system node run", so the user executing the command must have permission to that set of commands via ONTAPI.
Hope that helps.
Andrew
Hello @treydock,
Just a couple of things before using the system-cli API...please remember that it is an unsupported, "private", API, so we do actively discourage it's use. It also has some quirks, noteably it has a buffer in the return output that, when it overflows, may incorrectly report that the call fails.
That being said, system-cli is the CLI equivalent of "system node run", so the user executing the command must have permission to that set of commands via ONTAPI.
Hope that helps.
Andrew
@asulliva Thanks.
In case others come across this I had to modify a non-builtin role and use that role to make the necessary changes:
netapp-home::> security login role create -vserver netapp-home -role monitor -access all -cmddirname "system node run" -query "-command statistics *"
What is the equvalent call through the API for this command?
statistics show -object nfsv4_diag -instance nfs4_diag -counter storePool_* -raw -node netapp-home01"
Thank you for the heads up.
