package zones import ( "context" "net/netip" "strconv" "time" ) // LookupNetIP uses the DNS Resolver to get the public addresses associated // to a Machine func (m *Machine) LookupNetIP(timeout time.Duration) ([]netip.Addr, error) { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() return m.zone.zones.resolver.LookupNetIP(ctx, "ip", m.FullName()) } // UpdatePublicAddresses uses the DNS Resolver to set Machine.PublicAddresses func (m *Machine) UpdatePublicAddresses() error { addrs, err := m.LookupNetIP(2 * time.Second) if err != nil { return err } m.PublicAddresses = addrs return nil } func (m *Machine) init() error { if err := m.setID(); err != nil { return err } for i := 0; i < RingsCount; i++ { if err := m.tryReadWireguardKeys(i); err != nil { return err } } return nil } func (m *Machine) setID() error { zoneName := m.zone.Name suffix := m.Name[len(zoneName)+1:] id, err := strconv.ParseInt(suffix, 10, 8) if err != nil { return err } m.ID = int(id) return nil } func (m *Machine) scan(opts *ScanOptions) error { for i := 0; i < RingsCount; i++ { if err := m.tryApplyWireguardConfig(i); err != nil { return err } } if !opts.DontResolvePublicAddresses { return m.UpdatePublicAddresses() } return nil }