Skip to content

Commit

Permalink
MAJOR: move config-parser into client-native
Browse files Browse the repository at this point in the history
there are lots off reasons why we need to do that,
but main reason is to move from custom types that config parser uses to client native models.
this will also simplify further development since we almost 99% percent of the time need to
add similar code to both projects and with this change, only one PR is needed
  • Loading branch information
oktalz committed Aug 20, 2024
1 parent 32e9bca commit ad64005
Showing 1 changed file with 11 additions and 112 deletions.
123 changes: 11 additions & 112 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,126 +1,25 @@
# ![HAProxy](assets/images/haproxy-weblogo-210x49.png "HAProxy")

## HAProxy configuration parser
<br/>

[![Contributors](https://img.shields.io/github/contributors/haproxytech/config-parser?color=purple)](https://github.com/haproxy/haproxy/blob/master/CONTRIBUTING)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
:warning: This project has been merged with [client-native](https://github.com/haproxytech/client-native) project.

### autogenerated code
if you change types/types.go you need to run
```bash
make generate
use
```go
import "github.com/haproxytech/client-native/v6/config-parser"
```
### Contributing

For commit messages and general style please follow the haproxy project's [CONTRIBUTING guide](https://github.com/haproxy/haproxy/blob/master/CONTRIBUTING) and use that where applicable.

Please use `golangci-lint run` from [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) for linting code.

### Example
instead of

```go
package main

import (
"github.com/haproxytech/config-parser/v5"
"github.com/haproxytech/config-parser/v5/options"
"github.com/haproxytech/config-parser/v5/parsers/http/actions"
// ...
)
// ...

func main() {
p, err := parser.New(options.Path("config.cfg"))
/* p, err := parser.New(
options.UseMd5Hash,
options.Path("config.cfg")
)*/
if err != nil {
log.Panic(err)
}

{
data, _ := p.Get(parser.Comments, parser.CommentsSectionName, "# _version", true)
if err == errors.ErrFetch {
log.Panicln("we have an fetch error !!")
}
ver, _ := data.(*types.Int64C)
ver.Value = ver.Value + 1
}

{
p.Set(parser.Frontends, "http", "option forwardfor", types.OptionForwardFor{})
}

{
// for options that can exists multiple times in config Insert is preffered
//
// setting http-request & http-response is a bit different
// since they accept multiple structs
httpRequestActionDeny := &actions.Deny{
DenyStatus: "0",
Cond: "unless",
CondTest: "{ src 127.0.0.1 }",
}
err = p.Insert(parser.Backends, "web_servers", "http-request", httpRequestActionDeny)
// you can also choose index where action should be inserted
err = p.Insert(parser.Backends, "web_servers", "http-request", httpRequestActionDeny, 2)
}

{
data, err := p.Get(parser.Global, parser.GlobalSectionName, "stats socket")
if err != nil {
log.Panicln(err)
}
val, _ := data.([]types.Socket)
log.Println(val[0])
val[0].Path = "$PWD/haproxy-runtime-api.1.sock"
log.Println(val[0])
}

{
data, err := p.Get(parser.Global, parser.GlobalSectionName, "daemon")
log.Println(data, err)
if err == errors.ErrFetch {
log.Panicln("we have an fetch error !!")
}
//remove it
p.Set(parser.Global, parser.GlobalSectionName, "daemon", nil)
}

{
datar, err := p.Get(parser.Resolvers, "ns1", "nameserver")
if err == nil {
ns := datar.([]types.Nameserver)
log.Println(ns[0].Name, ns[0].Address)
log.Println(ns[1].Name, ns[1].Address)
ns[1].Name = "hahaha"
ns[0].Address = "0.0.0.0:8080"
}
datar, err = p.Get(parser.Resolvers, "ns1", "nameserver")
if err == nil {
ns := datar.([]types.Nameserver)
log.Println(ns[0].Name, ns[0].Address)
log.Println(ns[1].Name, ns[1].Address)
}
}
import "github.com/haproxytech/config-parser/v5"
```

{
log.Println("nbproc ==================================================")
data, err := p.Get(parser.Global, parser.GlobalSectionName, "nbproc")
if err != nil {
log.Println(err)
} else {
d := data.(*types.Int64C)
log.Println(d.Value)
d.Value = 5
}
}
## Maintenance mode

p.Save(configFilename)
}
This library remains supported until September 2025 (bug fixes only).

```
All new development must be done on the [client-native](https://github.com/haproxytech/client-native) repository.

## License

Expand Down

0 comments on commit ad64005

Please sign in to comment.