ご利用のコンピュータを設定する方法 このラボの作業を行うには、事前設定済みの dCloud ラボを使用するか、自身のコンピュータを セットアップしてください。詳細については、イベントの準備 [英語] モジュールとラボの設定 [英語] モジュールを確認してください。 ミッション:APIC-EM から管理対象ネットワーク のトポロジを取得して Spark にポストする このミッションでは、REST API コールに関するすべての知識を活用して、APIC-EM からトポロ ジ情報を取得し、結果を Spark にポストします。 ミッションの目的 所要時間:25 分 • • Python コードを変更して REST API コールを行い、APIC-EM からトポロジ情報を取得 する 出力を Spark ルームにポストする 前提条件 背景 • このラボを開始する前に、REST API および Python [英語] モジュールを確認して完了 することを強くお勧めします。 APIC-EM コントローラへのアクセス APIC-EM コントローラが未導入の場合は、シスコの APIC-EM コントローラを使用できます。 1. APIC-EM コントローラを利用できる dCloud に接続する方法については、「Lab Setup (ラボの設定)」モジュールを参照してください。 2. 接続すると、IP アドレス https://198.18.129.100/ を使用して APIC-EM コントローラにアク セスできるようになります。コントローラのログイン クレデンシャルは、ユーザ名:admin、 パスワード:C1sco12345 です。 Spark から認証トークンを取得 1. Spark 開発者 [英語] ページから個人用の認証トークンを取得する必要があります。 Python スクリプト:apic_em_mission.py # import requests library import requests # import json library import json # Disable warnings requests.packages.urllib3.disable_warnings() # MISSION: Assign the APIC-EM IP address to the CONTROLLER variable CONTROLLER = None # MISSION: Assign your authentication token obtained from Spark's Developer page AUTH = None def getTicket(): # MISSION: Provide the APIC-EM username username = None # MISSION: Provide the password for the username defined above password = None if CONTROLLER == None or username == None or password == None: print("Please assign values to the CONTROLLER, username and password variables.") exit(1) # put the ip address or dns of your apic-em CONTROLLER in this url url = "https://" + CONTROLLER + "/api/v1/ticket" # the username and password to access the APIC-EM Controller payload = {"username": username, "password": password} # Content type must be included in the header header = {"content-type": "application/json"} # Performs a POST on the specified url to get the service ticket response = requests.post(url, data=json.dumps(payload), headers=header, verify=False) print(response) # convert response to json format r_json = response.json() # parse the json to get the service ticket ticket = r_json["response"]["serviceTicket"] return ticket def getTopology(ticket): # Final Result result = [] # MISSION: Assign the function name to the api_call variable to retrieve the physical topology api_call = None if api_call == None: print("Please assign a function call to variable api_call.") exit(1) # URL for topology REST API call to get list of existing devices on the # network, and build topology url = "https://" + CONTROLLER + "/api/v1" + api_call # Content type as well as the ticket must be included in the header header = {"content-type": "application/json", "X-Auth-Token": ticket} # this statement performs a GET on the specified network device url response = requests.get(url, headers=header, verify=False) # convert data to json format. r_json = response.json() # Iterate through network device data and list the nodes, their # interfaces, status and to what they connect for n in r_json["response"]["nodes"]: found = 0 # print header flag printed = 0 # formatting flag for i in r_json["response"]["links"]: # Find interfaces that link to this one which means this node is # the target. if i["target"] == n["id"]: if found == 0: if printed == 1: print() #print('{:>10}'.format("Source") + '{:>30}'.format("Source Interface") + '{:>25}'.format("Target Interface") + '{:>13}'.format("Status")) result.append('\n' + '{:>10}'.format("Source") + '{:>30}'.format( "Source Interface") + '{:>25}'.format("Target Interface") + '{:>13}'.format("Status")) found = 1 for n1 in r_json["response"]["nodes"]: # find name of node to that connects to this one if i["source"] == n1["id"]: if "startPortName" in i: #print(" " + '{:<20}'.format(n1["label"]) + '{:<25}'.format(i["startPortName"]) + '{:<23}'.format(i["endPortName"]) + '{:<8}'.format(i["linkStatus"])) result.append(" " + '{:<20}'.format(n1["label"]) + '{:<25}'.format( i["startPortName"]) + '{:<23}'.format(i["endPortName"]) + '{:<8}'.format(i["linkStatus"])) else: #print(" " + '{:<20}'.format(n1["label"]) + '{:<25}'.format("unknown") + '{:<23}'.format("unknown") + '{:<8}'.format(i["linkStatus"])) result.append(" " + '{:<20}'.format(n1["label"]) + '{:<25}'.format( "unknown") + '{:<23}'.format("unknown") + '{:<8}'.format(i["linkStatus"])) break return(result) # Returns the Spark room ID for the user selected Spark room. def get_roomID(): # API Call for rooms api_call = "rooms" if AUTH == None: print("Please assign your Spark authorization token to variable AUTH.") exit(1) # Cisco Spark's API URL address url = "https://api.ciscospark.com/v1/" + api_call # Content type as well as the authorization must be included in the header header = {"content-type": "application/json; charset=utf-8", "Authorization": "Bearer " + AUTH} # this statement performs a GET on the specified network device url response = requests.get(url, headers=header, verify=False) r_json = response.json() for item in r_json["items"]: print("Title " + item["title"]) print("Room ID " + item["id"] + "\n\n") user_input = input( "Is this the room you are looking for to post?[y/n] ") if user_input.lower() == 'y' or user_input.lower() == 'yes': return item["id"] else: continue #Posts message to the passed in Spark room. def post_spark(text, room_id): # API Call to for messages api_call = "messages" # Cisco Spark's API URL address url = "https://api.ciscospark.com/v1/" + api_call # Content type as well as the authorization must be included in the header header = {"content-type": "application/json; charset=utf-8", "Authorization": "Bearer " + AUTH} payload = { "roomId": room_id, 「text": '\n'.join(text) } # this statement performs a GET on the specified network device url response = requests.post(url, data=json.dumps( payload), headers=header, verify=False) print("\nCheck the Spark Room.You've just posted a message!") if __name__ == "__main__": # Get authentication ticket from APIC-EM theTicket = getTicket() # Use authentication ticket to get the topology information message = getTopology(theTicket) # Get the room ID id = get_roomID() # Use room ID and retrieved topology information to post in the Spark room post_spark(message, id) ガイドライン 1. 2. 3. 4. 5. devnet-express-code-samples\module05\05-lab-04-mission ディレクトリを特定します。 apic_em_mission.py ファイルを開きます。 MISSION: タグを検索し、それぞれについて要求されたタスクを実行します。 スクリプトを実行します。必要に応じて修正します。 メッセージをポストするルームを選択し、選択したルームでメッセージを確認します。 ステップ 2:Git リポジトリを複製する Git リポジトリの複製 • • • • • • ターミナルを開きます。 cd \ と入力して、ルート ディレクトリに移動します。 mkdir DevNetCode\<your-name> と入力して、「C:\DevNetCode\yourname」というディ レクトリを作成します。 o 例:mkdir DevNetCode\armartirosyan cd \DevNetCode\<your-name> と入力して、新しいディレクトリに移動します。 o 例:cd \DevNetCode\armartirosyan GitHub から devnet-express-code-samples リポジトリを複製します。次のコマンドを入力し ます。 git clone https://github.com/CiscoDevNet/devnet-express-codesamples.git 作成したディレクトリに「devnet-express-code-samples」ディレクトリが確認できるはずで す。現在のディレクトリを cd devnet-express-code-samples\module05\05-apic-04mission\ で変更し、dir コマンドを実行して内容を確認します。apic_em_mission.py ファイルが表示されます。このファイルには、コード サンプルが含まれています。これを 変更してミッションを完了します。 apic_em_mission.py ファイルを開いて確認します。情報の不足箇所を特定し、入力を補う必 要があります。そうしないとコードが実行できません。 入力が必要な情報 • • • • • APIC-EM の IP:URL または IP ユーザ名:APIC-EM の UI の認証を受けるユーザ名 パスワード:上のユーザ名に関連付けられたパスワード API コール:APIC-EM から物理トポロジ情報を取得する値を設定します。 注:この値の先頭は / 記号にする必要があります。『API Reference Guide(API リファレ ンス ガイド)』[英語] を参照してください。 Spark 認証:Spark で生成された認証トークンを設定します。 ステップ 3:APIC-EM 情報 このステップでは、APIC-EM 部分に関連して不足している情報を入力する際に必要な情報を 示します。 1. モジュール 5 のラボ 1 を確認してください。APIC-EM の URL とユーザ名/パスワードに 関する情報が提供されています。APIC-EM 部分で必要な値を書き留めておきます。 2. 次に Web ブラウザで APIC-EM の API [英語] ドキュメントの Web ページに移動します。 [サービス(Services)] 列でトポロジ サービスを探してクリックします。ページの中央で [トポロジ(topology)] をクリックすると、関連するすべての API コールが表示されます。 物理トポロジ情報を取得する API コールを選択し、スクリプトに適切な値を入力します。 注:値の先頭は / 記号にしないとコードを実行できません。 ステップ 4:Spark から認証トークンを取得 このステップでは、Spark の開発者 Web サイトから認証トークンを取得して、Spark ルームにテ キストを投稿する方法を確認します。 1. 任意のブラウザを開き、Spark 開発者 [英語] ページに移動します。すでにアカウントが ある場合は、[ログイン(Log In)] オプションをクリックします。シスコの Spark ページに初 めてアクセスする場合は、[サインアップ(Sign Up)] ボタンをクリックして新しいアカウント を作成します。ここで必要になるのは、アクセス可能な電子メール アドレスだけです。そ のアドレスに送信される確認リンクをクリックして、アカウントをアクティブにします。Spark サービスは無償で利用できます。 2. 認証が成功したら、自分のアバターをクリックします。Spark に自分のアクセス トークンが 表示されます。値をコピーしてコードに貼り付けます。 ステップ 5:スクリプトを実行する このステップでは、選択した Spark ルームにトポロジ情報をポストするスクリプトを実行します。 1. コマンドライン ターミナル ウィンドウを開き、完成した Python スクリプトが保存されている 作業ディレクトリに移動します。 2. py -3 apic_em_mission.py コマンドを使用してスクリプトを実行します。ルームのタイト ルと ID 情報が表示されます。キーボードの y を押して、メッセージをポストするルームを 選択します。メッセージがポストされると、スクリプトから、選択した Spark ルームを確認す るように要求されます。 3. 最後に、コードにより、実際に APIC-EM から収集したトポロジ情報が Spark ルームにポ ストされるかを確認します。それには、Cisco Spark ページに移動して、電子メール アド レスを使用して認証を受けます。スクリプトの実行時に選択したルームをクリックします。 APIC-EM からのトポロジ情報がポストされたことを確認できます。 s これでミッションに合格しました。
© Copyright 2024 ExpyDoc