type=page
status=published
title=Administering {productName} Nodes
next=clusters.html
prev=ssh-setup.html
~~~~~~

= Administering {productName} Nodes

[[GSHAG00004]][[gkrle]]


[[administering-glassfish-server-nodes]]
== 3 Administering {productName} Nodes

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

The following topics are addressed here:

* link:#gksgh[Types of {productName} 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 {productName} Nodes

Each {productName} 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 {productName} 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 {productName} 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 {productName} 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 {productName} Instances].

{productName} 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
  {productName} software on the host, for example, `C:\glassfish7`.
  If the {productName} 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 {productName} 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 {productName}
instance that resides on the node is deleted.

[[GSHAG478]]

Before You Begin

Ensure that no {productName} 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 {productName} 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
{productName} Instances].


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


{productName} 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
  {productName} software on the host, for example,
  `/export/glassfish7/`. If the {productName} 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 {productName} 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 {productName}
instance that resides on the node is deleted.

[[GSHAG354]]

Before You Begin

Ensure that no {productName} 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.

{productName} 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, {productName} 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
  {productName} 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 {productName}
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 {productName}
instance that resides on the node is deleted.

[[GSHAG359]]

Before You Begin

Ensure that no {productName} 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

{productName} 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`
