Skip to main content
skill Claude Code Gemini CLI CX Codex official · Google

google-cloud-filestore-log-troubleshooting — Claude Code skill for NFS

Diagnoses Google Cloud Filestore mount failures, access errors, and network timeouts. Use it when an NFS share stops mounting from a VM, GKE pod, or another supported workload.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add google/skills --skill google-cloud-filestore-log-troubleshooting -a claude-code
Open on GitHub

What google-cloud-filestore-log-troubleshooting does

The skill checks Filestore settings, VPC ingress firewall rules, and NFS export access lists. For GKE, it accounts for the worker node mounting the volume: Filestore sees the node's internal IP, not the pod IP. That distinction helps investigate EACCES, ETIMEDOUT, and mount.nfs reports of a timeout or denied access.

Run scripts/quick_diagnose.py for one instance or scan a project's instances with --all. The script accepts an instance ID, region or zone, project, and client IP or subnet. Diagnosis requires read roles for Filestore, networking, and logs; changing export ACLs or creating firewall rules requires additional roles. Use --apply-fix only after the user confirms the change.

This skill is for Filestore mount failures and related network or permission errors. Skip it for Cloud Storage, Persistent Disk, Cloud NetApp Volumes, capacity changes, or export-policy audits.

What it helps with

  • trace an NFS mount timeout to a network setting
  • check whether a client IP is allowed by the export ACL
  • compare VPC ingress rules with the client subnet
  • investigate EACCES after an administrative change
  • check why a GKE node cannot mount Filestore

Example prompts for the agent

  • Find out why this VM's Filestore mount fails with `Connection timed out`.
  • Compare the GKE node subnet with the export ACL and VPC ingress rules.
  • Diagnose every Filestore instance in this project and output JSON.

How to install google-cloud-filestore-log-troubleshooting

1Skills CLI (Vercel)

npx skills add google/skills --skill google-cloud-filestore-log-troubleshooting -a claude-code

2Manually: put the files in place

~/.claude/skills/google-cloud-filestore-log-troubleshooting/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/google-cloud-filestore-log-troubleshooting/

From the same set172

The whole set →
bigquery-basics official google Manages BigQuery resources and runs SQL queries. Use it to create datasets, tables and views, or handle basic data ingestion and analysis. Claude Code Gemini CLI CX Codex 17,678installs cloud-run-basics official google This skill helps an agent manage Cloud Run services, jobs, and worker pools when a project needs HTTP deployment, scheduled work, or pull-based background processing. Claude Code Gemini CLI CX Codex 17,532installs gemini-api official google Connects Gemini API from Google Cloud Agent Platform to the agent. Gives access to Gemini models, multimodal input, function calling, and context caching. Claude Code Gemini CLI CX Codex 17,116installs google-cloud-recipe-auth official Google LLC This skill explains Google Cloud authentication and permissions. Use it when setting up IAM, ADC, or service accounts for local code and production workloads. Claude Code Gemini CLI CX Codex 15,450installs google-cloud-recipe-onboarding official Google LLC Guides a developer through a first Google Cloud project: CLI checks, sign-in, project setup and billing. It fits a personal first project. Claude Code Gemini CLI CX Codex 15,390installs cloud-sql-basics official google This skill helps create and explain Cloud SQL resources for MySQL, PostgreSQL, and SQL Server. Use it when setting up a database in Google Cloud. Claude Code Gemini CLI CX Codex 14,679installs google-cloud-waf-security official google This skill reviews Google Cloud workloads against the security pillar of the Well-Architected Framework and suggests actions for IAM, networks, data, and operations. Claude Code Gemini CLI CX Codex 14,620installs google-cloud-waf-cost-optimization official google Reviews Google Cloud workloads through the Well-Architected Cost Optimization pillar. Use it to inspect spending, resize resources, assess discounts, or find idle capacity. Claude Code Gemini CLI CX Codex 14,266installs

Similar

paseo-help getpaseo Answers questions about Paseo setup, connections, providers, logs, and failures. Use it when you need to understand the daemon, workspaces, or app configuration. Claude Code CX Codex Cursor +1 1,400installs bash-scripting sickn33 A structured workflow for building shell scripts with defensive patterns, error handling, ShellCheck, and Bats tests. Claude Code CX Codex Cursor +1 2,400installs review-agent-setup Tom Farley This skill gates AI review actions behind manual human approval before pull requests or CI pipelines change. Every attempt generates an Ed25519-signed receipt for offline auditing. Claude Code CX Codex Cursor 5,200installs flowstudio-power-automate-build official github Build, deploy, and test Power Automate cloud flows through the FlowStudio MCP server. Use it when an agent needs to create or edit a workflow without opening the portal. GitHub Copilot 1,900installs database-optimizer https://github.com/Jeffallan Investigates slow PostgreSQL and MySQL queries, breaks down execution plans with EXPLAIN ANALYZE, and drafts indexes without table locks. Claude Code CX Codex Cursor +1 5,900installs cf-cli cloudflare Cloudflare's official CLI for the public API and Workers projects, now available in your editor. Search for commands by task description, manage DNS, storage, and deployments. Claude Code CX Codex Cursor +1 10,700installs wizard Matt Pocock This skill creates an interactive bash wizard for manual setup steps, CI secrets, third-party dashboards, and one-off migrations. Claude Code 553,369installs hyperframes-cli heygen-com Controls HyperFrames video workflows from the CLI: audits layouts and contrast, edits timeline clips, captures snapshots, and renders locally or in cloud runtimes. Claude Code CX Codex Cursor +1 1,200,000installs

Questions about google-cloud-filestore-log-troubleshooting

How do I install google-cloud-filestore-log-troubleshooting in Claude Code?

Run npx skills add google/skills --skill google-cloud-filestore-log-troubleshooting -a claude-code.

What does google-cloud-filestore-log-troubleshooting do?

It diagnoses Google Cloud Filestore mount failures, access errors, and network timeouts. It checks export ACLs, VPC firewall rules, and GKE CSI-related logs.

Why check a GKE node IP instead of a pod IP?

The Linux kernel on the GKE worker node mounts the PersistentVolume. Filestore sees the node's internal IP, so the node subnet is the relevant one to check.

Source text

SKILL.md · Apache-2.0
---
name: google-cloud-filestore-log-troubleshooting
metadata:
  version: "1.0.1"
  category: Storage
description: >-
  Diagnoses and resolves Filestore client mount failures on Google Cloud,
  permission errors (EACCES), and network timeouts (ETIMEDOUT). Use when an NFS
  mount hangs or fails from a Compute Engine VM, GKE pod, Cloud Run service, or
  Vertex AI workload, when `mount.nfs` reports "Connection timed out" or "access
  denied by server", when checking whether VPC ingress firewall rules or
  `nfsExportOptions` allow a client IP, or when a previously working Filestore
  share suddenly stops mounting after an administrative change. Don't use for
  Cloud Storage (GCS) buckets, Persistent Disk, or Cloud NetApp Volumes, and
  don't use for Filestore capacity scaling or backup and export-policy auditing.
---

<!-- disableFinding(LINE_OVER_80) -->

# Filestore Log-Based Troubleshooting

Diagnoses, troubleshoots, and remediates Filestore client mount failures, permission errors (`EACCES`), and network timeouts (`ETIMEDOUT`) across projects.

## Prerequisites & Quick Start

Required IAM roles on target project(s) (and Shared VPC host project if applicable):
*   **Read**: `roles/file.viewer` (instance & export ACLs), `roles/compute.networkViewer` (VPC firewall rules), `roles/logging.viewer` (Cloud Audit & GKE CSI logs), `roles/mcp.toolUser` (if using MCP tools).
*   **Write (Remediation only)**: `roles/file.editor` (export ACL updates), `roles/compute.securityAdmin` (firewall rule creation).

Authenticate, verify billing/APIs, and configure your environment:

```bash
gcloud auth login && gcloud auth application-default login
gcloud billing projects describe {project_id} --format="value(billingEnabled)"
gcloud services enable file.googleapis.com compute.googleapis.com logging.googleapis.com --quiet
gcloud config set project {project_id} && gcloud config set compute/region {region}
```

## Attribution

Prefix every `gcloud` command provided or executed with the skill metrics environment:

```bash
CLOUDSDK_METRICS_ENVIRONMENT="gcs-skills gcs-skills/1.0 (skill:google-cloud-filestore-log-troubleshooting)" \
gcloud filestore instances describe ...
```

On direct REST API calls, append HTTP header: `User-Agent: gcs-skills/1.0 (skill:google-cloud-filestore-log-troubleshooting)`.

## Conceptual & Informational Queries (CRITICAL)

For purely conceptual, architectural, or educational questions (e.g., "What causes EACCES on Filestore?", "Why does GKE Node IP appear instead of Pod IP?", "What ports does Filestore require?", "Explain root squash"):
*   **Rule**: **Answer immediately using pre-trained knowledge and the workflow rules below.** Answering directly minimizes tool latency and token usage when the user only seeks architectural guidance.
*   **Constraint**: **Do not execute external tool calls or API requests** for basic knowledge questions.

## Handling "No-Command" Constraints (CRITICAL)

If the user prompt contains constraints like "Do not execute commands", "without executing", or "read-only":
*   **Rule**: **Strictly avoid calling `run_command`** to execute any shell, Python, or `gcloud` commands.
*   **Discovery**:
    1.  First, check if Filestore MCP tools (`get_instance`, `list_instances`) are available and use them (API calls, not command executions).
    2.  If MCP tools are unavailable, read `references/mock-fleet-data.md` **only if** the requested instance matches one of the evaluation scenarios (`finance-share`, `shared-nfs`, `ml-data`, `data-hub`, `prod-share`). Never report mock data as live production state. If the instance is not listed there, state that live access is required and provide the exact commands for the user to run.
    3.  **Fast-Path Stop Rule**: Once you locate the target instance in `references/mock-fleet-data.md`, **stop reading additional files immediately** and formulate your response. Do **NOT** read `scripts/quick_diagnose.py`, `scripts/diagnose_lib.py`, `_internal/quick_diagnose_test.py`, or `EVAL.*` files when command execution is disabled, as inspecting code/test files wastes turns and triggers timeouts.
    4.  Explain the required diagnostic steps and output the exact attributed commands for manual execution.
*   **Mandatory User Confirmation Requirement**: Even when command execution is disabled or the user asks only for recommendations, your response **MUST STILL end with a clear question prompting the user for explicit confirmation** before applying any remediation (e.g., *"Would you like me to proceed with creating the VPC ingress firewall rule `[rule_name]`? Please confirm to proceed."*).

## Multi-Runtime Execution Options

### Option 1: Bundled Python CLI Script (Recommended for CLI / Terminal Agents)

```bash
# Single instance diagnosis
python3 scripts/quick_diagnose.py --instance="<INSTANCE_ID>" --location="<LOCATION_OR_ZONE>" \
    [--project="<PROJECT_ID>"] [--client-ip="<CLIENT_IP>"] [--client-subnet="<CLIENT_SUBNET_CIDR>"]

# Bulk project-wide fleet diagnosis
python3 scripts/quick_diagnose.py --all --project="<PROJECT_ID>" [--json]
```

| Flag | Purpose |
| :--- | :--- |
| `--instance`, `--location` | Filestore instance ID and region/zone (`--zone` is a legacy alias). Required unless `--all`. |
| `--project` | GCP project ID (defaults to active `gcloud` project). |
| `--client-ip` / `--client-subnet` | Client IP or CIDR to evaluate against export ACLs and ingress firewall rules. |
| `--json` | Emit machine-readable JSON on stdout (narrative report goes to stderr). |
| `--apply-fix` | Execute generated remediation commands. **Only pass after explicit user confirmation.** |

### Option 2: Filestore MCP Tools / REST API / `gcloud` CLI
*   **MCP Tools**: Call `get_instance(name='projects/{project_id}/locations/{location}/instances/{instance_id}')` and inspect `fileShares[0].nfsExportOptions` and `networks[0].network`.
*   **Native REST API (`call_gcp_api`)**: Invoke `service="file"`, `version="v1"`, `resource_path="projects/{project_id}/locations/{location}/instances/{instance_id}"`.
*   **Standard `gcloud`**:
    ```bash
    CLOUDSDK_METRICS_ENVIRONMENT="gcs-skills gcs-skills/1.0 (skill:google-cloud-filestore-log-troubleshooting)" \
    gcloud filestore instances describe {instance_id} --location={location} --project={project_id} --format=json
    ```

--------------------------------------------------------------------------------

## Core Operational Workflow

### Step 1: Parameter Extraction & GKE Node Architecture
*   Extract `instance`, `location` (region/zone), `project`, and `client_ip` / `client_subnet`. If target parameters are missing, list instances or ask the user to confirm.
*   **GKE Architecture Rule**: PersistentVolumes are mounted by the Linux kernel on the **GKE Worker Node**, not inside the Pod network namespace. Even if Pod IPs (`10.4.0.0/14`) are allowlisted, the NFS server sees traffic originating from the **GKE Node Internal IP**. Always evaluate and allowlist the **GKE Node Subnet CIDR** in `nfsExportOptions` and VPC firewall rules.

### Step 2: Instance Metadata & Shared VPC Resolution
1.  Verify instance `state` is `READY` (report state blocker if `CREATING`, `DELETING`, or `ERROR`).
2.  Extract primary Filestore IP (`networks[0].ipAddresses[0]`) and VPC network URI.
3.  If `networks[0].network` references `projects/{host_project}/global/networks/{network}`, resolve `{host_project}` as the Shared VPC host project for firewall queries.

### Step 3: Export ACL Evaluation (`EACCES` vs `EROFS`)
1.  Inspect `fileShares[0].nfsExportOptions` (if empty, default `0.0.0.0/0` `READ_WRITE` `NO_ROOT_SQUASH` applies).
2.  **`EACCES (Permission Denied by Server)`**: Triggered when the client IP or subnet CIDR is not covered by any `ipRanges` entry.
    *   **Remediation**: Non-destructively append the client IP/subnet CIDR to `nfsExportOptions`, preserving all existing export rules to avoid breaking active mounts.
3.  **`EROFS (Read-only file system)`**: Triggered when `accessMode` is `READ_ONLY` but client writes are attempted.

### Step 4: VPC Ingress Firewall Inspection (`ETIMEDOUT`)
1.  Query ingress firewall rules in the VPC network (in the host project if Shared VPC).
2.  **`ETIMEDOUT (Connection Timed Out)`**: Triggered when priority-sorted ingress rules block or fail to allow TCP port `2049` (NFS) and TCP/UDP port `111` (rpcbind) from the client CIDR.
    *   **Remediation**: Create an ingress firewall rule (`ALLOW` `tcp:2049,udp:2049,tcp:111,udp:111`) from the client subnet CIDR.

### Step 5: Cloud Audit Logs & Configuration Drift Scanning
Query Cloud Audit Admin Activity logs (`file.googleapis.com`) over the past 24 hours to check if an `UpdateInstance` operation modified export ACLs or networks:

```bash
CLOUDSDK_METRICS_ENVIRONMENT="gcs-skills gcs-skills/1.0 (skill:google-cloud-filestore-log-troubleshooting)" \
gcloud logging read 'logName="projects/{project_id}/logs/cloudaudit.googleapis.com%2Factivity" AND protoPayload.serviceName="file.googleapis.com" AND protoPayload.resourceName=~".*{instance}.*"' \
    --project="{project_id}" --freshness="1d" --limit=5 --format="json"
```

*   **Scope to Admin Activity**: Always include `cloudaudit.googleapis.com%2Factivity` in `logName` so read-only `GetInstance`/`ListInstances` calls (`data_access`) are not falsely flagged as administrative drift.
*   **Drift is Informational**: Recent `UpdateInstance` events explain *when* and *by whom* (`principalEmail`, `timestamp`) configuration changed, but only a failed export ACL or firewall check constitutes a mount blocker.
*   **Single Bulk Query Rule**: When scanning multiple instances (`--all`), issue a single project-wide audit log query rather than per-instance queries in a loop.
*   **GKE CSI Driver Logs**: Optionally inspect `resource.labels.container_name="gcp-filestore-driver"` (`severity>=ERROR`) for client-side mount errors.

--------------------------------------------------------------------------------

## Output Format & Mandatory Confirmation Gate

Every diagnostic report MUST include a structured summary table and root cause analysis:

````markdown
### Filestore Diagnostic Report: `[instance-name]`

| Parameter | Value |
| :--- | :--- |
| **Instance ID** | `[instance-name]` (`[location]`, Tier: `[tier]`, State: `READY`) |
| **Filestore IP & Network** | `[filestore-ip]` on VPC `[network-name]` (Host Project: `[host-project]`) |
| **Port 2049 & Export ACL** | Port 2049: `OPEN / BLOCKED` \| Export ACL: `PASS / REJECTED` |
| **Diagnostic Verdict** | **HEALTHY** or **BLOCKED: [Root Cause]** |

#### Root Cause Analysis & Recommended Remediation
- [Explanation of ETIMEDOUT (missing firewall rule on port 2049) vs EACCES (missing export ACL rule) and any recent UpdateInstance audit drift]

```bash
CLOUDSDK_METRICS_ENVIRONMENT="gcs-skills gcs-skills/1.0 (skill:google-cloud-filestore-log-troubleshooting)" \
gcloud compute firewall-rules create ...
```
````

### Interactive Remediation Confirmation Gate (MANDATORY)
*   **NEVER execute write or remediation commands without explicit user confirmation.**
*   Always conclude your response with an explicit confirmation question:
    > *"Would you like me to proceed with executing this remediation command for you? Please confirm to proceed."*

## References & Bundled Scripts
*   [Error Signatures & Architecture Matrix](references/error-signatures.md)
*   [Cloud Logging & Audit Drift Queries](references/logging-and-audit-queries.md)
*   [VPC Network & Firewall Specification](references/network-firewall-spec.md)
*   [Mock Fleet Data for Evaluations](references/mock-fleet-data.md)
*   `scripts/quick_diagnose.py` & `scripts/diagnose_lib.py`: Zero-dependency CLI runner and pure-Python evaluation engine.

© google · Apache-2.0 · google/skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor