Terraform module for creating a-records via Infoblox.
The example includes typical values used at Brown University
If developing locally, this module depends on you having GCP credentials of some kind. The module looks for a credential file in JSON format. You should export the following:
GOOGLE_APPLICATION_CREDENTIALS=/path/to/file.json
If the credentials are set correctly, the basic gcloud infrastructure is successfully created
You will also need Infobox credentials and permission of the specified zone and view. The Infoblox server must also be reachable within your network.
For Brown users we recommend using lastpass-cli
to source your secrets into environment variables (ask for access to creds)., ie
export INFOBLOX_USERNAME=$(lpass show infoblox --username)
export INFOBLOX_PASSWORD=$(lpass show infoblox --password)
export INFOBLOX_SERVER=$(lpass show infoblox --url | awk -F/ '{print $3}')
The following envs are required
INFOBLOX_USERNAME
INFOBLOX_PASSWORD
INFOBLOX_SERVER
This folder defines a Terraform module, which you can use in your
code by adding a module
configuration and setting its source
parameter to URL of this folder. See the examples folder for guidance
Name | Version |
---|---|
terraform | >= 1.9.0 |
infoblox | = 2.1 |
Name | Version |
---|---|
infoblox | 2.1.0 |
No modules.
Name | Type |
---|---|
infoblox_a_record.a_record | resource |
Name | Description | Type | Default | Required |
---|---|---|---|---|
ext_attrs | Any additional extensible attributes to set on the DNS object. Note that Tenant ID EA is already set in the module and gets merged with this value | map(string) |
{} |
no |
network_view | Used to specify the Infoblox network view to use when allocating an IP dynamically. Do not use this field unless you really know your use case | string |
null |
no |
record_dns_view | DNS View that contains the zone that the record is being created in. | string |
n/a | yes |
record_domain | The domain on portion of the FQDN. hostname.DOMAIN = FQDN | string |
n/a | yes |
record_hostname | The hostname portion of the FQDN. HOSTNAME.domain = FQDN | string |
n/a | yes |
record_ip | Static IP for the a-record | string |
n/a | yes |
ssl_mode | Use SSL when connecting to infoblox server | bool |
false |
no |
ttl | TTL value in seconds for the record. 0 disables caching. Lower values increase network traffic, High values can cause outages in case of sudden backing IP changes | number |
3600 |
no |
Name | Description |
---|---|
extended_attributes | The EAs created for the object |
fqdn | The fully-qualified domain name of the A record created |
id | ID of provisioned infoblox resource |
ip_address | The IP address associated with the A record |
network_view | n/a |
This repository uses Kitchen-Terraform to test the terraform modules. In the examplesdirectory you can find examples of how each module can be used. Those examples are fed to [Test Kitchen][https://kitchen.ci/]. To install test kitchen, first make sure you have Ruby and bundler installed.
brew install ruby
gem install bundler
Then install the prerequisites for test kitchen.
bundle install
You'll need to add some common credentials and secret variables
And now you're ready to run test kitchen. Test kitchen has a couple main commands:
bundle exec kitchen create
initializes terraform.bundle exec kitchen converge
runs our terraform examples.bundle exec kitchen verify
runs our inspec scripts against a converged kitchen.bundle exec kitchen test
does all the above.
Use GitLab Flow.
- Create feature branches for features and fixes from default branch
- Merge only from PR with review
- After merging to default branch a release is drafted using a github action. Check the draft and publish if you and tests are happy
Install and configure terraform pre-commit hooks
To run them: pre-commit run -a
This project has three workflows enabled:
-
PR labeler: When openning a PR to default branch, a label is given automatically according to the name of your feature branch. The labeler follows thenrules in pr-labeler.yml
-
Release Drafter: When merging to main, a release is drafted using the Release-Drafter Action
-
Kitchen test:
⚠️ This workflow runs on a self-hosted runner baceuseinfoblox
is behind our network. For scurity reasons it only runs on a manual dispatch so that the self-hosted runner is not exposed to outside PRs. In the self hosted runner there are important considarations about cleanning up files and dangling docker images. Also to avoid permission errors due to the container action writing files as ROOT, cleaning prior to checkout has been disabled. contains three jobs:- Build and push docker image.
- Kitchen tests
- Clean up dangling images on self-hosteds
We aim to upgrade this package at least once a year.
To install/upgrade the version of Ruby we use rbenv
. For instance to install and update to 2.7.3
:
rbenv install -v 2.7.3
rbenv local 2.7.3
This will update the .ruby-version
file if necessary
Look at the Gemfile and the output of bundle outdated
to decide what to update. Usually I update the versions in the Gemfile directly, then type bundle update
Use tfenv
to manage your versions of terraform. You can update the version in the .terraform-version
file and run tfenv install
and tf use
to install and use the version specified in the file.
You should also update the version of terraform specified in the versions.tf
file.