123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- package l7policies
- import (
- "devel.mephi.ru/iacherepanov/openstack-gophercloud"
- "devel.mephi.ru/iacherepanov/openstack-gophercloud/pagination"
- )
- // CreateOptsBuilder allows extensions to add additional parameters to the
- // Create request.
- type CreateOptsBuilder interface {
- ToL7PolicyCreateMap() (map[string]interface{}, error)
- }
- type Action string
- type RuleType string
- type CompareType string
- const (
- ActionRedirectToPool Action = "REDIRECT_TO_POOL"
- ActionRedirectToURL Action = "REDIRECT_TO_URL"
- ActionReject Action = "REJECT"
- TypeCookie RuleType = "COOKIE"
- TypeFileType RuleType = "FILE_TYPE"
- TypeHeader RuleType = "HEADER"
- TypeHostName RuleType = "HOST_NAME"
- TypePath RuleType = "PATH"
- CompareTypeContains CompareType = "CONTAINS"
- CompareTypeEndWith CompareType = "ENDS_WITH"
- CompareTypeEqual CompareType = "EQUAL_TO"
- CompareTypeRegex CompareType = "REGEX"
- CompareTypeStartWith CompareType = "STARTS_WITH"
- )
- // CreateOpts is the common options struct used in this package's Create
- // operation.
- type CreateOpts struct {
- // Name of the L7 policy.
- Name string `json:"name,omitempty"`
- // The ID of the listener.
- ListenerID string `json:"listener_id" required:"true"`
- // The L7 policy action. One of REDIRECT_TO_POOL, REDIRECT_TO_URL, or REJECT.
- Action Action `json:"action" required:"true"`
- // The position of this policy on the listener.
- Position int32 `json:"position,omitempty"`
- // A human-readable description for the resource.
- Description string `json:"description,omitempty"`
- // ProjectID is the UUID of the project who owns the L7 policy in octavia.
- // Only administrative users can specify a project UUID other than their own.
- ProjectID string `json:"project_id,omitempty"`
- // Requests matching this policy will be redirected to the pool with this ID.
- // Only valid if action is REDIRECT_TO_POOL.
- RedirectPoolID string `json:"redirect_pool_id,omitempty"`
- // Requests matching this policy will be redirected to this URL.
- // Only valid if action is REDIRECT_TO_URL.
- RedirectURL string `json:"redirect_url,omitempty"`
- }
- // ToL7PolicyCreateMap builds a request body from CreateOpts.
- func (opts CreateOpts) ToL7PolicyCreateMap() (map[string]interface{}, error) {
- return gophercloud.BuildRequestBody(opts, "l7policy")
- }
- // Create accepts a CreateOpts struct and uses the values to create a new l7policy.
- func Create(c *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
- b, err := opts.ToL7PolicyCreateMap()
- if err != nil {
- r.Err = err
- return
- }
- _, r.Err = c.Post(rootURL(c), b, &r.Body, nil)
- return
- }
- // ListOptsBuilder allows extensions to add additional parameters to the
- // List request.
- type ListOptsBuilder interface {
- ToL7PolicyListQuery() (string, error)
- }
- // ListOpts allows the filtering and sorting of paginated collections through
- // the API.
- type ListOpts struct {
- Name string `q:"name"`
- ListenerID string `q:"listener_id"`
- Action string `q:"action"`
- ProjectID string `q:"project_id"`
- RedirectPoolID string `q:"redirect_pool_id"`
- RedirectURL string `q:"redirect_url"`
- ID string `q:"id"`
- Limit int `q:"limit"`
- Marker string `q:"marker"`
- SortKey string `q:"sort_key"`
- SortDir string `q:"sort_dir"`
- }
- // ToL7PolicyListQuery formats a ListOpts into a query string.
- func (opts ListOpts) ToL7PolicyListQuery() (string, error) {
- q, err := gophercloud.BuildQueryString(opts)
- return q.String(), err
- }
- // List returns a Pager which allows you to iterate over a collection of
- // l7policies. It accepts a ListOpts struct, which allows you to filter and sort
- // the returned collection for greater efficiency.
- //
- // Default policy settings return only those l7policies that are owned by the
- // project who submits the request, unless an admin user submits the request.
- func List(c *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
- url := rootURL(c)
- if opts != nil {
- query, err := opts.ToL7PolicyListQuery()
- if err != nil {
- return pagination.Pager{Err: err}
- }
- url += query
- }
- return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
- return L7PolicyPage{pagination.LinkedPageBase{PageResult: r}}
- })
- }
- // Get retrieves a particular l7policy based on its unique ID.
- func Get(c *gophercloud.ServiceClient, id string) (r GetResult) {
- _, r.Err = c.Get(resourceURL(c, id), &r.Body, nil)
- return
- }
- // Delete will permanently delete a particular l7policy based on its unique ID.
- func Delete(c *gophercloud.ServiceClient, id string) (r DeleteResult) {
- _, r.Err = c.Delete(resourceURL(c, id), nil)
- return
- }
- // UpdateOptsBuilder allows extensions to add additional parameters to the
- // Update request.
- type UpdateOptsBuilder interface {
- ToL7PolicyUpdateMap() (map[string]interface{}, error)
- }
- // UpdateOpts is the common options struct used in this package's Update
- // operation.
- type UpdateOpts struct {
- // Name of the L7 policy, empty string is allowed.
- Name *string `json:"name,omitempty"`
- // The L7 policy action. One of REDIRECT_TO_POOL, REDIRECT_TO_URL, or REJECT.
- Action Action `json:"action,omitempty"`
- // The position of this policy on the listener.
- Position int32 `json:"position,omitempty"`
- // A human-readable description for the resource, empty string is allowed.
- Description *string `json:"description,omitempty"`
- // Requests matching this policy will be redirected to the pool with this ID.
- // Only valid if action is REDIRECT_TO_POOL.
- RedirectPoolID string `json:"redirect_pool_id,omitempty"`
- // Requests matching this policy will be redirected to this URL.
- // Only valid if action is REDIRECT_TO_URL.
- RedirectURL string `json:"redirect_url,omitempty"`
- }
- // ToL7PolicyUpdateMap builds a request body from UpdateOpts.
- func (opts UpdateOpts) ToL7PolicyUpdateMap() (map[string]interface{}, error) {
- return gophercloud.BuildRequestBody(opts, "l7policy")
- }
- // Update allows l7policy to be updated.
- func Update(c *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
- b, err := opts.ToL7PolicyUpdateMap()
- if err != nil {
- r.Err = err
- return
- }
- _, r.Err = c.Put(resourceURL(c, id), b, &r.Body, &gophercloud.RequestOpts{
- OkCodes: []int{200},
- })
- return
- }
- // CreateRuleOpts is the common options struct used in this package's CreateRule
- // operation.
- type CreateRuleOpts struct {
- // The L7 rule type. One of COOKIE, FILE_TYPE, HEADER, HOST_NAME, or PATH.
- RuleType RuleType `json:"type" required:"true"`
- // The comparison type for the L7 rule. One of CONTAINS, ENDS_WITH, EQUAL_TO, REGEX, or STARTS_WITH.
- CompareType CompareType `json:"compare_type" required:"true"`
- // The value to use for the comparison. For example, the file type to compare.
- Value string `json:"value" required:"true"`
- // ProjectID is the UUID of the project who owns the rule in octavia.
- // Only administrative users can specify a project UUID other than their own.
- ProjectID string `json:"project_id,omitempty"`
- // The key to use for the comparison. For example, the name of the cookie to evaluate.
- Key string `json:"key,omitempty"`
- // When true the logic of the rule is inverted. For example, with invert true,
- // equal to would become not equal to. Default is false.
- Invert bool `json:"invert,omitempty"`
- }
- // ToRuleCreateMap builds a request body from CreateRuleOpts.
- func (opts CreateRuleOpts) ToRuleCreateMap() (map[string]interface{}, error) {
- return gophercloud.BuildRequestBody(opts, "rule")
- }
- // CreateRule will create and associate a Rule with a particular L7Policy.
- func CreateRule(c *gophercloud.ServiceClient, policyID string, opts CreateRuleOpts) (r CreateRuleResult) {
- b, err := opts.ToRuleCreateMap()
- if err != nil {
- r.Err = err
- return
- }
- _, r.Err = c.Post(ruleRootURL(c, policyID), b, &r.Body, nil)
- return
- }
- // ListRulesOptsBuilder allows extensions to add additional parameters to the
- // ListRules request.
- type ListRulesOptsBuilder interface {
- ToRulesListQuery() (string, error)
- }
- // ListRulesOpts allows the filtering and sorting of paginated collections
- // through the API.
- type ListRulesOpts struct {
- RuleType RuleType `q:"type"`
- ProjectID string `q:"project_id"`
- ID string `q:"id"`
- Limit int `q:"limit"`
- Marker string `q:"marker"`
- SortKey string `q:"sort_key"`
- SortDir string `q:"sort_dir"`
- }
- // ToRulesListQuery formats a ListOpts into a query string.
- func (opts ListRulesOpts) ToRulesListQuery() (string, error) {
- q, err := gophercloud.BuildQueryString(opts)
- return q.String(), err
- }
- // ListRules returns a Pager which allows you to iterate over a collection of
- // rules. It accepts a ListRulesOptsBuilder, which allows you to filter and
- // sort the returned collection for greater efficiency.
- //
- // Default policy settings return only those rules that are owned by the
- // project who submits the request, unless an admin user submits the request.
- func ListRules(c *gophercloud.ServiceClient, policyID string, opts ListRulesOptsBuilder) pagination.Pager {
- url := ruleRootURL(c, policyID)
- if opts != nil {
- query, err := opts.ToRulesListQuery()
- if err != nil {
- return pagination.Pager{Err: err}
- }
- url += query
- }
- return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
- return RulePage{pagination.LinkedPageBase{PageResult: r}}
- })
- }
- // GetRule retrieves a particular L7Policy Rule based on its unique ID.
- func GetRule(c *gophercloud.ServiceClient, policyID string, ruleID string) (r GetRuleResult) {
- _, r.Err = c.Get(ruleResourceURL(c, policyID, ruleID), &r.Body, nil)
- return
- }
- // DeleteRule will remove a Rule from a particular L7Policy.
- func DeleteRule(c *gophercloud.ServiceClient, policyID string, ruleID string) (r DeleteRuleResult) {
- _, r.Err = c.Delete(ruleResourceURL(c, policyID, ruleID), nil)
- return
- }
- // UpdateRuleOptsBuilder allows to add additional parameters to the PUT request.
- type UpdateRuleOptsBuilder interface {
- ToRuleUpdateMap() (map[string]interface{}, error)
- }
- // UpdateRuleOpts is the common options struct used in this package's Update
- // operation.
- type UpdateRuleOpts struct {
- // The L7 rule type. One of COOKIE, FILE_TYPE, HEADER, HOST_NAME, or PATH.
- RuleType RuleType `json:"type,omitempty"`
- // The comparison type for the L7 rule. One of CONTAINS, ENDS_WITH, EQUAL_TO, REGEX, or STARTS_WITH.
- CompareType CompareType `json:"compare_type,omitempty"`
- // The value to use for the comparison. For example, the file type to compare.
- Value string `json:"value,omitempty"`
- // The key to use for the comparison. For example, the name of the cookie to evaluate.
- Key string `json:"key,omitempty"`
- // When true the logic of the rule is inverted. For example, with invert true,
- // equal to would become not equal to. Default is false.
- Invert bool `json:"invert,omitempty"`
- }
- // ToRuleUpdateMap builds a request body from UpdateRuleOpts.
- func (opts UpdateRuleOpts) ToRuleUpdateMap() (map[string]interface{}, error) {
- return gophercloud.BuildRequestBody(opts, "rule")
- }
- // UpdateRule allows Rule to be updated.
- func UpdateRule(c *gophercloud.ServiceClient, policyID string, ruleID string, opts UpdateRuleOptsBuilder) (r UpdateRuleResult) {
- b, err := opts.ToRuleUpdateMap()
- if err != nil {
- r.Err = err
- return
- }
- _, r.Err = c.Put(ruleResourceURL(c, policyID, ruleID), b, &r.Body, &gophercloud.RequestOpts{
- OkCodes: []int{200, 201, 202},
- })
- return
- }
|