> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siderolabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

> HCloudVIPConfig is a config document to configure virtual IP using Hetzner Cloud APIs for announcement. Virtual IP configuration should be used only on controlplane nodes to provide virtual IP for Kubernetes API server. Any other use cases are not supported and may lead to unexpected behavior. Virtual IP will be announced from only one node at a time using Hetzner Cloud APIs.

# HCloudVIPConfig

export const VersionWarningBanner = () => {
  const latestVersion = "v1.13";
  const [latestUrl, setLatestUrl] = useState(null);
  const [currentVersion, setCurrentVersion] = useState(null);
  const [isBeta, setIsBeta] = useState(false);
  const parseVersion = v => v.replace("v", "").split(".").map(Number);
  const isGreaterVersion = (a, b) => {
    const [aMajor, aMinor] = parseVersion(a);
    const [bMajor, bMinor] = parseVersion(b);
    if (aMajor > bMajor) return true;
    if (aMajor === bMajor && aMinor > bMinor) return true;
    return false;
  };
  useEffect(() => {
    if (typeof window === "undefined") return;
    const {pathname, hash, search} = window.location;
    const match = pathname.match(/\/talos\/(v\d+\.\d+)\//);
    if (!match) return;
    const detectedVersion = match[1];
    if (detectedVersion === latestVersion) return;
    setCurrentVersion(detectedVersion);
    if (isGreaterVersion(detectedVersion, latestVersion)) {
      setIsBeta(true);
    }
    const newPath = pathname.replace(`/talos/${detectedVersion}/`, `/talos/${latestVersion}/`);
    setLatestUrl(`${newPath}${search}${hash}`);
  }, []);
  if (!latestUrl || !currentVersion) return null;
  return <div className="not-prose sticky top-6 z-50 my-6">
      <div className="border border-yellow-500/30 bg-yellow-500/10 px-4 py-3 rounded-xl">
        <div className="text-sm">
          {isBeta ? <>
              ⚠️ You are viewing a <strong>beta version</strong> of Talos ({currentVersion}).
              This version may be unstable.
              <a href={latestUrl} className="ml-2 underline text-yellow-400 hover:text-yellow-300 font-medium">
                View latest stable version {latestVersion} →
              </a>
            </> : <>
              ⚠️ You are viewing an older version of Talos ({currentVersion}).
              <a href={latestUrl} className="ml-2 underline text-yellow-400 hover:text-yellow-300 font-medium">
                View the latest version {latestVersion} →
              </a>
            </>}
        </div>
      </div>
    </div>;
};

<VersionWarningBanner />

```yaml theme={null}
apiVersion: v1alpha1
kind: HCloudVIPConfig
name: int0 # IP address to be advertised as a Layer 2 VIP.
link: enp0s2 # Name of the link to assign the VIP to.
apiToken: my-secret-token # Specifies the Hetzner Cloud API Token.
```

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
      <th>Value(s)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`name`</td>
      <td>string</td>
      <td>IP address to be advertised as a Layer 2 VIP.</td>

      <td />
    </tr>

    <tr>
      <td>`link`</td>
      <td>string</td>
      <td>Name of the link to assign the VIP to.<br /><br />Selector must match exactly one link, otherwise an error is returned.<br />If multiple selectors match the same link, the first one is used.</td>

      <td />
    </tr>

    <tr>
      <td>`apiToken`</td>
      <td>string</td>
      <td>Specifies the Hetzner Cloud API Token.</td>

      <td />
    </tr>
  </tbody>
</table>
