<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>
<!-- Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<section id="added-API-commands-4.1">
  <title>Added API Commands in 4.1</title>
  <itemizedlist>
    <listitem>
      <para>createEgressFirewallRules (creates an egress firewall rule on the guest network.)</para>
    </listitem>
    <listitem>
      <para>deleteEgressFirewallRules (deletes a egress firewall rule on the guest network.)</para>
    </listitem>
    <listitem>
      <para>listEgressFirewallRules (lists the egress firewall rules configured for a guest
        network.)</para>
    </listitem>
    <listitem>
      <para>resetSSHKeyForVirtualMachine (Resets the SSHkey for virtual machine.)</para>
    </listitem>
    <listitem>
      <para>addBaremetalHost (Adds a new host.)</para>
    </listitem>
    <listitem>
      <para>addNicToVirtualMachine (Adds a new NIC to the specified VM on a selected
        network.)</para>
    </listitem>
    <listitem>
      <para>removeNicFromVirtualMachine (Removes the specified NIC from a selected VM.)</para>
    </listitem>
    <listitem>
      <para>updateDefaultNicForVirtualMachine (Updates the specified NIC to be the default one for a
        selected VM.)</para>
    </listitem>
    <listitem>
      <para>addRegion (Registers a Region into another Region.)</para>
    </listitem>
    <listitem>
      <para>updateRegion (Updates Region details: ID, Name, Endpoint, User API Key, and User Secret
        Key.)</para>
    </listitem>
    <listitem>
      <para>removeRegion (Removes a Region from current Region.)</para>
    </listitem>
    <listitem>
      <para>listRegions (Get all the Regions. They can be filtered by using the ID or Name.)</para>
    </listitem>
    <listitem>
      <para>getUser (This API can only be used by the Admin. Get user details by using the API Key.)
      </para>
    </listitem>
    <listitem><para>addRegion (Add a region)</para></listitem>
    <listitem><para>removeRegion (Delete a region)</para></listitem>
    <listitem><para>updateRegion (Modify attributes of a region)</para></listitem>
    <listitem><para>listRegions (List regions)</para></listitem>
    <listitem><para></para></listitem>
  </itemizedlist>
</section>
