type=page
status=published
title=Administering GlassFish Server Nodes
next=clusters.html
prev=ssh-setup.html
~~~~~~

Administering GlassFish Server Nodes
====================================

[[GSHAG00004]][[gkrle]]


[[administering-glassfish-server-nodes]]
3 Administering GlassFish Server Nodes
--------------------------------------

A node represents a host on which the GlassFish Server software is
installed. A node must exist for every host on which GlassFish Server
instances reside. A node's configuration contains information about the
host such as the name of the host and the location where the GlassFish
Server is installed on the host.

The following topics are addressed here:

* link:#gksgh[Types of GlassFish Server Nodes]
* link:#CHDBIHFJ[Creating, Listing, Testing, and Deleting `DCOM` Nodes]
* link:#gkrkn[Creating, Listing, Testing, and Deleting `SSH` Nodes]
* link:#gkrnp[Creating, Listing, and Deleting `CONFIG` Nodes]
* link:#gksjd[Updating and Changing the Type of a Node]

[[gksgh]][[GSHAG00179]][[types-of-glassfish-server-nodes]]

Types of GlassFish Server Nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Each GlassFish Server node is one of the following types of node:

`DCOM`::
  A `DCOM` node supports communication over the Distributed Component
  Object Model (DCOM) remote protocol. The DCOM remote protocol is
  available only on Windows systems. If DCOM is set up and you plan to
  administer your GlassFish Server instances centrally, the instances
  must reside on `DCOM` nodes. +
  A `DCOM` node's configuration contains the information that is
  required to connect to the host through DCOM. This information
  includes, for example, the user name of the Windows user and the port
  number for DCOM connections to the host.
`SSH`::
  An `SSH` node supports communication over secure shell (SSH). If SSH
  is set up and you plan to administer your GlassFish Server instances
  centrally, the instances must reside on `SSH` nodes. +
  An `SSH` node's configuration contains the information that is
  required to connect to the host through SSH. This information
  includes, for example, the user name of the SSH user and the port
  number for SSH connections to the host.
`CONFIG`::
  A `CONFIG` node does not support remote communication. If neither DCOM
  nor SSH is set up and you plan to administer your instances locally,
  the instances can reside on `CONFIG` nodes. You cannot use `CONFIG`
  nodes for instances that you plan to administer centrally. +
  Each domain contains a predefined `CONFIG` node that is named
  ``localhost-``domain, where domain is the name of the domain. On the
  host where the domain administration server (DAS) is running, this
  node represents the local host.

[[CHDBIHFJ]][[GSHAG463]][[creating-listing-testing-and-deleting-dcom-nodes]]

Creating, Listing, Testing, and Deleting `DCOM` Nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A `DCOM` node supports communication over DCOM. If DCOM is set up and
you plan to administer your GlassFish Server instances centrally, the
instances must reside on `DCOM` nodes. For information about setting up
DCOM, see link:ssh-setup.html#gkshg[Enabling Centralized Administration
of GlassFish Server Instances].

GlassFish Server enables you to create `DCOM` nodes for use by
instances, obtain information about `DCOM` nodes, test if `DCOM` nodes
are reachable, and delete `DCOM` nodes that are no longer required.

The following topics are addressed here:

* link:#CHDIGBJB[To Create a `DCOM` Node]
* link:#CHDDCBEG[To List `DCOM` Nodes in a Domain]
* link:#CHDIFJCC[To Test if a `DCOM` Node is Reachable]
* link:#CHDCFHBA[To Delete a `DCOM` Node]

[[CHDIGBJB]][[GSHAG464]][[to-create-a-dcom-node]]

To Create a `DCOM` Node
^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-node-dcom` subcommand in remote mode to create a `DCOM` node.

[[GSHAG465]]

Before You Begin

Ensure that the Windows user can use DCOM to connect to the host that
the node will represent. By default, the `create-node-dcom` subcommand
validates the node's parameters and the DCOM connection to the host.
If the Windows user cannot use DCOM to connect to the host, the validation fails.


[NOTE]
====
For information about how to determine whether the Windows user can use
DCOM to connect to the host, see link:ssh-setup.html#CEGJFADH[To Test the
Connection Over DCOM to a Remote Host].
====


1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the `create-node-dcom` subcommand. +
Specify the file that contains the alias for the Windows user's password
through the `--passwordfile` option of the `asadmin` utility. For more
information about this file, see link:ssh-setup.html#CEGCDCEF[To Set Up
Password Authentication for the Windows User].
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for configuring the
node, see the link:../reference-manual/create-node-dcom.html#GSRFM510[`create-node-dcom`(1)] help page.
====
+
[source]
----
C:\> asadmin --passwordfile filename create-node-dcom
--nodehost node-host [--installdir install-dir ]
node-name
----
filname::
  The name of the file that contains the alias for the Windows user's
  password.
node-host::
  The name of the host that the node represents. The name of the host
  must be specified. Otherwise, an error occurs.
install-dir::
  The full path to the parent of the base installation directory of the
  GlassFish Server software on the host, for example, `C:\glassfish7`.
  If the GlassFish Server software is installed in the same directory on
  the node's host and the DAS host, you can omit this option.
node-name::
  Your choice of name for the node that you are creating.

[[GSHAG466]][[sthref13]]
Example 3-1 Creating a `DCOM` Node

This example creates the `DCOM` node `wpmdl1` to represent the host
`wpmdl1.example.com`. The GlassFish Server software is installed in the
same directory on the DAS host and on the host `wpmdl1.example.com`.

[source]
----
C:\> asadmin --passwordfile aspwalias.txt create-node-dcom
--nodehost wpmdl1.example.com wpmdl1
Command create-node-dcom executed successfully.
----

[[GSHAG467]]

See Also

* link:../reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)]
* link:../reference-manual/create-node-dcom.html#GSRFM510[`create-node-dcom`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-node-dcom` at the command line.

[[GSHAG468]]

Next Steps

After creating a node, you can create instances on the node as explained
in the following sections:

* link:instances.html#gkqch[To Create an Instance Centrally]
* link:instances.html#gkqbl[To Create an Instance Locally]

[[CHDDCBEG]][[GSHAG469]][[to-list-dcom-nodes-in-a-domain]]

To List `DCOM` Nodes in a Domain
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-nodes-dcom` subcommand in remote mode to obtain
information about existing `DCOM` nodes in a domain.


[NOTE]
====
To obtain information about all existing nodes in a domain, use the
link:../reference-manual/list-nodes.html#GSRFM00187[`list-nodes`] subcommand.
====


1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the link:../reference-manual/list-nodes-dcom.html#GSRFM693[`list-nodes-dcom`] subcommand.
+
[source]
----
asadmin> list-nodes-dcom
----

[[GSHAG470]][[sthref14]]
Example 3-2 Listing Basic Information About All `DCOM` Nodes in a Domain

This example lists the name, type, and host of all `DCOM` nodes in the
current domain.

[source]
----
asadmin> list-nodes-dcom
xkyd  DCOM  xkyd.example.com
wpmdl2  DCOM  wpmdl2.example.com
wpmdl1  DCOM  wpmdl1.example.com
Command list-nodes-dcom executed successfully.
----

[[GSHAG471]][[sthref15]]
Example 3-3 Listing Detailed Information About All `DCOM` Nodes in a
Domain

This example lists detailed information about all `DCOM` nodes in the
current domain.

[source]
----
asadmin> list-nodes-dcom --long=true
NODE NAME    TYPE   NODE HOST            INSTALL DIRECTORY   REFERENCED BY
xkyd         DCOM   xkyd.example.com     C:\glassfish7
wpmdl2       DCOM   wpmdl2.example.com   C:\glassfish7       wdi2
wpmdl1       DCOM   wpmdl1.example.com   C:\glassfish7       wdi1
Command list-nodes-dcom executed successfully.
----

[[GSHAG472]]

See Also

* link:../reference-manual/list-nodes.html#GSRFM00187[`list-nodes`(1)]
* link:../reference-manual/list-nodes-dcom.html#GSRFM693[`list-nodes-dcom`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help list-nodes`
* `asadmin help list-nodes-dcom`

[[CHDIFJCC]][[GSHAG473]][[to-test-if-a-dcom-node-is-reachable]]

To Test if a `DCOM` Node is Reachable
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `ping-node-dcom` subcommand in remote mode to test if a `DCOM`
node is reachable.

[[GSHAG474]]

Before You Begin

Ensure that DCOM is configured on the host where the DAS is running and
on the host that the node represents.

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the `ping-node-dcom` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for testing the node,
see the link:../reference-manual/ping-node-dcom.html#GSRFM728[`ping-node-dcom`(1)] help page.
====
+
[source]
----
asadmin> ping-node-dcom node-name
----
node-name::
  The name of the node to test.

[[GSHAG475]][[sthref16]]
Example 3-4 Testing if a `DCOM` Node Is Reachable

This example tests if the `DCOM` node `wpmdl2` is reachable.

[source]
----
asadmin> ping-node-dcom wpmdl2
Successfully made DCOM connection to node wpmdl2 (wpmdl2.example.com)
Command ping-node-dcom executed successfully.
----

[[GSHAG476]]

See Also

link:../reference-manual/ping-node-dcom.html#GSRFM728[`ping-node-dcom`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help ping-node-dcom` at the command line.

[[CHDCFHBA]][[GSHAG477]][[to-delete-a-dcom-node]]

To Delete a `DCOM` Node
^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-node-dcom` subcommand in remote mode to delete a `DCOM` node.

Deleting a node removes the node from the configuration of the DAS. The
node's directories and files are deleted when the last GlassFish Server
instance that resides on the node is deleted.

[[GSHAG478]]

Before You Begin

Ensure that no GlassFish Server instances reside on the node that you
are deleting. For information about how to delete an instance, see the
following sections.

* link:instances.html#gkqcw[To Delete an Instance Centrally]
* link:instances.html#gkqed[To Delete an Instance Locally]

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Confirm that no instances reside on the node that you are deleting.
+
[source]
----
asadmin> list-nodes-dcom --long=true
----
3. Run the olink:GSRFM00100[`delete-node-dcom`] subcommand.
+
[source]
----
asadmin> delete-node-dcom node-name
----
node-name::
  The name of the node that you are deleting.

[[GSHAG479]][[sthref17]]
Example 3-5 Deleting a `DCOM` Node

This example confirms that no instances reside on the `DCOM` node `xkyd`
and deletes the node `xkyd`.

[source]
----
asadmin> list-nodes-dcom --long=true
NODE NAME    TYPE   NODE HOST            INSTALL DIRECTORY   REFERENCED BY
xkyd         DCOM   xkyd.example.com     C:\glassfish7
wpmdl2       DCOM   wpmdl2.example.com   C:\glassfish7       wdi2
wpmdl1       DCOM   wpmdl1.example.com   C:\glassfish7       wdi1
Command list-nodes-dcom executed successfully.
asadmin> delete-node-dcom xkyd
Command delete-node-dcom executed successfully.
----

[[GSHAG480]]

See Also

* link:instances.html#gkqcw[To Delete an Instance Centrally]
* link:instances.html#gkqed[To Delete an Instance Locally]
* link:../reference-manual/delete-node-dcom.html#GSRFM569[`delete-node-dcom`(1)]
* link:../reference-manual/list-nodes-dcom.html#GSRFM693[`list-nodes-dcom`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help delete-node-dcom`
* `asadmin help list-nodes-dcom`

[[gkrkn]][[GSHAG00180]][[creating-listing-testing-and-deleting-ssh-nodes]]

Creating, Listing, Testing, and Deleting `SSH` Nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

An `SSH` node supports communication over SSH. If SSH is set up and you
plan to administer your GlassFish Server instances centrally, the
instances must reside on `SSH` nodes. For information about setting up
SSH, see link:ssh-setup.html#gkshg[Enabling Centralized Administration of
GlassFish Server Instances].


[NOTE]
====
Windows systems also support communications over DCOM as an alternative to SSH.
====


GlassFish Server enables you to create `SSH` nodes for use by instances,
obtain information about `SSH` nodes, test if `SSH` nodes are reachable,
and delete `SSH` nodes that are no longer required.

The following topics are addressed here:

* link:#gkrnf[To Create an `SSH` Node]
* link:#gkrme[To List `SSH` Nodes in a Domain]
* link:#gksig[To Test if an `SSH` Node is Reachable]
* link:#gkrlz[To Delete an `SSH` Node]

[[gkrnf]][[GSHAG00088]][[to-create-an-ssh-node]]

To Create an `SSH` Node
^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-node-ssh` subcommand in remote mode to create an `SSH`
node.

[[GSHAG347]]

Before You Begin

Ensure that the SSH user can use SSH to log in to the host that the node
will represent. By default, the `create-node-ssh` subcommand validates
the node's parameters and the SSH connection to the host. If the SSH
user cannot use SSH to log in to the host, the validation fails.

1. Ensure that the DAS is running. Remote subcommands require a running server.
2. Run the `create-node-ssh` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for configuring the
node, see the link:../reference-manual/create-node-ssh.html#GSRFM00048[`create-node-ssh`(1)] help page.

If you are using password authentication for the SSH user, you must
specify a password file through the `--passwordfile` option of the
link:../reference-manual/asadmin.html#GSRFM00263[`asadmin`] utility. For more information about SSH user
authentication, see link:ssh-setup.html#gkshh[Setting Up SSH User
Authentication].
====
+
[source]
----
asadmin> create-node-ssh --nodehost node-host [--installdir install-dir ]
node-name
----
node-host::
  The name of the host that the node represents. The name of the host
  must be specified. Otherwise, an error occurs.
install-dir::
  The full path to the parent of the base installation directory of the
  GlassFish Server software on the host, for example,
  `/export/glassfish7/`. If the GlassFish Server software is installed
  in the same directory on the node's host and the DAS host, you can
  omit this option.
node-name::
  Your choice of name for the node that you are creating.

[[GSHAG00020]][[gksih]]
Example 3-6 Creating an `SSH` Node

This example creates the `SSH` node `sj01` to represent the host
`sj01.example.com`. The GlassFish Server software is installed in the
same directory on the DAS host and on the host `sj01.example.com`.

[source]
----
asadmin> create-node-ssh --nodehost sj01.example.com sj01
Command create-node-ssh executed successfully.
----

[[GSHAG348]]

Troubleshooting

The `create-node-ssh` subcommand might fail to create the node and
report the error `Illegal sftp packet len`. If this error occurs, ensure
that no the startup file on the remote host displays text for
noninteractive shells. Examples of startup files are `.bashrc`,
`.cshrc`, `.login`, and `.profile`.

The SSH session interprets any text message that is displayed during
login as a file-transfer protocol packet. Therefore, any statement in a
startup file that displays text messages corrupts the SSH session,
causing this error.

[[GSHAG349]]

See Also

link:../reference-manual/create-node-ssh.html#GSRFM00048[`create-node-ssh`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-node-ssh` at the command line.

[[GSHAG350]]

Next Steps

After creating a node, you can create instances on the node as explained
in the following sections:

* link:instances.html#gkqch[To Create an Instance Centrally]
* link:instances.html#gkqbl[To Create an Instance Locally]

[[gkrme]][[GSHAG00089]][[to-list-ssh-nodes-in-a-domain]]

To List `SSH` Nodes in a Domain
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-nodes-ssh` subcommand in remote mode to obtain information
about existing `SSH` nodes in a domain.


[NOTE]
====
To obtain information about all existing nodes in a domain, use the
link:../reference-manual/list-nodes.html#GSRFM00187[`list-nodes`] subcommand.
====


1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the link:../reference-manual/list-nodes-ssh.html#GSRFM00189[`list-nodes-ssh`] subcommand.
+
[source]
----
asadmin> list-nodes-ssh
----

[[GSHAG00021]][[gkskt]]
Example 3-7 Listing Basic Information About All `SSH` Nodes in a Domain

This example lists the name, type, and host of all `SSH` nodes in the
current domain.

[source]
----
asadmin> list-nodes-ssh
sj01  SSH  sj01.example.com
sj02  SSH  sj02.example.com
Command list-nodes-ssh executed successfully.
----

[[GSHAG00022]][[gkske]]
Example 3-8 Listing Detailed Information About All `SSH` Nodes in a
Domain

This example lists detailed information about all `SSH` nodes in the
current domain.

[source]
----
asadmin> list-nodes-ssh --long=true
NODE NAME   TYPE   NODE HOST          INSTALL DIRECTORY    REFERENCED BY
sj01        SSH    sj01.example.com   /export/glassfish7   pmd-i1
sj02        SSH    sj02.example.com   /export/glassfish7   pmd-i2
Command list-nodes-ssh executed successfully.
----

[[GSHAG351]]

See Also

* link:../reference-manual/list-nodes.html#GSRFM00187[`list-nodes`(1)]
* link:../reference-manual/list-nodes-ssh.html#GSRFM00189[`list-nodes-ssh`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help list-nodes`
* `asadmin help list-nodes-ssh`

[[gksig]][[GSHAG00090]][[to-test-if-an-ssh-node-is-reachable]]

To Test if an `SSH` Node is Reachable
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `ping-node-ssh` subcommand in remote mode to test if an `SSH`
node is reachable.

[[GSHAG352]]

Before You Begin

Ensure that SSH is configured on the host where the DAS is running and
on the host that the node represents.

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the `ping-node-ssh` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for testing the node,
see the link:../reference-manual/ping-node-ssh.html#GSRFM00215[`ping-node-ssh`(1)] help page.
====
+
[source]
----
asadmin> ping-node-ssh node-name
----
node-name::
  The name of the node to test.

[[GSHAG00023]][[gkshk]]
Example 3-9 Testing if an `SSH` Node Is Reachable

This example tests if the `SSH` node `sj01` is reachable.

[source]
----
asadmin> ping-node-ssh sj01
Successfully made SSH connection to node sj01 (sj01.example.com)
Command ping-node-ssh executed successfully.
----

[[GSHAG353]]

See Also

link:../reference-manual/ping-node-ssh.html#GSRFM00215[`ping-node-ssh`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help ping-node-ssh` at the command line.

[[gkrlz]][[GSHAG00091]][[to-delete-an-ssh-node]]

To Delete an `SSH` Node
^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-node-ssh` subcommand in remote mode to delete an `SSH`
node.

Deleting a node removes the node from the configuration of the DAS. The
node's directories and files are deleted when the last GlassFish Server
instance that resides on the node is deleted.

[[GSHAG354]]

Before You Begin

Ensure that no GlassFish Server instances reside on the node that you
are deleting. For information about how to delete an instance, see the
following sections.

* link:instances.html#gkqcw[To Delete an Instance Centrally]
* link:instances.html#gkqed[To Delete an Instance Locally]

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Confirm that no instances reside on the node that you are deleting.
+
[source]
----
asadmin> list-nodes-ssh --long=true
----
3. Run the olink:GSRFM00100[`delete-node-ssh`] subcommand.
+
[source]
----
asadmin> delete-node-ssh node-name
----
node-name::
  The name of the node that you are deleting.

[[GSHAG00024]][[gksjg]]
Example 3-10 Deleting an `SSH` Node

This example confirms that no instances reside on the `SSH` node `sj01`
and deletes the node `sj01`.

[source]
----
asadmin> list-nodes-ssh --long=true
NODE NAME   TYPE   NODE HOST          INSTALL DIRECTORY    REFERENCED BY
sj01        SSH    sj01.example.com   /export/glassfish7
sj02        SSH    sj02.example.com   /export/glassfish7   pmd-i2
Command list-nodes-ssh executed successfully.
asadmin> delete-node-ssh sj01
Command delete-node-ssh executed successfully.
----

[[GSHAG355]]

See Also

* link:instances.html#gkqcw[To Delete an Instance Centrally]
* link:instances.html#gkqed[To Delete an Instance Locally]
* link:../reference-manual/delete-node-ssh.html#GSRFM00100[`delete-node-ssh`(1)]
* link:../reference-manual/list-nodes-ssh.html#GSRFM00189[`list-nodes-ssh`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help delete-node-ssh`
* `asadmin help list-nodes-ssh`

[[gkrnp]][[GSHAG00181]][[creating-listing-and-deleting-config-nodes]]

Creating, Listing, and Deleting `CONFIG` Nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A `CONFIG` node does not support remote communication. If neither DCOM
nor SSH is set up and you plan to administer your instances locally, the
instances can reside on `CONFIG` nodes. You cannot use `CONFIG` nodes
for instances that you plan to administer centrally.

GlassFish Server enables you to create `CONFIG` nodes for use by
instances, obtain information about `CONFIG` nodes, and delete `CONFIG`
nodes that are no longer required.

The following topics are addressed here:

* link:#gkrll[To Create a `CONFIG` Node]
* link:#gkrjr[To List `CONFIG` Nodes in a Domain]
* link:#gkrms[To Delete a `CONFIG` Node]

[[gkrll]][[GSHAG00092]][[to-create-a-config-node]]

To Create a `CONFIG` Node
^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-node-config` command in remote mode to create a `CONFIG` node.

[NOTE]
====
If you create an instance locally on a host for which no nodes are
defined, you can create the instance without creating a node beforehand.
In this situation, GlassFish Server creates a `CONFIG` node for you. The
name of the node is the unqualified name of the host. For more
information, see link:instances.html#gkqbl[To Create an Instance Locally].
====

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the `create-node-config` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for configuring the
node, see the link:../reference-manual/create-node-config.html#GSRFM00047[`create-node-config`(1)] help page.
====
+
[source]
----
asadmin> create-node-config [--nodehost node-host] [--installdir install-dir ]
node-name
----
node-host::
  The name of the host that the node represents. You may omit this
  option. The name of the host can be determined when instances that
  reside on the node are created.
install-dir::
  The full path to the parent of the base installation directory of the
  GlassFish Server software on the host, for example,
  `/export/glassfish7/`. You may omit this option. The installation
  directory can be determined when instances that reside on the node are
  created.
node-name::
  Your choice of name for the node that you are creating.

[[GSHAG00025]][[gkshu]]
Example 3-11 Creating a `CONFIG` Node

This example creates the `CONFIG` node `cfg01`. The host that the node
represents and the installation directory of the GlassFish Server
software on the host are to be determined when instances are added to
the node.

[source]
----
asadmin> create-node-config cfg01
Command create-node-config executed successfully.
----

[[GSHAG356]]

See Also

link:../reference-manual/create-node-config.html#GSRFM00047[`create-node-config`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-node-config` at the command line.

[[GSHAG357]]

Next Steps

After creating a node, you can create instances on the node as explained
in link:instances.html#gkqbl[To Create an Instance Locally].

[[gkrjr]][[GSHAG00093]][[to-list-config-nodes-in-a-domain]]

To List `CONFIG` Nodes in a Domain
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-nodes-config` subcommand in remote mode to obtain
information about existing `CONFIG` nodes in a domain.


[NOTE]
====
To obtain information about all existing nodes in a domain, use the
link:../reference-manual/list-nodes.html#GSRFM00187[`list-nodes`] subcommand.
====


1. Ensure that the DAS is running.
+
Remote subcommands require a running server.
2. Run the link:../reference-manual/list-nodes-config.html#GSRFM00188[`list-nodes-config`] subcommand.
+
[source]
----
asadmin> list-nodes-config
----

[[GSHAG00026]][[gkskp]]
Example 3-12 Listing Basic Information About All `CONFIG` Nodes in a
Domain

This example lists the name, type, and host of all `CONFIG` nodes in the
current domain.

[source]
----
asadmin> list-nodes-config
localhost-domain1  CONFIG  localhost
cfg01  CONFIG  cfg01.example.com
cfg02  CONFIG  cfg02.example.com
Command list-nodes-config executed successfully.
----

[[GSHAG00027]][[gksjs]]
Example 3-13 Listing Detailed Information About All `CONFIG` Nodes in a
Domain

This example lists detailed information about all `CONFIG` nodes in the
current domain.

[source]
----
asadmin> list-nodes-config --long=true
NODE NAME           TYPE     NODE HOST            INSTALL DIRECTORY    REFERENCED BY
localhost-domain1   CONFIG   localhost            /export/glassfish7
cfg01               CONFIG   cfg01.example.com    /export/glassfish7   yml-i1
cfg02               CONFIG   cfg02.example.com    /export/glassfish7   yml-i2
Command list-nodes-config executed successfully.
----

[[GSHAG358]]

See Also

* link:../reference-manual/list-nodes.html#GSRFM00187[`list-nodes`(1)]
* link:../reference-manual/list-nodes-config.html#GSRFM00188[`list-nodes-config`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help list-nodes`
* `asadmin help list-nodes-config`

[[gkrms]][[GSHAG00094]][[to-delete-a-config-node]]

To Delete a `CONFIG` Node
^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-node-config` subcommand in remote mode to delete a
`CONFIG` node.

Deleting a node removes the node from the configuration of the DAS. The
node's directories and files are deleted when the last GlassFish Server
instance that resides on the node is deleted.

[[GSHAG359]]

Before You Begin

Ensure that no GlassFish Server instances reside on the node that you
are deleting. For information about how to delete an instance that
resides on a `CONFIG` node, see link:instances.html#gkqed[To Delete an
Instance Locally].

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Confirm that no instances reside on the node that you are deleting.
+
[source]
----
asadmin> list-nodes-config --long=true
----
3. Run the olink:GSRFM00099[`delete-node-config`] subcommand.
+
[source]
----
asadmin> delete-node-config node-name
----
node-name::
  The name of the node that you are deleting.

[[GSHAG00028]][[gksla]]
Example 3-14 Deleting a `CONFIG` Node

This example confirms that no instances reside on the `CONFIG` node
`cfg01` and deletes the node `cfg01`.

[source]
----
asadmin> list-nodes-config --long=true
NODE NAME           TYPE     NODE HOST           INSTALL DIRECTORY    REFERENCED BY
localhost-domain1   CONFIG   localhost           /export/glassfish7
cfg01               CONFIG   cfg01.example.com   /export/glassfish7
cfg02               CONFIG   cfg02.example.com   /export/glassfish7   yml-i2
Command list-nodes-config executed successfully.
asadmin> delete-node-config cfg01
Command delete-node-config executed successfully.
----

[[GSHAG360]]

See Also

* link:instances.html#gkqed[To Delete an Instance Locally]
* link:../reference-manual/delete-node-config.html#GSRFM00099[`delete-node-config`(1)]
* link:../reference-manual/list-nodes-config.html#GSRFM00188[`list-nodes-config`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help delete-node-config`
* `asadmin help list-nodes-config`

[[gksjd]][[GSHAG00182]][[updating-and-changing-the-type-of-a-node]]

Updating and Changing the Type of a Node
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GlassFish Server enables you to update the configuration data of any
node and to change the type of a node.

The following topics are addressed here:

* link:#CHDHHAAE[To Update a `DCOM` Node]
* link:#gksjq[To Update an `SSH` Node]
* link:#gksjv[To Update a `CONFIG` Node]
* link:#gkski[To Change the Type of a Node]

[[CHDHHAAE]][[GSHAG481]][[to-update-a-dcom-node]]

To Update a `DCOM` Node
^^^^^^^^^^^^^^^^^^^^^^^

Use the `update-node-dcom` subcommand in remote mode to update a `DCOM` node.

Options of this subcommand specify the new values of the node's configuration data.
If you omit an option, the existing value is unchanged.

[[GSHAG482]]

Before You Begin

Ensure that the following prerequisites are met:

* DCOM is configured on the host where the DAS is running and on the
host that the node represents.
* The node that you are updating exists.

1. Ensure that the DAS is running. Remote subcommands require a running server.
2. Run the `update-node-dcom` subcommand.
+
[source]
----
asadmin> update-node-dcom options node-name
----
options::
  Options of the `update-node-dcom` subcommand for changing the node's
  configuration data. For information about these options, see the
  link:../reference-manual/update-node-ssh.html#GSRFM789[`update-node-dcom`(1)] help page.
node-name::
  The name of the `DCOM` node to update.

[[GSHAG483]][[sthref18]]
Example 3-15 Updating a `DCOM` Node

This example updates the host that the node `wpmdl1` represents to `wj01`.

[source]
----
asadmin> update-node-dcom --nodehost wj01 wpmdl1
Command update-node-dcom executed successfully.
----

[[GSHAG484]]

See Also

link:../reference-manual/update-node-ssh.html#GSRFM789[`update-node-dcom`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help update-node-dcom` at the command line.

[[gksjq]][[GSHAG00095]][[to-update-an-ssh-node]]

To Update an `SSH` Node
^^^^^^^^^^^^^^^^^^^^^^^

Use the `update-node-ssh` subcommand in remote mode to update an `SSH` node.

Options of this subcommand specify the new values of the node's
configuration data. If you omit an option, the existing value is unchanged.

[[GSHAG361]]

Before You Begin

Ensure that the following prerequisites are met:

* SSH is configured on the host where the DAS is running and on the host
that the node represents.
* The node that you are updating exists.

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the `update-node-ssh` subcommand.
+
[source]
----
asadmin> update-node-ssh options node-name
----
options::
  Options of the `update-node-ssh` subcommand for changing the node's
  configuration data. For information about these options, see the
  link:../reference-manual/update-node-ssh001.html#GSRFM00256[`update-node-ssh`(1)] help page.
node-name::
  The name of the `SSH` node to update.

[[GSHAG00029]][[gkslc]]
Example 3-16 Updating an `SSH` Node

This example updates the host that the node `sj01` represents to
`adc01.example.com`.

[source]
----
asadmin> update-node-ssh --nodehost adc01.example.com sj01
Command update-node-ssh executed successfully.
----

[[GSHAG362]]

See Also

link:../reference-manual/update-node-ssh001.html#GSRFM00256[`update-node-ssh`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help update-node-ssh` at the command line.

[[gksjv]][[GSHAG00096]][[to-update-a-config-node]]

To Update a `CONFIG` Node
^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `update-node-config` subcommand in remote mode to update a
`CONFIG` node.

Options of this subcommand specify the new values of the node's
configuration data. If you omit an option, the existing value is
unchanged.

[[GSHAG363]]

Before You Begin

Ensure that the node that you are updating exists.

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the `update-node-config` subcommand.
+
[source]
----
asadmin> uupdate-node-config options node-name
----
options::
  Options of the `update-node-config` subcommand for changing the node's
  configuration data. For information about these options, see the
  link:../reference-manual/update-node-config.html#GSRFM00255[`update-node-config`(1)] help page.
node-name::
  The name of the `CONFIG` node to update.

[[GSHAG00030]][[gkskc]]
Example 3-17 Updating a `CONFIG` Node

This example updates the host that the node `cfg02` represents to
`adc02.example.com`.

[source]
----
asadmin> update-node-config --nodehost adc02.example.com cfg02
Command update-node-config executed successfully.
----

[[GSHAG364]]

See Also

link:../reference-manual/update-node-config.html#GSRFM00255[`update-node-config`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help update-node-config` at the command line.

[[gkski]][[GSHAG00097]][[to-change-the-type-of-a-node]]

To Change the Type of a Node
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The subcommands for updating a node can also be used to change the type
of a node.

Changing the type of a `CONFIG` node enables remote communication for
the node. The type of the node after the change determines the protocol
over which the node is enabled for remote communication:

* A `DCOM` node is enabled for communication over DCOM.
* An `SSH` node is enabled for communication over SSH.

As part of the process of changing the type of a node, you can also
change other configuration data for the node.

Options of the subcommands for updating a node specify the new values of
the node's configuration data. For most options, if you omit the option,
the existing value is unchanged. However, default values are applied in
the following situations:

* Any of the following options of the `update-node-dcom` subcommand is
omitted:

** `--windowsuser`
** `--windowsdomain`

* Any of the following options of the `update-node-ssh` subcommand is omitted:

** `--sshport`
** `--sshuser`
** `--sshkeyfile`


[CAUTION]
====
Changing a `DCOM` node or an `SSH` node to a `CONFIG` node disables
remote communication for the node.
====


[[GSHAG365]]

Before You Begin

Ensure that the following prerequisites are met:

* SSH or DCOM is configured on the host where the DAS is running and on
the host that the node represents.
* The node the type of which you are changing exists.

1. Ensure that the DAS is running. Remote subcommands require a running server.

2. Run the appropriate subcommand for updating a node, depending on the
type of the node after the change.

** To change the type of a node to `DCOM`, run the `update-node-dcom`
subcommand on the node.
+
[source]
----
asadmin> update-node-dcom [options] config-or-ssh-node-name
----
options::
  Options of the `update-node-dcom` subcommand for changing the node's
  configuration data. For information about these options, see the
  link:../reference-manual/update-node-ssh.html#GSRFM789[`update-node-dcom`(1)] help page.
config-or-ssh-node-name::
  The name of the `CONFIG` node or the `SSH` node to change.

** To change the type of a node to `SSH`, run the `update-node-ssh`
subcommand on the node.
+
[source]
----
asadmin> update-node-ssh [options] config-or-dcom-node-name
----
options::
  Options of the `update-node-ssh` subcommand for changing the node's
  configuration data. For information about these options, see the
  link:../reference-manual/update-node-ssh001.html#GSRFM00256[`update-node-ssh`(1)] help page.
config-or-dcom-node-name::
  The name of the `CONFIG` node or the `DCOM` node to change.

** To change the type of a node to `CONFIG`, run the `update-node-config`
subcommand on the node.
+
[source]
----
asadmin> update-node-config [options] dcom-or-ssh-node-name
----
options::
  Options of the `update-node-config` subcommand for changing the node's
  configuration data. For information about these options, see the
  link:../reference-manual/update-node-config.html#GSRFM00255[`update-node-config`(1)] help page.
dcom-or-ssh-node-name::
  The name of the `DCOM` node or the `SSH` node to change.

[[GSHAG00031]][[gkshw]]
Example 3-18 Changing a `CONFIG` Node to an `SSH` Node

This example changes the `CONFIG` node `cfg02` to an `SSH` node.

[source]
----
asadmin> update-node-ssh cfg02
Command update-node-ssh executed successfully.
----

[[GSHAG366]]

See Also

* link:../reference-manual/update-node-config.html#GSRFM00255[`update-node-config`(1)]
* link:../reference-manual/update-node-ssh.html#GSRFM789[`update-node-dcom`(1)]
* link:../reference-manual/update-node-ssh001.html#GSRFM00256[`update-node-ssh`(1)]

You can also view the full syntax and options of the subcommand by
typing the following commands at the command line.

* `asadmin help update-node-config`
* `asadmin help update-node-dcom`
* `asadmin help update-node-ssh`
