Add clustering guides node file, examples node code
Change-Id: I905c424f86ef1f838ad2b637cb623f9ce7025466 Signed-off-by: Yuanbin.Chen <cybing4@gmail.com>
This commit is contained in:
parent
0b6eb7074d
commit
7803466ed2
|
@ -15,4 +15,106 @@
|
|||
Managing Nodes
|
||||
==============
|
||||
|
||||
.. TODO(Qiming): Implement this guide
|
||||
Node is a logical object managed by the Senlin service. A node can be a member
|
||||
of at most one cluster at any time. A node can be an orphan node which means
|
||||
it doesn't belong to any clusters.
|
||||
|
||||
|
||||
List Nodes
|
||||
~~~~~~~~~~
|
||||
|
||||
To examine the list of Nodes:
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: list_nodes
|
||||
|
||||
When listing nodes, you can specify the sorting option using the ``sort``
|
||||
parameter and you can do pagination using the ``limit`` and ``marker``
|
||||
parameters.
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Create Node
|
||||
~~~~~~~~~~~
|
||||
|
||||
When creating a node, you will provide a dictionary with keys and values
|
||||
according to the node type referenced.
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: create_node
|
||||
|
||||
Optionally, you can specify a ``metadata`` keyword argument that contains some
|
||||
key-value pairs to be associated with the node.
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Get Node
|
||||
~~~~~~~~
|
||||
|
||||
To get a node based on its name or ID:
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: get_node
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Find Node
|
||||
~~~~~~~~~
|
||||
|
||||
To find a node based on its name or ID:
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: find_node
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Update Node
|
||||
~~~~~~~~~~~
|
||||
|
||||
After a node is created, most of its properties are immutable. Still, you
|
||||
can update a node's ``name`` and/or ``params``.
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: update_node
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Delete Node
|
||||
~~~~~~~~~~~
|
||||
|
||||
A node can be deleted after creation, provided that it is not referenced
|
||||
by any active clusters. If you attempt to delete a node that is still in
|
||||
use, you will get an error message.
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: delete_node
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Check Node
|
||||
~~~~~~~~~~
|
||||
|
||||
If the underlying physical resource is not healthy, the node will be set
|
||||
to ERROR status.
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: check_node
|
||||
|
||||
Full example: `manage node`_
|
||||
|
||||
|
||||
Recover Node
|
||||
~~~~~~~~~~~~
|
||||
|
||||
To restore a specified node.
|
||||
|
||||
.. literalinclude:: ../../examples/clustering/node.py
|
||||
:pyobject: recover_node
|
||||
|
||||
.. _manage node: http://git.openstack.org/cgit/openstack/python-openstacksdk/tree/examples/clustering/node.py
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
# Licensed 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.
|
||||
|
||||
"""
|
||||
Managing policies in the Cluster service.
|
||||
|
||||
For a full guide see
|
||||
https://developer.openstack.org/sdks/python/openstacksdk/user/guides/cluster.html
|
||||
"""
|
||||
|
||||
NODE_NAME = 'Test_Node'
|
||||
NODE_ID = 'dd803d4a-015d-4223-b15f-db29bad3146c'
|
||||
PROFILE_ID = "b0e3a680-e270-4eb8-9361-e5c9503fba0a"
|
||||
|
||||
|
||||
def list_nodes(conn):
|
||||
print("List Nodes:")
|
||||
|
||||
for node in conn.clustering.nodes():
|
||||
print(node.to_dict())
|
||||
for node in conn.clustering.nodes(sort='asc:name'):
|
||||
print(node.to_dict())
|
||||
|
||||
|
||||
def create_node(conn):
|
||||
print("Create Node:")
|
||||
|
||||
spec = {
|
||||
'name': NODE_NAME,
|
||||
'profile_id': PROFILE_ID,
|
||||
}
|
||||
node = conn.clustering.create_node(**spec)
|
||||
print(node.to_dict())
|
||||
|
||||
|
||||
def get_node(conn):
|
||||
print("Get Node:")
|
||||
|
||||
node = conn.clustering.get_node(NODE_ID)
|
||||
print(node.to_dict())
|
||||
|
||||
|
||||
def find_node(conn):
|
||||
print("Find Node:")
|
||||
|
||||
node = conn.clustering.find_node(NODE_ID)
|
||||
print(node.to_dict())
|
||||
|
||||
|
||||
def update_node(conn):
|
||||
print("Update Node:")
|
||||
|
||||
spec = {
|
||||
'name': 'Test_Node01',
|
||||
'profile_id': 'c0e3a680-e270-4eb8-9361-e5c9503fba0b',
|
||||
}
|
||||
|
||||
node = conn.clustering.update_node(NODE_ID, **spec)
|
||||
print(node.to_dict())
|
||||
|
||||
|
||||
def delete_node(conn):
|
||||
print("Delete Node:")
|
||||
|
||||
conn.clustering.delete_node(NODE_ID)
|
||||
print("Node deleted.")
|
||||
# node support force delete
|
||||
conn.clustering.delete_node(NODE_ID, False, True)
|
||||
print("Node deleted")
|
||||
|
||||
|
||||
def check_node(conn):
|
||||
print("Check Node:")
|
||||
|
||||
node = conn.clustering.check_node(NODE_ID)
|
||||
print(node.to_dict())
|
||||
|
||||
|
||||
def recover_node(conn):
|
||||
print("Recover Node:")
|
||||
|
||||
spec = {'check': True}
|
||||
node = conn.clustering.recover_node(NODE_ID, **spec)
|
||||
print(node.to_dict())
|
Loading…
Reference in New Issue