Giter Site home page Giter Site logo

phpipam_exporter's Introduction

phpipam-exporter

The generator DHCP, DNS or hosts records from phpipam.

Usage

All parameters can be defined as environment variables.

Program parameters
Parameter ENV variable Required Description
--subnet / -s PHPIPAM_SUBNETS Yes Filter output for specific PHPIPAM subnet. Can be used more times (in PHPIPAM_SUBNETS, subnets are separated by coma).
--host PHPIPAM_HOST Yes phpipam API entrypoint format https://<fqdn>/api/<api_id>/ (e.g. https://phpipam.example.com/api/exporter/)
--token PHPIPAM_TOKEN Yes phpipam API token.
--format / -f PHPIPAM_FORMAT No (default: json) Output format. (dhcpd, dnsmasq, hosts)
--output / -o PHPIPAM_OUTPUT No (default: stdout) Output file.
--on-change-action PHPIPAM_ON_CHANGE_ACTION No Bash command. This command is fired only when the output file is changed. This parameter has to be defined only together with --output. (e.g. systemctl reload named)
--custom-template PHPIPAM_CUSTOM_TEMPLATE No Path to custom Jinja template file.

Generate API token

Enable API plugin: Administration > phpIPAM settings > API = On

Create token: Administration > API > Create API key

Token parameters
App ID exporter
App permissions Read
App security SSL with App code token

Copy App code and use it as PHPIPAM_TOKEN. App ID has to be used as part of PHPIPAM_HOST.

img/token.png

Hosts file

export PHPIPAM_TOKEN='12345678945678912345678a1235'
export PHPIPAM_HOST='https://phpipam.example.com/api/exporter/'

cat /etc/hosts.static
  127.0.0.1   localhost localhost.localdomain
  ::1         localhost localhost.localdomain


phpipam_export -s 192.168.1.0/24 -f dhcpd -o /etc/hosts.dynamic --on-change-action "cat /etc/hosts.static /etc/hosts.dynamic >> /etc/hosts"

DHCPd

export PHPIPAM_TOKEN='12345678945678912345678a1235'
export PHPIPAM_HOST='https://phpipam.example.com/api/exporter/'

phpipam_export -s 192.168.1.0/24 -f dhcpd -o /etc/dhcp/subnet.conf --on-change-action "systemctl reload dhcpd"

/etc/dhcp/dhcpd.conf

authoritative;
ddns-update-style none;
default-lease-time 86400;
max-lease-time 172800;
shared-network "lan" {
    subnet 192.168.1.0 netmask 255.255.255.0 {
        option subnet-mask 255.255.255.0;
        option domain-name-servers 192.168.1.1, 192.168.1.2;
        option broadcast-address 192.168.1.255;
        option routers 192.168.1.1;
        pool {
            range 192.168.1.254 192.168.1.254;
            deny unknown-clients;
            include "/etc/dhcp/subnet.conf";
        }
    }

dnsmasq

export PHPIPAM_TOKEN='12345678945678912345678a1235'
export PHPIPAM_HOST='https://phpipam.example.com/api/exporter/'

phpipam_export -s 192.168.1.0/24 -f dnsmasq -o /etc/dnsmasq.d/subnet.conf --on-change-action "systemctl reload dnsmasq"

json format

export PHPIPAM_TOKEN='12345678945678912345678a1235'
export PHPIPAM_HOST='https://phpipam.example.com/api/exporter/'

phpipam_export -s 192.168.1.0/24 -f json

Custom template

We can create a custom Jinja template file and use it for formating output data. The addresses are stored in the addresses template variable. Attributes of each device are described here 3.4 Addresses controller or we can use json format to get all attributes.

export PHPIPAM_TOKEN='12345678945678912345678a1235'
export PHPIPAM_HOST='https://phpipam.example.com/api/exporter/'

phpipam_export -s 192.168.1.0/24 --custom-template ansible_inventory.j2  -o /ansible-project/inventory.yml

phpipam_exporter's People

Contributors

blacksmith avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

phpipam_exporter's Issues

Unable to use against a phpipam instance with "invalid" certificates add ability to bypass request ce run rtificate validation

I've been trying to use this against a phpipam instance that doesn't have valid certificates.
Not exposed to internet so obtaining valid certs via let's encrypt is difficult.

adding a --insecure flag similar to curls to bypass TLS cert verification

I have forked and implemented this here https://github.com/dollis/phpipam_exporter

I habitually use black and this has caused the diff / PR to look larger than required.

what is your preferred formatter and args? So I can reformat and submit a PR

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.