この製品のマニュアルセットは、偏向のない言語を使用するように配慮されています。このマニュアルセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザーインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブランゲージに対する取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
この章は、次の項で構成されています。
Cisco UCS Director は、インフラストラクチャ リソースの自動化されたプロファイル ベースのプロビジョニング、管理、およびレポートを提供します。Cisco UCS Director には、物理および仮想両方のコンバージド インフラストラクチャのすべての要素で複雑な操作を可能にする強力なオーケストレーション エンジンが組み込まれています。これらの操作はワークフローで具体化され、個々のタスクの順序でスクリプト化されます。Cisco UCS Director には、タスクの大規模なライブラリが必ず付属しています。
Cisco UCS Director のタスクは、オーケストレーション操作を可能にするライブラリを含む JavaScript のバージョンである CloupiaScript で記述されます。CloupiaScript を使用して、スクリプトをワークフロー タスクに組み込み、カスタム タスクを記述することができます。
この手順書のスクリプト化された例を活用するには、Cisco UCS Director と Cisco UCS Director Orchestrator を理解しておく必要があります。
Cisco UCS Director のインストールと管理については、『Cisco UCS Director Administration Guide』を参照してください。Cisco UCS Director Orchestrator の使用については、『Cisco UCS Director Orchestration Guide』を参照してください。CloupiaScript のクラスおよびメソッドについては、Cisco UCS Director のスクリプト バンドルに含まれている CloupiaScript Javadoc を参照してください。
記述表題の下で、例はそれぞれ次のセクションから構成されます。
例が設計された目的。
いつ例を使用するか、使用しないか、およびその理由。
例を機能させるために必要な条件。
例で使用されるオブジェクトとメソッド、表示される入力変数。
例のコード。
例のコードから想定される出力。
例を実行するときは、変更内容を含める必要がある場合があることに注意してください。
関連する例。
このマニュアルは、Cisco UCS Director; Orchestrator で使用するサーバ側のスクリプト ソリューションである CloupiaScript を使用する際に役立つ例のコレクションです。手順書と同様に、少なくとも 3 つの方法でこのマニュアルを使用できます。
記載されているとおりに例に従うことで(もちろん使用する変数に置き換えて)、従う手順のすべてを把握していなくてもタスクを完了することができます。
テンプレートとして例を使用し、ワーク内の同様のタスクに適合させることができます。
例を検討することで、CloupiaScript Javadoc の参照とともに、CloupiaScript で「どのようなことが行われるか」について把握でき、スクリプトを作成する必要があるその他のタスクでの異なるメソッドの使用について概要を把握できます。
例は、一般的な使用例を説明するために選択されています。その目的はこれらの 3 つのすべての方法で円滑に使用できるようにすることです。
Cisco UCS Director でサービス要求の入力または出力を表示するには、次の手順を実行します。
ステップ 1 | を選択します。 |
ステップ 2 | [サービス リクエスト(Service Requests)] ページで [サービス リクエスト(Service Requests)] をクリックします。 |
ステップ 3 | 表示するサービス リクエストを含む行をクリックします。 |
ステップ 4 | [その他のアクション(More Actions)] ドロップダウン リストから [詳細の表示(View Details)] を選択します。
[サービスリクエスト(Service Request)] 画面には、作成および変更されたワークフローのステータス、ログ、オブジェクト、およびサービス リクエストの入力/出力が表示されます。 |
ステップ 5 | ワークフローおよびサブワークフローの入力および出力を表示するには、画面を下にスクロールします。 |
ステップ 6 | [閉じる(Close)] をクリックして、[サービス リクエスト(Service Request)] 画面を閉じます。 |
XML REST API を呼び出し、Cisco UCS Director で基本的な処理を行うために次の API を使用します。
userAPIMoCreate:HTTP POST XML REST API を呼び出して作成処理を実行します。
userAPIMoQuery:HTTP GET XML REST API を呼び出して取得処理を実行します。
userAPIMoUpdate:HTTP PUT XML REST API を呼び出して更新処理を実行します。
userAPIMoDelete:HTTP DELETE XML REST API を呼び出して削除処理を実行します。
userAPIMoCreate API は、Cisco UCS Director の HTTP POST XML REST API のいずれかを呼び出します。userAPIMoCreate API は、リソース パスおよび XML ペイロードの両方を入力として取得し、HTTP Post 操作を所定のリソース パスに対して実行します。
(注) | ペイロードは XML 形式である必要があります。 |
次の例は、user@CREATE XML REST API を呼び出してサービスのエンドユーザを作成する方法を示しています。
importClass(javax.xml.parsers.DocumentBuilder); importClass(javax.xml.parsers.DocumentBuilderFactory); importClass(javax.xml.parsers.ParserConfigurationException); importPackage(java.io); importPackage(javax.xml.transform); importPackage(javax.xml.transform.dom); importPackage(javax.xml.transform.stream); importClass(org.w3c.dom.CDATASection); importClass(org.w3c.dom.Document); importClass(org.w3c.dom.Element); importClass(org.w3c.dom.Node); logger.addInfo("Demo for userAPIMoCreate REST API"); logger.addInfo("Execute user@CREATE HTTP Post XML REST API through userAPIMoCreate"); //Create a service end-user with mandatory parameters var resourcePath = "/user"; //Construct payload for user@CREATE //Mandatory parameters to create a service end-user var userRoleType = "Regular"; var userGroupId = "1"; var userName = "sdk_EU"; var userPassword = "paas@12345"; var userEmailId = "abc@xyz.com" function executeUserAPIMoCreate() { var xmlPayload = constructPayload(); logger.addInfo("XML payload string to create a Service End-User: " + xmlPayload); var response = ctxt.getAPI().userAPIMoCreate(resourcePath, xmlPayload); logger.addInfo("user creation response : "+response); } function constructPayload() { var dbf = DocumentBuilderFactory.newInstance(); var builder; var xmlStr = null; builder = dbf.newDocumentBuilder(); var doc = builder.newDocument(); var cuicOperationRequest = doc.createElement("cuicOperationRequest"); var payload = doc.createElement("payload"); var addUserConfig = doc.createElement("AddUserConfig"); var userType = doc.createElement("userType"); userType.appendChild(doc.createTextNode(userRoleType)); var userGroup = doc.createElement("userGroup"); userGroup.appendChild(doc.createTextNode(userGroupId)); var loginName = doc.createElement("loginName"); loginName.appendChild(doc.createTextNode(userName)); var password = doc.createElement("password"); password.appendChild(doc.createTextNode(userPassword)); var confirmPassword = doc.createElement("confirmPassword"); confirmPassword.appendChild(doc.createTextNode(userPassword)); var userContactEmail = doc.createElement("userContactEmail"); userContactEmail.appendChild(doc.createTextNode(userEmailId)); addUserConfig.appendChild(userType); addUserConfig.appendChild(userGroup); addUserConfig.appendChild(loginName); addUserConfig.appendChild(password); addUserConfig.appendChild(confirmPassword); addUserConfig.appendChild(userContactEmail); doc.appendChild(cuicOperationRequest); xmlStr = getXMLString(addUserConfig); var cdata = doc.createCDATASection(xmlStr); payload.appendChild(cdata); cuicOperationRequest.appendChild(payload); xmlStr = null; xmlStr = getXMLString(doc); return xmlStr; } function getXMLString(node) { var xmlStr = null; try { var domSource = new DOMSource(node); var writer = new StringWriter(); var result = new StreamResult(writer); var transformerFactory = TransformerFactory.newInstance(); var transformer = transformerFactory.newTransformer(); transformer.transform(domSource, result); xmlStr = writer.toString(); } catch (ex) { throw ex; } return xmlStr; } try { executeUserAPIMoCreate(); } catch (e) { logger.addError("Error:" + e); ctxt.setFailed("Task failed to execute 'userAPIMoCreate' REST API"); ctxt.exit(); }
userAPIMoQuery API は、Cisco UCS Director の HTTP GET XML REST API のいずれかを呼び出します。userAPIMoQuery API は、リソース パスを入力として取得し、XML フォーマットでリソースを返します。続いて、XML 応答を解析して、必要な情報を取得します。
次の例は、user@READ XML REST API を呼び出して Cisco UCS Director からユーザのリストを取得する方法を示しています。
importClass(java.io.StringReader); importClass(javax.xml.parsers.DocumentBuilder); importClass(javax.xml.parsers.DocumentBuilderFactory); importClass(org.w3c.dom.Document); importClass(org.w3c.dom.NodeList); importClass(org.w3c.dom.Node); importClass(org.xml.sax.InputSource); logger.addInfo("Demo for userAPIMoQuery REST API"); logger.addInfo("Execute user@READ HTTP GET XML REST API through userAPIMoQuery"); //Read all users //To read a specific user, the resource path is ‘/user/loginName’ var resourcePath = "/user"; function executeUserAPIMoQuery() { //Second and third parameters are not applicable var response = ctxt.getAPI().userAPIMoQuery(resourcePath, null, null); logger.addInfo("you got the response"); logger.addInfo("Read all users response : " + response); getUserDetails(response); } function getUserDetails(response) { var dbf = DocumentBuilderFactory.newInstance(); var builder; var nodeList = null; try { builder = dbf.newDocumentBuilder(); var doc = builder.parse(new InputSource(new StringReader(response))); nodeList = doc.getElementsByTagName("cuicOperationStatus"); var operationStatus = null; if (nodeList != null && nodeList.getLength() > 0) { operationStatus = nodeList.item(0).getTextContent(); logger.addInfo("cuicOperationStatus = " + operationStatus); } if (operationStatus.equals("0")) { logger.addInfo("Successfully Read all UCSD users!!"); nodeList = null; nodeList = doc.getElementsByTagName("user"); if (nodeList != null && nodeList.getLength() > 0) { for (var i = 0; i < nodeList.getLength(); i++) { logger.addInfo("*******Reading details for User" + (i + 1) + "*******"); printUserDetails(nodeList.item(i)); logger.addInfo("*******End of User details for user" + (i + 1) + "*******"); } } } else { var errorMsg = null; nodeList = null; nodeList = doc.getElementsByTagName("errorMessage"); if (nodeList != null && nodeList.getLength() > 0) { errorMsg = nodeList.item(0).getTextContent(); } logger.addInfo("cuicOperationStatus = " + operationStatus); logger.addInfo("errorMessage = " + errorMsg); } } catch (ex) { throw ex; } } function printUserDetails(node) { var nodeList = null; nodeList = node.getChildNodes(); if (nodeList != null && nodeList.getLength() > 0) for (var i = 0; i < nodeList.getLength(); i++) { var currentNode = nodeList.item(i); if (currentNode.getNodeType() == Node.ELEMENT_NODE) { logger.addInfo(currentNode.getNodeName()); printUserDetails(currentNode); } if (currentNode.getNodeType() == Node.TEXT_NODE) logger.addInfo(":"+currentNode.getTextContent()); } } try { executeUserAPIMoQuery(); } catch (e) { logger.addError("Error:" + e); ctxt.setFailed("Task failed to execute 'userAPIMoQuery' REST API"); ctxt.exit(); }
userAPIMoUpdate API は、Cisco UCS Director の HTTP PUT XML REST API のいずれかを呼び出します。userAPIMoUpdate API は、リソース パスおよび XML ペイロードの両方を入力として取得し、HTTP PUT 操作を所定のリソース パスに対して実行します。
(注) | ペイロードは XML 形式である必要があります。 |
次の例は、group@UPDATE XML REST API を呼び出してユーザ グループを更新する方法を示しています。
importClass(javax.xml.parsers.DocumentBuilder); importClass(javax.xml.parsers.DocumentBuilderFactory); importClass(javax.xml.parsers.ParserConfigurationException); importPackage(java.io); importPackage(javax.xml.transform); importPackage(javax.xml.transform.dom); importPackage(javax.xml.transform.stream); importClass(org.w3c.dom.CDATASection); importClass(org.w3c.dom.Document); importClass(org.w3c.dom.Element); importClass(org.w3c.dom.Node); logger.addInfo("Demo for userAPIMoUpdate REST API"); logger.addInfo("Execute group@UPDATE HTTP PUT XML REST API through userAPIMoUpdate"); //Update a user group var resourcePath = "/group"; //Construct payload for group@UPDATE //parameters to update a user group var userGroupId = "3"; var grpDescription = "Group description updated"; var grpEmailId = "sdkgroup@abc.com"; var grpCode = "SDKGRP"; function executeUserAPIMoUpdate() { var xmlPayload = constructPayload(); logger.addInfo("XML payload string to update a user group: " + xmlPayload); var response = ctxt.getAPI().userAPIMoUpdate(resourcePath, xmlPayload); logger.addInfo("User Group Update response : " + response); } function constructPayload() { var dbf = DocumentBuilderFactory.newInstance(); var builder; var xmlStr = null; builder = dbf.newDocumentBuilder(); var doc = builder.newDocument(); var cuicOperationRequest = doc.createElement("cuicOperationRequest"); var payload = doc.createElement("payload"); var modifyGroupConfig = doc.createElement("ModifyGroupConfig"); var groupId = doc.createElement("groupId"); groupId.appendChild(doc.createTextNode(userGroupId)); var groupDescription = doc.createElement("groupDescription"); groupDescription.appendChild(doc.createTextNode(grpDescription)); var groupContact = doc.createElement("groupContact"); groupContact.appendChild(doc.createTextNode(grpEmailId)); var groupCode = doc.createElement("groupCode"); groupCode.appendChild(doc.createTextNode(grpCode)); modifyGroupConfig.appendChild(groupId); modifyGroupConfig.appendChild(groupDescription); modifyGroupConfig.appendChild(groupContact); modifyGroupConfig.appendChild(groupCode); doc.appendChild(cuicOperationRequest); xmlStr = getXMLString(modifyGroupConfig); var cdata = doc.createCDATASection(xmlStr); payload.appendChild(cdata); cuicOperationRequest.appendChild(payload); xmlStr = null; xmlStr = getXMLString(doc); return xmlStr; } function getXMLString(node) { var xmlStr = null; try { var domSource = new DOMSource(node); var writer = new StringWriter(); var result = new StreamResult(writer); var transformerFactory = TransformerFactory.newInstance(); var transformer = transformerFactory.newTransformer(); transformer.transform(domSource, result); xmlStr = writer.toString(); } catch (ex) { throw ex; } return xmlStr; } try { executeUserAPIMoUpdate(); } catch (e) { logger.addError("Error:" + e); ctxt.setFailed("Task failed to execute 'userAPIMoUpdate' REST API"); ctxt.exit(); }
userAPIMoDelete API は、Cisco UCS Director の HTTP DELETE XML REST API のいずれかを呼び出します。userAPIMoDelete API は、リソース パスおよびペイロードの両方を入力として取得し、HTTP DELETE 操作を所定のリソース パスに対して実行します。
(注) | ペイロードは XML 形式である必要があります。 |
次の例は、policyCatalog@DELETE XML REST API を呼び出してポリシー カタログのエンドユーザを削除する方法を示しています。
logger.addInfo("Demo for userAPIMoDelete REST API"); logger.addInfo("Execute policyCatalog@DELETE HTTP DELTE XML REST API through userAPIMoDelete"); //Delete a policy Catalog var resourcePath = "/policyCatalog"; var catalogName = "advance_cat_1"; var deleteCatalogURL = resourcePath + "/" + catalogName; //For policyCatalog@DELETE payload is not required function executeUserAPIMoDelete() { var response = ctxt.getAPI().userAPIMoDelete(deleteCatalogURL, ""); logger.addInfo("Policy Catalog deletion response : " + response); } try { executeUserAPIMoDelete(); } catch (e) { logger.addError("Error:" + e); ctxt.setFailed("Task failed to execute 'userAPIMoDelete' REST API"); ctxt.exit(); }