Get-IP
O módulo Get-IP fornece uma interface para obter e gerenciar endereços IP em pipelines Dagger, permitindo consultas a serviços de IP públicos e privados.
Features
- Obtenção de IP público
- Consulta de IP privado
- Suporte a IPv4 e IPv6
- Validação de endereços
- Cache de resultados
- Múltiplos provedores
- Formatação de saída
- Verificação de conectividade
Instalação
Para usar o módulo Get-IP em seu pipeline Dagger:
import (
"dagger.io/dagger"
"github.com/felipepimentel/daggerverse/essentials/get-ip"
)
Exemplos de Uso
IP Público
func (m *MyModule) GetPublicIP(ctx context.Context) (string, error) {
getip := dag.GetIP().
WithProvider("ipify")
// Obter IP público
return getip.Public(ctx)
}
IP Privado
func (m *MyModule) GetPrivateIP(ctx context.Context) (string, error) {
getip := dag.GetIP().
WithInterface("eth0")
// Obter IP privado
return getip.Private(ctx)
}
Verificação de IP
func (m *MyModule) CheckIP(ctx context.Context) error {
getip := dag.GetIP().
WithProvider("ipify").
WithValidation(true)
// Verificar IP
return getip.Validate(ctx)
}
Integração com GitHub Actions
Exemplo de workflow usando o módulo:
name: IP Check
on: [push]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Get Public IP
uses: dagger/dagger-action@v1
with:
module: github.com/felipepimentel/daggerverse/essentials/get-ip
args: |
do -p '
getip := GetIP().
WithProvider("ipify")
getip.Public(ctx)
'
Referência da API
GetIP
Estrutura principal que fornece acesso à funcionalidade de IP.
Construtor
New() *GetIP
- Cria uma nova instância do GetIP
Métodos de Configuração
WithProvider(provider string) *GetIP
- Define provedor de IP público
- Parâmetro:
provider
: Nome do provedor
WithInterface(iface string) *GetIP
- Define interface de rede
- Parâmetro:
iface
: Nome da interface
WithValidation(validate bool) *GetIP
- Ativa validação de IP
- Parâmetro:
validate
: Se true, valida IPs
WithTimeout(seconds int) *GetIP
- Define timeout para requisições
- Parâmetro:
seconds
: Timeout em segundos
Métodos de Operação
Public(ctx context.Context) (string, error)
- Obtém IP público
- Retorna endereço IP
Private(ctx context.Context) (string, error)
- Obtém IP privado
- Retorna endereço IP
Validate(ctx context.Context) error
- Valida endereço IP
- Retorna erro se inválido
Info(ctx context.Context) (map[string]string, error)
- Obtém informações detalhadas do IP
- Retorna mapa com informações
Boas Práticas
- Provedores
- Use provedores confiáveis
- Implemente fallback
- Monitore limites
- Cache
- Cache resultados frequentes
- Defina TTL apropriado
- Limpe cache regularmente
- Validação
- Valide formatos
- Verifique ranges
- Trate exceções
- Performance
- Use timeouts adequados
- Minimize requisições
- Otimize cache
Solução de Problemas
Problemas comuns e soluções:
- Erro de Provedor
Erro: Provider unavailable Solução: Tente provedor alternativo
- Erro de Timeout
Erro: Request timeout Solução: Aumente timeout ou verifique conexão
- Erro de Validação
Erro: Invalid IP format Solução: Verifique formato do endereço
Exemplo de Configuração
# getip.yaml
providers:
- name: ipify
url: https://api.ipify.org
timeout: 5
- name: icanhazip
url: https://icanhazip.com
timeout: 5
interfaces:
- eth0
- wlan0
validation:
enabled: true
formats:
- ipv4
- ipv6
cache:
enabled: true
ttl: 300
Uso Avançado
Pipeline de Verificação
func (m *MyModule) VerificationPipeline(ctx context.Context) error {
// Configurar GetIP
getip := dag.GetIP().
WithProvider("ipify").
WithValidation(true).
WithTimeout(10)
// Obter IP público
publicIP, err := getip.Public(ctx)
if err != nil {
return err
}
// Obter informações detalhadas
info, err := getip.Info(ctx)
if err != nil {
return err
}
// Validar e processar
if err := getip.Validate(ctx); err != nil {
return err
}
fmt.Printf("IP: %s\nInfo: %v\n", publicIP, info)
return nil
}
Múltiplos Provedores
```go func (m *MyModule) MultiProvider(ctx context.Context) (string, error) { // Lista de provedores providers := []string{ “ipify”, “icanhazip”, “ipapi”, }
// Tentar cada provedor
for _, provider := range providers {
ip, err := dag.GetIP().
WithProvider(provider).
WithTimeout(5).
Public(ctx)
if err == nil {
return ip, nil
}
fmt.Printf("Provedor %s falhou: %v\n", provider, err)
}
return "", fmt.Errorf("todos os provedores falharam") }