-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #44 from smutel/AddIpamService
feat: Add resource and data for IPAM service
- Loading branch information
Showing
11 changed files
with
580 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# netbox\_ipam\_service Data Source | ||
|
||
Get info about ipam service from netbox. | ||
|
||
## Example Usage | ||
|
||
```hcl | ||
data "netbox_ipam_service" "service_test" { | ||
device_id = 5 | ||
name = "Mail" | ||
port = 25 | ||
protocol = "tcp" | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
* ``device_id`` - (Optional) The ID of the device linked to this object. | ||
* ``name`` - (Required) The name of this object. | ||
* ``port`` - (Required) The port of this object. | ||
* ``protocol`` - (Required) The protocol of this service (tcp or udp). | ||
* ``virtualmachine_id`` - (Optional) The ID of the vm linked to this object. | ||
|
||
## Attributes Reference | ||
|
||
In addition to the above arguments, the following attributes are exported: | ||
* ``id`` - The id (ref in Netbox) of this object. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# netbox\_ipam\_service Resource | ||
|
||
Manage a service within Netbox. | ||
|
||
## Example Usage | ||
|
||
```hcl | ||
resource "netbox_ipam_service" "service_test" { | ||
name = "SMTP" | ||
virtualmachine_id = netbox_virtualization_vm.vm_test.id | ||
ip_addresses_id = [netbox_ipam_ip_addresses.ip_test.id] | ||
port = "22" | ||
protocol = "tcp" | ||
description = "Service created by terraform" | ||
tag { | ||
name = "tag1" | ||
slug = "tag1" | ||
} | ||
custom_fields = { | ||
cf_boolean = "true" | ||
cf_date = "2020-12-25" | ||
cf_integer = "10" | ||
cf_selection = "1" | ||
cf_text = "Some text" | ||
cf_url = "https://github.com" | ||
} | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
* ``custom_fields`` - (Optional) Custom Field Keys and Values for this object | ||
* For boolean, use the string value "true" or "false" | ||
* For data, use the string format "YYYY-MM-DD" | ||
* For integer, use the value between double quote "10" | ||
* For selection, use the level id | ||
* For text, use the string value | ||
* For URL, use the URL as string | ||
* ``description`` - (Optional) The description of this object. | ||
* ``device_id`` - (Optional) The ID of the device linked to this object. | ||
* ``ip_addresses_id`` - (Optional) Array of ID of the IP addresses attached to this object. | ||
* ``name`` - (Required) The name for this object. | ||
* ``port`` - (Optional) The port of this object. | ||
* ``protocol`` - (Required) The protocol of this object (tcp or udp). | ||
* ``virtualmachine_id`` - (Optional) The ID of the vm linked to this object. | ||
|
||
The ``tag`` block supports: | ||
* ``name`` - (Required) Name of the existing tag to associate with this resource. | ||
* ``slug`` - (Required) Slug of the existing tag to associate with this resource. | ||
|
||
## Attributes Reference | ||
|
||
In addition to the above arguments, the following attributes are exported: | ||
* ``id`` - The id (ref in Netbox) of this object. |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#!/bin/bash | ||
|
||
TMP_JSON_FILE="/tmp/docker.json" | ||
|
||
if ! which jq > /dev/null; then | ||
echo "This script need jq binary to work" | ||
fi | ||
|
||
curl -sq --unix-socket /var/run/docker.sock http://localhost/containers/json -o ${TMP_JSON_FILE} | ||
|
||
DOCKER_COUNT=$(cat ${TMP_JSON_FILE} | jq ".[] | length" | uniq) | ||
|
||
for ((i = 0 ; i < ${DOCKER_COUNT} ; i++)); do | ||
IMAGE_NAME=$(cat /tmp/docker.json | jq .[$i].Image | xargs | cut -d":" -f1) | ||
|
||
if [ "${IMAGE_NAME}" == "nginx" ]; then | ||
PORTS_COUNT=$(cat /tmp/docker.json | jq ".[$i].Ports | length") | ||
|
||
for ((j = 0 ; j < ${PORTS_COUNT} ; j++)); do | ||
PORT=$(cat /tmp/docker.json | jq .[$i].Ports[$j].PublicPort | xargs) | ||
if [ "$PORT" != "null" ]; then | ||
PUBLIC_PORT=$PORT | ||
fi | ||
done | ||
fi | ||
done | ||
|
||
export NETBOX_URL="127.0.0.1:$PUBLIC_PORT" | ||
export NETBOX_SCHEME="http" | ||
export NETBOX_TOKEN="0123456789abcdef0123456789abcdef01234567" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
package netbox | ||
|
||
import ( | ||
"fmt" | ||
"strconv" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/helper/schema" | ||
"github.com/hashicorp/terraform-plugin-sdk/helper/validation" | ||
netboxclient "github.com/netbox-community/go-netbox/netbox/client" | ||
"github.com/netbox-community/go-netbox/netbox/client/ipam" | ||
) | ||
|
||
func dataNetboxIpamService() *schema.Resource { | ||
return &schema.Resource{ | ||
Read: dataNetboxIpamServiceRead, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"device_id": { | ||
Type: schema.TypeInt, | ||
Optional: true, | ||
ConflictsWith: []string{"virtualmachine_id"}, | ||
}, | ||
"name": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ValidateFunc: validation.StringLenBetween(1, 50), | ||
}, | ||
"port": { | ||
Type: schema.TypeInt, | ||
Required: true, | ||
ValidateFunc: validation.IntBetween(1, 65535), | ||
}, | ||
"protocol": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ValidateFunc: validation.StringInSlice([]string{"tcp", "udp"}, false), | ||
}, | ||
"virtualmachine_id": { | ||
Type: schema.TypeInt, | ||
Optional: true, | ||
ConflictsWith: []string{"device_id"}, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func dataNetboxIpamServiceRead(d *schema.ResourceData, | ||
m interface{}) error { | ||
client := m.(*netboxclient.NetBoxAPI) | ||
|
||
deviceID := int64(d.Get("device_id").(int)) | ||
deviceIDStr := strconv.FormatInt(deviceID, 10) | ||
name := d.Get("name").(string) | ||
port := int64(d.Get("port").(int)) | ||
portStr := strconv.FormatInt(port, 10) | ||
protocol := d.Get("protocol").(string) | ||
vmID := int64(d.Get("virtualmachine_id").(int)) | ||
vmIDStr := strconv.FormatInt(vmID, 10) | ||
|
||
p := ipam.NewIpamServicesListParams().WithName(&name) | ||
p.SetPort(&portStr) | ||
p.SetProtocol(&protocol) | ||
if deviceID != 0 { | ||
p.SetDeviceID(&deviceIDStr) | ||
} else if vmID != 0 { | ||
p.SetVirtualMachineID(&vmIDStr) | ||
} | ||
|
||
list, err := client.Ipam.IpamServicesList(p, nil) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
if *list.Payload.Count < 1 { | ||
return fmt.Errorf("Your query returned no results. " + | ||
"Please change your search criteria and try again.") | ||
} else if *list.Payload.Count > 1 { | ||
return fmt.Errorf("Your query returned more than one result. " + | ||
"Please try a more specific search criteria.") | ||
} | ||
|
||
d.SetId(strconv.FormatInt(list.Payload.Results[0].ID, 10)) | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.