code: func (te *iptTemplateExecuter) execute() ([]*iptRule, error) {
  	rules := make([]*iptRule, 0, len(te.templates))
  	for _, t := range te.templates {
  		w := new(bytes.Buffer)
  		if err := t.Template.Execute(w, te.data); err != nil {
  			return nil, err
  		}
  		af := seesaw.IPv6
  		if te.data.ServiceVIP.To4() != nil {
  			af = seesaw.IPv4
  		}
  		rule := &iptRule{
  			af,
  			t.action,
  			w.String(),
  		}
  		rules = append(rules, rule)
  	}
  	return rules, nil
  }
docs: // execute generates the list of iptRules for this iptTemplateExecuter.