Advanced features
Integrate with Git
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 (i.e. GitHub, GitLab, 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:
bashcd /etc/haproxygit initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainbashcd /etc/haproxygit initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainbashcd /etc/hapee-<VERSION>git initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainbashcd /etc/hapee-<VERSION>git initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainbashcd /etc/haproxygit initgit remote add origin https://github.com/username/repo.gitgit checkout -b mainbashcd /etc/haproxygit initgit remote add origin https://github.com/username/repo.gitgit checkout -b main -
Set your username and email for commits.
bashsudo git config --global user.name "Your Name"sudo git config --global user.email "name@example.com"bashsudo 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.
bashsudo git add .sudo git commit -m "Initial commit"sudo git push origin mainbashsudo git add .sudo git commit -m "Initial commit"sudo git push origin main -
Add the file
/etc/haproxy/git.settings
: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
-
Edit your Data Plane API configuration file (for example,
/etc/haproxy/dataplaneapi.yml
).Add the
git_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. If using the
program
section in your HAProxy configuration file, you can do this by restarting the HAProxy service:bashsudo systemctl restart haproxybashsudo systemctl restart haproxyOtherwise, restart the Data Plane API service.
-
Use the
pull
action on the/services/git/actions
API endpoint to sync remote changes to the local repository.bashcurl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull"}' \'127.0.0.1:5555/v2/services/git/actions'bashcurl -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
:
bash
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=1'
bash
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=1'
Commit the change by calling the commit
action on the /services/git/actions
API endpoint:
bash
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'
bash
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:
bash
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"push" }' \'127.0.0.1:5555/v2/services/git/actions'
bash
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:
bash
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull" }' \'127.0.0.1:5555/v2/services/git/actions'
bash
curl -X POST \-u admin:adminpwd \-H 'Content-Type: application/json' \-d '{ "action":"pull" }' \'127.0.0.1:5555/v2/services/git/actions'
If this page was useful, please, Leave the feedback.