管理标签打印机的网络设置

今年我接触了 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标签打印机,也不会为网络设置而困扰。

bannerAds