Terraform + CML でノードのコンフィグは外部ファイルを参照する
Terraform で CML 上にラボを作成する際、同時に「ノードにコンフィグを流し込む」ことが可能です。 Terraform からノードへ設定を行うには cml2_node (Resource) の configuration を使います。 更にこの流し込むコンフィグを外部ファイルから参照したい場合は Terraform の file Function を利用することで実現出来ます。
但し、file Function を使って外部ファイルを参照させても CML Provider のバグなのか、以下のエラーになってしまいました。
1 2 3 4 5 6 7 8 9 10 |
|
このエラーは「外部ファイルの改行コードを (CRLF では無く) LF に設定する」ことで回避することが出来ました。
サンプルファイル¶
今回、利用したサンプルファイルは以下です。 main.tf
から file Function で dev1.txt
と dev2.txt
を参照させています。 上述の通り、dev1.txt
と dev2.txt
の改行コードは LF を指定します。
main.tf
terraform {
required_providers {
cml2 = {
source = "registry.terraform.io/ciscodevnet/cml2"
version = "~> 0.7.0"
}
}
}
provider "cml2" {
address = "https://10.0.0.1"
username = "admin"
password = "password"
skip_verify = true
}
resource "cml2_lab" "lab1" {
title = "Example"
}
resource "cml2_node" "ext" {
lab_id = cml2_lab.lab1.id
nodedefinition = "external_connector"
label = "Internet"
configuration = "System Bridge"
x = 160
y = 0
}
resource "cml2_node" "sw" {
lab_id = cml2_lab.lab1.id
nodedefinition = "unmanaged_switch"
label = "Switch"
x = 160
y = 80
}
resource "cml2_node" "dev1" {
lab_id = cml2_lab.lab1.id
label = "dev1"
nodedefinition = "cat8000v"
configuration = file("dev1.txt")
x = 0
y = 160
}
resource "cml2_node" "dev2" {
lab_id = cml2_lab.lab1.id
label = "dev2"
nodedefinition = "cat8000v"
configuration = file("dev2.txt")
x = 320
y = 160
}
resource "cml2_link" "ext_sw" {
lab_id = cml2_lab.lab1.id
node_a = cml2_node.ext.id
slot_a = 0
node_b = cml2_node.sw.id
slot_b = 0
}
resource "cml2_link" "sw_dev1" {
lab_id = cml2_lab.lab1.id
node_a = cml2_node.sw.id
slot_a = 1
node_b = cml2_node.dev1.id
slot_b = 0
}
resource "cml2_link" "sw_dev2" {
lab_id = cml2_lab.lab1.id
node_a = cml2_node.sw.id
slot_a = 2
node_b = cml2_node.dev2.id
slot_b = 0
}
resource "cml2_link" "link1" {
lab_id = cml2_lab.lab1.id
node_a = cml2_node.dev1.id
slot_a = 1
node_b = cml2_node.dev2.id
slot_b = 1
}
dev1.txt
hostname dev1
!
interface GigabitEthernet1
ip address 172.16.0.1 255.255.255.0
no shutdown
!
interface GigabitEthernet2
ip address 192.168.0.1 255.255.255.0
no shutdown
!
end
dev2.txt
hostname dev2
!
interface GigabitEthernet1
ip address 172.16.0.2 255.255.255.0
no shutdown
!
interface GigabitEthernet2
ip address 192.168.0.2 255.255.255.0
no shutdown
!
end
CML 上に作成されたラボ¶
下記のラボが作成されました。 Terraform が外部ファイルを参照し、ノードにコンフィグを設定したことが分かります。