PDK は、ポリシー、Flex インスタンス、API インスタンス、および Anypoint Organization に関するメタデータを提供する Metadata Injectable を提供します。Metadata 構造体は次のようになります。
pub struct Metadata {
pub flex_metadata: FlexMetadata,
pub policy_metadata: PolicyMetadata,
pub api_metadata: ApiMetadata,
pub platform_metadata: PlatformMetadata,
}
Metadata 構造体は、以下の構造体を参照しています。
-
FlexMetadata:pub struct FlexMetadata { pub flex_name: String, pub flex_version: String, } -
PolicyMetadata:pub struct PolicyMetadata { pub policy_name: String, pub policy_namespace: String, } -
ApiMetadata:pub struct ApiMetadata { pub id: Option<String>, pub name: Option<String>, pub version: Option<String>, pub slas: Option<Vec<ApiSla>>, // API SLA tiers in the platform } // Each ApiSla contains the limits for each SLA. pub struct ApiSla { pub id: String, pub tiers: Vec<Tier>, // Limits within an API SLA tier in the platform } -
PlatformMetadata:pub struct PlatformMetadata { pub organization_id: String, pub environment_id: String, pub root_organization_id: String, }
#[entrypoint] へのメタデータの挿入
メタデータを #[entrypoint] 設定関数に挿入するには、以下のコードスニペットを参照してください。
#[entrypoint]
async fn configure(launcher: Launcher, metadata: Metadata) -> Result<()> {
logger::info!("Flex instance name is: {}", metadata.flex_metadata.flex_name.to_string());
launcher
.launch(on_request(filter))
.await?;
Ok(())
}
ラップされた関数へのメタデータの挿入
ラップされた関数にメタデータを直接挿入することはできません。ラップされた関数でメタデータを使用するには、まず #[entrypoint] 関数にデータを挿入してから、ラップされた関数にデータを挿入します。
#[entrypoint]
async fn configure(launcher: Launcher, metadata: Metadata) -> Result<()> {
launcher
.launch(on_request(|r| request_filter(r, &metadata)))
.await?;
Ok(())
}
async fn request_filter(_: RequestState, metadata: &Metadata) -> Flow<()> {
let mut vec = Vec::new();
let headers = &mut vec;
headers.push((
"flex_name".to_string(),
metadata.flex_metadata.flex_name.to_string(),
));
headers.push((
"policy_name".to_string(),
metadata.policy_metadata.policy_name.to_string(),
));
Flow::Break(Response::new(201).with_headers(vec))
}