<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic remove datastore role in vSphere SDK for Perl Discussions</title>
    <link>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401456#M364</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;hi,&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;i created a a vcenter role that can remove datastores. Then at the root of vcenter I added a permission to an AD user and coupled it to this role and it propagates.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;When I run my script I get this error:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Datastore NFS_Sata_02_GX_BACKUP_15358_2 inaccessible, removing&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;SOAP Fault:&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------" /&gt;&lt;P&gt;Fault string: Permission to perform this operation was denied.&lt;/P&gt;&lt;P&gt;Fault detail: NoPermissionFault&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;This is my code:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;====================begin script ==============================================&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;#!/usr/bin/env perl&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;# Disable SSL hostname verification for vCenter self-signed certificate&lt;BR /&gt;BEGIN {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;use strict;&lt;BR /&gt;use warnings;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;use VMware::VIRuntime;&lt;BR /&gt;use VMware::VILib;&lt;BR /&gt;use VMware::VIExt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;$SIG&lt;SPAN __jive_macro_name="__DIE__"&gt;&lt;/SPAN&gt; = sub &lt;SPAN __jive_macro_name="Util"&gt;&lt;/SPAN&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;my %opts = (&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vihost =&amp;gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "h",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "=s",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; help&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "The host to use when connecting via a vCenter Server",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; required =&amp;gt; 0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; list =&amp;gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "l",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; help&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "List the currently inaccessible NAS file systems",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; required =&amp;gt; 0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; list_and_remove =&amp;gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias =&amp;gt; "r",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&amp;nbsp; =&amp;gt; "",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; help&amp;nbsp; =&amp;gt; "List and remove the currently inaccessible NAS file systems",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; required =&amp;gt; 0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR /&gt;);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Opts::add_options(%opts);&lt;BR /&gt;Opts::parse();&lt;BR /&gt;Opts::validate();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;my $list = Opts::get_option('list');&lt;BR /&gt;my $list_and_remove = Opts::get_option('list_and_remove');&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Util::connect();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;my $esxhost_view = Vim::find_entity_views(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; view_type&amp;nbsp; =&amp;amp;gt; 'HostSystem',&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties =&amp;amp;gt; &lt;A href="https://communities.vmware.com/'name'"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;for my $host ( sort { $a-&amp;gt;name cmp $b-&amp;gt;name } @$esxhost_view ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $host-&amp;gt;name, "\n";&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # set this variable to get the host view correctly per esx host&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Opts::set_option( 'vihost', $host-&amp;gt;name );&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # we need only the datastore info of every esx host&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $host_view =&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VIExt::get_host_view( 1, &lt;A href="https://communities.vmware.com/'configManager.datastoreSystem'"&gt;&lt;/A&gt; );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Opts::assert_usage( defined($host_view), "Invalid host." );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $datastore_system =&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vim::get_view( mo_ref =&amp;amp;gt; $host_view-&amp;amp;gt;{'configManager.datastoreSystem'} );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( defined $list ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list_nas($datastore_system);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elsif ( defined $list_and_remove ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remove_ghost_nas( $datastore_system) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Opts::usage();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Util::disconnect();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;sub list_nas {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($dssys) = @_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $datastores = $dssys-&amp;gt;datastore;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach my $dsRef (@$datastores) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $ds = Vim::get_view( mo_ref =&amp;gt; $dsRef );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $ds-&amp;gt;info-&amp;gt;isa("NasDatastoreInfo") ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if $ds-&amp;gt;summary-&amp;gt;accessible == 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $ds-&amp;gt;info-&amp;gt;name, " inaccessible\n";&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #$dssys-&amp;gt;RemoveDatastore(datastore =&amp;gt; $dsRef);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;sub remove_ghost_nas {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($dssys) = @_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $datastores = $dssys-&amp;gt;datastore;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach my $dsRef (@$datastores) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $ds = Vim::get_view( mo_ref =&amp;gt; $dsRef );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $ds-&amp;gt;info-&amp;gt;isa("NasDatastoreInfo") ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if $ds-&amp;gt;summary-&amp;gt;accessible == 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $ds-&amp;gt;info-&amp;gt;name, " inaccessible, removing\n";&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dssys-&amp;gt;RemoveDatastore(datastore =&amp;gt; $dsRef);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;=====================end script ====================================&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;If I run it with the --list switch it's ok:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;perl rm-esx-inaccessible-nasdatastores --list&lt;BR /&gt;esx1.domain.tld&lt;BR /&gt;esx2.domain.tld&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;.....&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;esx222.domain.tld&lt;BR /&gt;Datastore NFS_Sata_02_GX_BACKUP_15358_2 inaccessible&lt;BR /&gt;Datastore NFS_Sata_04_GX_BACKUP_15361_2 inaccessible&lt;BR /&gt;esx333.domain.tld&lt;BR /&gt;Datastore NFS_Sata_01_GX_BACKUP_15359_2 inaccessible&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;esxxxx.domain.tld&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;esxxxx.domain.tld&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Datastore NFS_TEMP_GX_BACKUP_15357_2 inaccessible&lt;BR /&gt;&lt;BR /&gt;is it possible to use a vcenter role to remove datastores or do I have to create local roles and local users?&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 14 Apr 2015 14:08:23 GMT</pubDate>
    <dc:creator>natxoasenjo</dc:creator>
    <dc:date>2015-04-14T14:08:23Z</dc:date>
    <item>
      <title>remove datastore role</title>
      <link>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401456#M364</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;hi,&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;i created a a vcenter role that can remove datastores. Then at the root of vcenter I added a permission to an AD user and coupled it to this role and it propagates.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;When I run my script I get this error:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Datastore NFS_Sata_02_GX_BACKUP_15358_2 inaccessible, removing&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;SOAP Fault:&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------" /&gt;&lt;P&gt;Fault string: Permission to perform this operation was denied.&lt;/P&gt;&lt;P&gt;Fault detail: NoPermissionFault&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;This is my code:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;====================begin script ==============================================&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;#!/usr/bin/env perl&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;# Disable SSL hostname verification for vCenter self-signed certificate&lt;BR /&gt;BEGIN {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;use strict;&lt;BR /&gt;use warnings;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;use VMware::VIRuntime;&lt;BR /&gt;use VMware::VILib;&lt;BR /&gt;use VMware::VIExt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;$SIG&lt;SPAN __jive_macro_name="__DIE__"&gt;&lt;/SPAN&gt; = sub &lt;SPAN __jive_macro_name="Util"&gt;&lt;/SPAN&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;my %opts = (&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vihost =&amp;gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "h",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "=s",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; help&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "The host to use when connecting via a vCenter Server",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; required =&amp;gt; 0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; list =&amp;gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "l",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; help&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; "List the currently inaccessible NAS file systems",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; required =&amp;gt; 0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; list_and_remove =&amp;gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alias =&amp;gt; "r",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&amp;nbsp; =&amp;gt; "",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; help&amp;nbsp; =&amp;gt; "List and remove the currently inaccessible NAS file systems",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; required =&amp;gt; 0,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR /&gt;);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Opts::add_options(%opts);&lt;BR /&gt;Opts::parse();&lt;BR /&gt;Opts::validate();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;my $list = Opts::get_option('list');&lt;BR /&gt;my $list_and_remove = Opts::get_option('list_and_remove');&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Util::connect();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;my $esxhost_view = Vim::find_entity_views(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; view_type&amp;nbsp; =&amp;amp;gt; 'HostSystem',&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties =&amp;amp;gt; &lt;A href="https://communities.vmware.com/'name'"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;for my $host ( sort { $a-&amp;gt;name cmp $b-&amp;gt;name } @$esxhost_view ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $host-&amp;gt;name, "\n";&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # set this variable to get the host view correctly per esx host&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Opts::set_option( 'vihost', $host-&amp;gt;name );&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # we need only the datastore info of every esx host&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $host_view =&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VIExt::get_host_view( 1, &lt;A href="https://communities.vmware.com/'configManager.datastoreSystem'"&gt;&lt;/A&gt; );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Opts::assert_usage( defined($host_view), "Invalid host." );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $datastore_system =&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vim::get_view( mo_ref =&amp;amp;gt; $host_view-&amp;amp;gt;{'configManager.datastoreSystem'} );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( defined $list ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list_nas($datastore_system);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elsif ( defined $list_and_remove ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remove_ghost_nas( $datastore_system) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Opts::usage();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Util::disconnect();&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;sub list_nas {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($dssys) = @_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $datastores = $dssys-&amp;gt;datastore;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach my $dsRef (@$datastores) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $ds = Vim::get_view( mo_ref =&amp;gt; $dsRef );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $ds-&amp;gt;info-&amp;gt;isa("NasDatastoreInfo") ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if $ds-&amp;gt;summary-&amp;gt;accessible == 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $ds-&amp;gt;info-&amp;gt;name, " inaccessible\n";&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #$dssys-&amp;gt;RemoveDatastore(datastore =&amp;gt; $dsRef);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;sub remove_ghost_nas {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($dssys) = @_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $datastores = $dssys-&amp;gt;datastore;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach my $dsRef (@$datastores) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $ds = Vim::get_view( mo_ref =&amp;gt; $dsRef );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $ds-&amp;gt;info-&amp;gt;isa("NasDatastoreInfo") ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if $ds-&amp;gt;summary-&amp;gt;accessible == 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $ds-&amp;gt;info-&amp;gt;name, " inaccessible, removing\n";&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dssys-&amp;gt;RemoveDatastore(datastore =&amp;gt; $dsRef);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;=====================end script ====================================&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;If I run it with the --list switch it's ok:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;perl rm-esx-inaccessible-nasdatastores --list&lt;BR /&gt;esx1.domain.tld&lt;BR /&gt;esx2.domain.tld&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;.....&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;esx222.domain.tld&lt;BR /&gt;Datastore NFS_Sata_02_GX_BACKUP_15358_2 inaccessible&lt;BR /&gt;Datastore NFS_Sata_04_GX_BACKUP_15361_2 inaccessible&lt;BR /&gt;esx333.domain.tld&lt;BR /&gt;Datastore NFS_Sata_01_GX_BACKUP_15359_2 inaccessible&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;esxxxx.domain.tld&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;esxxxx.domain.tld&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Datastore NFS_TEMP_GX_BACKUP_15357_2 inaccessible&lt;BR /&gt;&lt;BR /&gt;is it possible to use a vcenter role to remove datastores or do I have to create local roles and local users?&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Apr 2015 14:08:23 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401456#M364</guid>
      <dc:creator>natxoasenjo</dc:creator>
      <dc:date>2015-04-14T14:08:23Z</dc:date>
    </item>
    <item>
      <title>Re: remove datastore role</title>
      <link>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401457#M365</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Have you tried it with a full VMware Admin account? &amp;nbsp;Definitely looks like a permission issue.&lt;BR /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Apr 2015 14:41:08 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401457#M365</guid>
      <dc:creator>stumpr</dc:creator>
      <dc:date>2015-04-14T14:41:08Z</dc:date>
    </item>
    <item>
      <title>Re: remove datastore role</title>
      <link>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401458#M366</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;with a administrator role account:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SOAP Fault:&lt;/P&gt;&lt;P&gt;-----------&lt;/P&gt;&lt;P&gt;Fault string: The vSphere HA agent on host 'esxxxx.domain.tld failed to quiesce file activity on datastore '/vmfs/volumes/2352de7a-a4778453'. To proceed with the operation to unmount or remove a datastore, ensure that the datastore is accessible, the host is reachable and its vSphere HA agent is running.&lt;/P&gt;&lt;P&gt;Fault detail: QuiesceDatastoreIOForHAFailedFault&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I cannot remove them using the vcenter gui either, so it appears the permissions message is a bit bogus.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;O well, I'll write a script to create a local role, add a local user to that role and remove the datastore per esx host. A bit more work but thanks to this nice api quite doable.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Apr 2015 06:42:14 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401458#M366</guid>
      <dc:creator>natxoasenjo</dc:creator>
      <dc:date>2015-04-15T06:42:14Z</dc:date>
    </item>
    <item>
      <title>Re: remove datastore role</title>
      <link>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401459#M367</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Possible condition below.&amp;nbsp; There was a bug in 5.1 I think as well, I'd have to dig up the KB.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin: 1em 0 0; padding: 0 6px 1.15em 0; font-size: 16px; font-weight: bold; color: black; font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/P&gt;&lt;DIV class="Name"&gt;Unmounting or Removing Datastore Fails &lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;P class="AppleTopicBody" style="font-size: 12px; color: #333333; font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/P&gt;&lt;DIV class="Intro" style="margin: 0 2em 1.65em 0;"&gt;&lt;P class="Para" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important;"&gt;When you try to unmount or remove a datastore, the operation fails. &lt;/P&gt;&lt;DIV class="SectionLabel" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important; font-weight: bold; color: black;"&gt;Problem&lt;P&gt;&lt;/P&gt;&lt;P class="Para" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important;"&gt;&lt;A name="GUID-E325DFF9-5CFF-4E17-AFF1-36BFA467D098__P_F6948B68FB844AFB927BDE9678BA10CC" shape="rect"&gt;&lt;/A&gt;The operation to unmount or remove a datastore fails if the datastore has any opened files. For these user operations, the vSphere HA agent closes all of the files that it has opened, for example, heartbeat files. If the agent is not reachable by vCenter Server or the agent cannot flush out pending I/Os to close the files, a &lt;TT class="msgph" style="font-family: 'Lucida Console', 'Courier New', monospace; font-size: 14px;"&gt;The HA agent on host '{hostName}' failed to quiesce file activity on datastore '{dsName}&lt;/TT&gt; fault is triggered. &lt;/P&gt;&lt;P class="SectionLabel" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important; font-weight: bold; color: black;"&gt;Cause&lt;/P&gt;&lt;P class="Section" style="margin: -13px 0 0; padding: 9px 0 0;"&gt;&lt;/P&gt;&lt;P class="Para" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important;"&gt;&lt;A name="GUID-E325DFF9-5CFF-4E17-AFF1-36BFA467D098__P_3F3D81A99F234A578FCEFE457B72C454" shape="rect"&gt;&lt;/A&gt;If the datastore to be unmounted or removed is used for heartbeating, vCenter Server excludes it from heartbeating and chooses a new one. However, the agent does not receive the updated heartbeat datastores if it is not reachable, that is, if the host is isolated or in a network partition. In such cases, heartbeat files are not closed and the user operation fails. The operation can also fail if the datastore is not accessible because of storage failures such as all paths down.&lt;/P&gt;&lt;DIV class="Alert" style="margin: 20px 0; border-top-color: #dcdcdc; border-top-style: solid; border-top-width: 2px; border-bottom-color: #dcdcdc; border-bottom-style: solid; border-bottom-width: 2px;"&gt;&lt;DIV class="Note" style="margin: 0.5em 0;"&gt;&lt;A name="GUID-E325DFF9-5CFF-4E17-AFF1-36BFA467D098__NOTE_1BF556C8E52640C8BA4F4FABFA570451" shape="rect"&gt;&lt;/A&gt;&lt;DIV class="NoteLabel" style="margin-bottom: 0.5em; margin-left: 0 !important; font-size: 0.9em !important; font-weight: bold; color: #000000;"&gt;Note&lt;P&gt;&lt;/P&gt;&lt;P class="Para" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important;"&gt;&lt;A name="GUID-E325DFF9-5CFF-4E17-AFF1-36BFA467D098__d139t58" shape="rect"&gt;&lt;/A&gt;When you remove a VMFS datastore, the datastore is removed from all the hosts in inventory. So if there are any hosts in a vSphere HA cluster that are unreachable or that cannot access the datastore, the operation fails.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P class="SectionLabel" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important; font-weight: bold; color: black;"&gt;Solution&lt;/P&gt;&lt;P class="Para" style="margin-top: 0 !important; margin-bottom: 0 !important; padding-top: 0.4em !important; padding-bottom: 0.35em !important;"&gt;&lt;A name="GUID-E325DFF9-5CFF-4E17-AFF1-36BFA467D098__P_D3EE048BE2B945F9BF5FED5CC5F6D367" shape="rect"&gt;&lt;/A&gt;Ensure that the datastore is accessible and the affected hosts are reachable.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Apr 2015 14:08:34 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401459#M367</guid>
      <dc:creator>stumpr</dc:creator>
      <dc:date>2015-04-15T14:08:34Z</dc:date>
    </item>
    <item>
      <title>Re: remove datastore role</title>
      <link>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401460#M368</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I opened a case with vmware support and the correct answer is: 1. run it as root, or: 2. clone the local administrator role and start removing permissions until the right combination is met. I will test that path and come back when I get that combination &lt;img class="lia-deferred-image lia-image-emoji" src="https://communities.vmware.com/html/@7651DD0E8772B3B5D93ADA9ABA2E067C/emoticons/1f642.png" alt=":slightly_smiling_face:" title=":slightly_smiling_face:" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Apr 2015 07:03:31 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/vSphere-SDK-for-Perl-Discussions/remove-datastore-role/m-p/401460#M368</guid>
      <dc:creator>natxoasenjo</dc:creator>
      <dc:date>2015-04-22T07:03:31Z</dc:date>
    </item>
  </channel>
</rss>

