管理标签打印机的网络设置
今年我接触了 CloudFormation 和 Terraform。虽然根据工具的功能,它们有适用和不适用的情况,但能够通过文本来管理配置值是它们的优点。
也许这是一个设定方向、偏好的问题,但在局域网中,网络设备的 IP 地址往往会变得杂乱无章。为了解决这个问题,我制作了一个专门针对SATO标签打印机的Terraform自定义提供者。
SATO制造的标签打印机需要与Terraform执行主机位于同一网络中。可以将设置应用于DHCP或静态IP中的任意一种。
在下面的设置中,使用XXXXXX作为标识符,以便在MAC地址的最后3个八位字节中更容易使用。
terraform {
required_providers {
sato = {
version = "0.2"
source = "karonori.com/personal/sato"
}
}
}
provider "sato" {}
// for DHCP
resource "sato_network" "pXXXXXX" {
hardware_address = "00:19:98:XX:XX:XX"
dhcp = true
rarp = true
}
// for static IP
resource "sato_network" "pXXXXXX" {
hardware_address = "0019.98XX.XXXX"
dhcp = false
rarp = false
ip_address = "192.168.0.10"
subnet_mask = "255.255.255.0"
gateway_address = "192.168.0.1"
}
下面是 terraform apply 的输出示例。但是,即使更改了设置,如果不手动重新启动标签打印机电源,修改也无法生效。
$ terraform apply --auto-approve
module.sato.data.sato_networks.all: Reading...
module.sato.data.sato_networks.all: Read complete after 1s [id=1670078080]
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# sato_network.pXXXXXX will be created
+ resource "sato_network" "pXXXXXX" {
+ dhcp = false
+ gateway_address = "192.168.0.1"
+ hardware_address = "00:19:98:XX:XX:XX"
+ id = (known after apply)
+ ip_address = "192.168.0.10"
+ last_updated = (known after apply)
+ rarp = false
+ subnet_mask = "255.255.255.0"
}
Plan: 1 to add, 0 to change, 0 to destroy.
sato_network.pXXXXXX: Creating...
sato_network.pXXXXXX: Creation complete after 1s [id=00:19:98:XX:XX:XX]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
$
terraform import 也可以工作。
$ terraform import sato_network.pffffff 00:19:98:XX:XX:XX
sato_network.pffffff: Importing from ID "00:19:98:XX:XX:XX"...
module.sato.data.sato_networks.all: Reading...
sato_network.pffffff: Import prepared!
Prepared sato_network for import
sato_network.pffffff: Refreshing state... [id=00:19:98:XX:XX:XX]
module.sato.data.sato_networks.all: Read complete after 1s [id=1670077885]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
$
即使有很多台SATO标签打印机,也不会为网络设置而困扰。