Advanced features
Integrate with Git
Available in:
- HAProxy ALOHA
- HAProxy Enterprise
The Data Plane API integrates with Git, enabling you to sync load balancer configuration changes to a remote Git repository. The API serves as a Git client, providing commands to commit changes and push and pull from a remote repository.
Configure Git integration Jump to heading
-
Create a new empty Git repository on your version control server (for example, GitHub, GitLab, or Jenkins).
-
Create an access token so that the Data Plane API can access your remote Git repository.
-
Configure the load balancer configuration directory as a Git clone:
nixcd /etc/hapee-<VERSION>git initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainnixcd /etc/hapee-<VERSION>git initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainnixcd /etc/haproxygit initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainnixcd /etc/haproxygit initgit remote add origin https://github.com/username/repo.gitgit checkout -b main -
Set your username and email for commits.
nixsudo git config --global user.name "Your Name"sudo git config --global user.email "name@example.com"nixsudo git config --global user.name "Your Name"sudo git config --global user.email "name@example.com" -
Commit and push the local configuration files to the remote repository.
nixsudo git add .sudo git commit -m "Initial commit"sudo git push origin mainnixsudo git add .sudo git commit -m "Initial commit"sudo git push origin main -
Add the file
git.settings
.Add
git.settings
to/etc/hapee-<VERSION>
:git.settingsjson{"url": "https://github.com/username/repo.git","auth_method": "access_token","auth_access_token": "C4Axa1kCcxPv-fzrhsde","storage_type": "dir","storage_dir": "/etc/hapee-<VERSION>/","config_file": "hapee-lb.cfg"}git.settingsjson{"url": "https://github.com/username/repo.git","auth_method": "access_token","auth_access_token": "C4Axa1kCcxPv-fzrhsde","storage_type": "dir","storage_dir": "/etc/hapee-<VERSION>/","config_file": "hapee-lb.cfg"}Add
git.settings
to/etc/haproxy
:git.settingsjson{"url": "https://github.com/username/repo.git","auth_method": "access_token","auth_access_token": "C4Axa1kCcxPv-fzrhsde","storage_type": "dir","storage_dir": "/etc/haproxy/","config_file": "haproxy.cfg"}git.settingsjson{"url": "https://github.com/username/repo.git","auth_method": "access_token","auth_access_token": "C4Axa1kCcxPv-fzrhsde","storage_type": "dir","storage_dir": "/etc/haproxy/","config_file": "haproxy.cfg"}In this example:
url
is the URL of your git repositoryauth_access_token
is your repository’s access tokenstorage_dir
is the path to your load balancer configuration directoryconfig_file
is the name of your configuration file
-
Add Git settings to your Data Plane API configuration file.
Edit
/etc/hapee-<VERSION>/dataplaneapi.yml
. Add thegit_mode
andgit_settings_file
fields to thedataplaneapi
block:dataplaneapi.ymlyamldataplaneapi:host: 0.0.0.0port: 5555git_mode: truegit_settings_file: /etc/hapee-<VERSION>/git.settingsdataplaneapi.ymlyamldataplaneapi:host: 0.0.0.0port: 5555git_mode: truegit_settings_file: /etc/hapee-<VERSION>/git.settingsEdit
/app/management/var/lib/dataplaneapi/dataplaneapi.yaml
. Add thegit_mode
andgit_settings_file
fields to thedataplaneapi
block:dataplaneapi.ymlyamldataplaneapi:host: 0.0.0.0port: 5555git_mode: truegit_settings_file: /etc/haproxy/git.settingsdataplaneapi.ymlyamldataplaneapi:host: 0.0.0.0port: 5555git_mode: truegit_settings_file: /etc/haproxy/git.settings -
Restart the Data Plane API.
nixsudo systemctl restart hapee-extras-dataplaneapinixsudo systemctl restart hapee-extras-dataplaneapiIn the Services tab, restart the dataplaneapi service.
-
Use the
pull
action on the/services/git/actions
API endpoint to sync remote changes to the local repository.nixcurl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull"}' \'127.0.0.1:5555/v2/services/git/actions'nixcurl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull"}' \'127.0.0.1:5555/v2/services/git/actions'
Sync changes with the remote repository Jump to heading
Once the HAProxy configuration directory has been initialized as a local git clone, you can sync any changes by calling the commit
and push
actions.
For example, after adding a new server to an existing backend named webservers
:
nix
CFGVER=$(curl -s -u admin:adminpwd http://localhost:5555/v2/services/haproxy/configuration/version)curl -X POST \-u admin:adminpwd \-H "Content-Type: application/json" \-d '{"name":"anotherserver", "address":"127.0.0.1", "port":8080, "check":"enabled"}' \'127.0.0.1:5555/v2/services/haproxy/configuration/servers?backend=webservers&version=$CFGVER'
nix
CFGVER=$(curl -s -u admin:adminpwd http://localhost:5555/v2/services/haproxy/configuration/version)curl -X POST \-u admin:adminpwd \-H "Content-Type: application/json" \-d '{"name":"anotherserver", "address":"127.0.0.1", "port":8080, "check":"enabled"}' \'127.0.0.1:5555/v2/services/haproxy/configuration/servers?backend=webservers&version=$CFGVER'
Note
The version
parameter in DELETE, POST, and PUT requests must match the system’s current version. The APIv3 examples in this section use a GET request to /v3/services/haproxy/configuration/version
to retrieve the version and populate the CFGVER
environment variable for the URL version
parameter.
Commit the change by calling the commit
action on the /services/git/actions
API endpoint:
nix
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"commit", "commit_message":"add new web server" }' \'127.0.0.1:5555/v2/services/git/actions'
nix
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"commit", "commit_message":"add new web server" }' \'127.0.0.1:5555/v2/services/git/actions'
Then push the change to the remote repository by calling the push
action:
nix
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"push" }' \'127.0.0.1:5555/v2/services/git/actions'
nix
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"push" }' \'127.0.0.1:5555/v2/services/git/actions'
You can also pull the latest changes from the remote repository by calling the pull
action:
nix
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull" }' \'127.0.0.1:5555/v2/services/git/actions'
nix
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull" }' \'127.0.0.1:5555/v2/services/git/actions'
Do you have any suggestions on how we can improve the content of this page?