Skip to content

Terraform で IOS-XE を設定する

Story DeWeese さんの記事ですが、しばらく前に Automation with Any Tooling on Any Interface が公開されています。

Story DeWeese さんは YouTube でも Cisco IOS XE Terraform provider introduction and demo という「Terraform で IOS-XE を操作する」という動画を公開してくださっています。

IOS-XE 用の Provider は Cisco IOS XE Provider で公開されています。 今回はこの Provider の基本的な使い方をメモしておきます。 Terraform は 1.2.7 を利用しました。

IOS-XE の前提コンフィグ

今回は CML2 上に Catalyst 8000V (IOS-XE 17.08.01a) を起動し、それを Terraform で設定します。 Catalyst 8000V には前提として以下を設定しておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
aaa new-model
aaa authentication login default local
aaa authorization exec default local
!
username ADMIN privilege 15 password PASSWORD
!
restconf
!
ip http secure-server
ip http authentication local
!
end

.tf ファイル

Google Public NTP を設定する .tf ファイルの例は以下の通りです。

 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
32
33
34
35
36
37
38
39
terraform {
  required_providers {
    iosxe = {
      source  = "CiscoDevNet/iosxe"
      version = "0.1.1"
    }
  }
}

provider "iosxe" {
  host            = "https://10.0.0.1"
  device_username = "ADMIN"
  device_password = "PASSWORD"
  insecure        = true
}

resource "iosxe_rest" "ntp_servers" {
  method = "POST"
  path   = "/data/Cisco-IOS-XE-native:native/ntp/server"
  payload = jsonencode(
    {
      "Cisco-IOS-XE-ntp:server-list" : [
        {
          "ip-address" : "216.239.35.12",
          "prefer" : [null]
        },
        {
          "ip-address" : "216.239.35.8",
        },
        {
          "ip-address" : "216.239.35.4",
        },
        {
          "ip-address" : "216.239.35.0",
        },
      ]
    }
  )
}

実行

ここまで用意出来れば、後は Terraform を実行するだけです。

1
2
3
terraform init
terraform plan
terraform apply -auto-approve

IOS-XE 側での確認

IOS-XE 側で確認すると意図した通りに NTP サーバが設定されていました。

1
2
3
4
5
6
7
8
ios-xe# show ntp associations

  address         ref clock       st   when   poll reach  delay  offset   disp
+~216.239.35.0    .GOOG.           1     23     64    37 38.000  47.990  1.900
+~216.239.35.8    .GOOG.           1     23     64    37 38.000  48.459  1.898
+~216.239.35.4    .GOOG.           1     18     64    37 39.000  47.709  1.920
*~216.239.35.12   .GOOG.           1     14     64    37 38.000  48.493  1.942
 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured