Skip to content

Terraform で ACI 上に指定個数、Contract を作成する

ACI 上で何某かのテストを実施する為に大量の設定が必要になる場合、Terraform で多少簡単に設定出来るかもしれません。 例えば「Contract を 10 個作成する」といった場合の Terraform 実行例をメモしておきます。

Terraform の設定ファイル

Terraform の設定ファイルは以下の通りです。

  1. main.tf
  2. aci.tf

main.tf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
terraform {
  required_providers {
    aci = {
      source  = "CiscoDevNet/aci"
      version = "0.5.4"
    }
  }
}

provider "aci" {
  username = "admin"
  password = "password"
  url      = "https://10.0.0.1"
  insecure = true
}

aci.tf

今回は Contract を 10 個作成しますが、スクリプト中では「10」という設定値を以下のように 2 回利用します。

  1. Contract を作成するタイミング
  2. Subject を作成するタイミング

その為、この指定値は変数として定義しました。 また、作成する Contract 名は format を使って printf ライクにフォーマットを指定しています。 今回は「10 個」なので %02d としていますが、もし「100 個作成したい」「1,000 個作成したい」という場合は %03d%04d といった具合に調整します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
variable "index" { default = 10 }

# Tenant
resource "aci_tenant" "tenant" {
  name = "Tenant1"
}

# Contract / Subject / Filter
resource "aci_filter" "any" {
  tenant_dn = aci_tenant.tenant.id
  name      = "Filter1"
}

resource "aci_filter_entry" "entry1" {
  name        = "0010"
  filter_dn   = aci_filter.any.id
  ether_t     = "unspecified"
}

resource "aci_contract" "contract" {
  count     = var.index
  tenant_dn = aci_tenant.tenant.id
  name      = format("Contract%02d", count.index + 1)
}

resource "aci_contract_subject" "subject" {
  count                        = var.index
  contract_dn                  = aci_contract.contract[count.index].id
  name                         = "Subject1"
  relation_vz_rs_subj_filt_att = [aci_filter.any.id]
}

実行結果

Terraform 実行後、APIC の CLI 上から確認すると、以下のように指定した個数分だけ Contract が作成されていました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apic1# show tenant Tenant1 contract
 Tenant      Contract    Type        Qos Class     Scope       Subject     Access-group  Dir   Description
 ----------  ----------  ----------  ------------  ----------  ----------  ----------    ----  ----------
 Tenant1     Contract01  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract02  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract03  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract04  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract05  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract06  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract07  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract08  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract09  permit      unspecified   vrf         Subject1    Filter1       both
 Tenant1     Contract10  permit      unspecified   vrf         Subject1    Filter1       both