前提
Lamda(python)において、vmanageへAPIを実行し、その結果をもとにデータ成形やCSV作成を考えております。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 1つ目のAPIを実行し、結果を受信する
vmanageのAPI(/dataservice/device)
- 2つ目に実行するAPIへ1つ目で受け取ったDeviceIDをもとに更にAPIを実行する
vmanageのAPI(/dataservice/devie/ip/nat/translation?deviceId=)
- 2つ目のAPIの結果を一覧にしてcsvとする
発生している問題・エラーメッセージ
print(lendf)
で各デバイスのトンネル数(IP数=行数)をカウントは確認できたのですが
これらをまとめようとdfを利用しようと考えておりますが、うまくいかず
エラーメッセージ:なし
該当のソースコード
Lambda(Python)
1 2 3import json 4import boto3 5import csv 6import numpy as np 7import pandas as pd 8 9import requests 10import os 11import urllib3 12from datetime import datetime 13urllib3.disable_warnings(urlib3.exceptions.InsecureRequests.InsecureRequestWarning) 14 15def lambda_handler(event, context): 16 s3 = boto3.resource(`s3`) 17 bucket_name _ os.environ.get(`S3_BUCKET`) 18 vmange_info_df = pd.read_csv(vnamage_info) 19 20 device_info = "tmp/device_info.csv" 21 bucket.download_file(os.environ.get(`CSV_DEVICE_INFO`), device_info) 22 device_info_df = pd.read.csv(device_info) 23 24 ipsec_tunnel_df = get_request(vmanage_info_df) 25 26 def get_request(vmanage_info_df): 27 api_datalist = [] 28 for row in vmanage_info_df.itertuples(): 29 vmanage_host = row[1] 30 vmanage_port = row[2] 31 vmanage_username = row[3] 32 vmanage_password = row[4] 33 34 base_url = `https://%s:%s`%(vmanage_host, vmanage_port) 35 36 login_action = `/j_security_check` 37 38 login_data = {`j_username` : vmanage_username, `j_password` : vmanage_password} 39 40 login_url = base_url + login_action 41 42 session = requests.session() 43 44 login_response = session.post(url=login_url, data=login_data, verify=False) 45 if login_token.status_code = 200: 46 if b`<html>` in login_token.content: 47 print("Login token Failed") 48 exit(1) 49 50 session.headers[`X-XSRF-TOKEN`] = login_token.content 51 52 53 device_url = base_url + `/dataservice/device` 54 55 df = pd.json_normalize(json_data["data"]) 56 df = df[(df["device-type"] == "vedge") & (df["reachability"] == "reachable")] 57 58 59 for data in df.itertuples() 60 deviceid = data[1] 61 nat_translation_url = base_url + `/dataservice/devie/ip/nat/translation?deviceId=` + deviceid 62 nat_translation_list = sessin.get(url=nat_translation_url, verify=False) 63 if nat_translation_list.status_code == 200: 64 json_data = nat_translation_list.json = () 65 else: 66 print(nat_translation_list.status_code) 67 68 df = pd.json_normalize(json_data["data"] 69 print(df) 70 71 print(len(df)) 72
print(len(df))の結果
inside-local-addr vrf-name ・・・ application-type inside-global-addr
0 123.456.789.012 -gloal- ・・・ 0 123.456.789.012
[1 row x 17 columns]
1
試したこと
以下では実現できませんでした。
df = df[["system-ip", "host-name", "device-model"]]
df[Tunnel Count
] = len(df)
c = df.pop(Tunnel Count
)
df.insert(df.shape[1], c.name, c)
df.insert(9, c.name, c)
以下の出力を想定しております。
"system-ip", "host-name", "device-model", "Tunnnel Count"
123.456.678.901, ABC-host, Model-ABC, 999
補足情報(FW/ツールのバージョンなど)
Python3.8

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。