mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-06-30 02:31:10 +00:00
Latest work
This commit is contained in:
parent
eaeb42db63
commit
bc3889b8eb
@ -1,7 +1,8 @@
|
||||
## 0.1.0
|
||||
## 0.1.0 (UNRELEASED)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* **New Data Source:** `proxmox_virtual_environment_access_group`
|
||||
* **New Data Source:** `proxmox_virtual_environment_access_groups`
|
||||
* **New Data Source:** `proxmox_virtual_environment_version`
|
||||
* **New Resource:** `proxmox_virtual_environment_access_group`
|
||||
|
13
README.md
13
README.md
@ -66,6 +66,19 @@ This data source doesn't accept arguments.
|
||||
* `repository_id` - The repository id.
|
||||
* `version` - The version string.
|
||||
|
||||
### Resources
|
||||
|
||||
#### Virtual Environment
|
||||
|
||||
##### Access Group (proxmox_virtual_environment_access_group)
|
||||
|
||||
###### Arguments
|
||||
* `comment` - (Optional) The group comment.
|
||||
* `group_id` - (Required) The group id.
|
||||
|
||||
###### Attributes
|
||||
* `members` - The group members as a list with `username@realm` entries.
|
||||
|
||||
## Developing the Provider
|
||||
If you wish to work on the provider, you'll first need [Go](http://www.golang.org) installed on your machine (version 1.12+ is *required*). You'll also need to correctly setup a [GOPATH](http://golang.org/doc/code.html#GOPATH), as well as adding `$GOPATH/bin` to your `$PATH`.
|
||||
|
||||
|
@ -16,7 +16,6 @@ const (
|
||||
mkDataSourceVirtualEnvironmentAccessGroupMembers = "members"
|
||||
)
|
||||
|
||||
// dataSourceVirtualEnvironmentAccessGroup retrieves a list of access groups.
|
||||
func dataSourceVirtualEnvironmentAccessGroup() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Schema: map[string]*schema.Schema{
|
||||
@ -41,7 +40,6 @@ func dataSourceVirtualEnvironmentAccessGroup() *schema.Resource {
|
||||
}
|
||||
}
|
||||
|
||||
// dataSourceVirtualEnvironmentAccessGroupRead retrieves a list of access groups.
|
||||
func dataSourceVirtualEnvironmentAccessGroupRead(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
@ -50,7 +48,6 @@ func dataSourceVirtualEnvironmentAccessGroupRead(d *schema.ResourceData, m inter
|
||||
}
|
||||
|
||||
groupID := d.Get(mkDataSourceVirtualEnvironmentAccessGroupID).(string)
|
||||
|
||||
accessGroup, err := config.veClient.GetAccessGroup(groupID)
|
||||
|
||||
if err != nil {
|
||||
|
@ -15,7 +15,6 @@ const (
|
||||
mkDataSourceVirtualEnvironmentAccessGroupsIDs = "ids"
|
||||
)
|
||||
|
||||
// dataSourceVirtualEnvironmentAccessGroups retrieves a list of access groups.
|
||||
func dataSourceVirtualEnvironmentAccessGroups() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Schema: map[string]*schema.Schema{
|
||||
@ -36,7 +35,6 @@ func dataSourceVirtualEnvironmentAccessGroups() *schema.Resource {
|
||||
}
|
||||
}
|
||||
|
||||
// dataSourceVirtualEnvironmentAccessGroupsRead retrieves a list of access groups.
|
||||
func dataSourceVirtualEnvironmentAccessGroupsRead(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
|
@ -17,7 +17,6 @@ const (
|
||||
mkDataSourceVirtualEnvironmentVersionVersion = "version"
|
||||
)
|
||||
|
||||
// dataSourceVirtualEnvironmentVersion retrieves version information for a Proxmox installation.
|
||||
func dataSourceVirtualEnvironmentVersion() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Schema: map[string]*schema.Schema{
|
||||
@ -50,7 +49,6 @@ func dataSourceVirtualEnvironmentVersion() *schema.Resource {
|
||||
}
|
||||
}
|
||||
|
||||
// dataSourceVirtualEnvironmentVersionRead reads version information for a Proxmox installation.
|
||||
func dataSourceVirtualEnvironmentVersionRead(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
|
16
example/resource_virtual_environment_access_group.tf
Normal file
16
example/resource_virtual_environment_access_group.tf
Normal file
@ -0,0 +1,16 @@
|
||||
resource "proxmox_virtual_environment_access_group" "example" {
|
||||
comment = "Created by Terraform"
|
||||
group_id = "terraform-provider-proxmox-example"
|
||||
}
|
||||
|
||||
output "resource_proxmox_virtual_environment_access_group_example_comment" {
|
||||
value = proxmox_virtual_environment_access_group.example.comment
|
||||
}
|
||||
|
||||
output "resource_proxmox_virtual_environment_access_group_example_id" {
|
||||
value = proxmox_virtual_environment_access_group.example.id
|
||||
}
|
||||
|
||||
output "resource_proxmox_virtual_environment_access_group_example_members" {
|
||||
value = proxmox_virtual_environment_access_group.example.members
|
||||
}
|
@ -30,7 +30,9 @@ func Provider() *schema.Provider {
|
||||
"proxmox_virtual_environment_access_groups": dataSourceVirtualEnvironmentAccessGroups(),
|
||||
"proxmox_virtual_environment_version": dataSourceVirtualEnvironmentVersion(),
|
||||
},
|
||||
ResourcesMap: map[string]*schema.Resource{},
|
||||
ResourcesMap: map[string]*schema.Resource{
|
||||
"proxmox_virtual_environment_access_group": resourceVirtualEnvironmentAccessGroup(),
|
||||
},
|
||||
Schema: map[string]*schema.Schema{
|
||||
mkProviderVirtualEnvironment: &schema.Schema{
|
||||
Type: schema.TypeList,
|
||||
@ -66,7 +68,6 @@ func Provider() *schema.Provider {
|
||||
}
|
||||
}
|
||||
|
||||
// providerConfigure() configures the provider before processing any IronMQ resources.
|
||||
func providerConfigure(d *schema.ResourceData) (interface{}, error) {
|
||||
var err error
|
||||
var veClient *proxmox.VirtualEnvironmentClient
|
||||
|
@ -10,8 +10,8 @@ import (
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// VirtualEnvironmentAccessGroupCreateRequestData contains the data for an access group create request.
|
||||
type VirtualEnvironmentAccessGroupCreateRequestData struct {
|
||||
// VirtualEnvironmentAccessGroupCreateRequestBody contains the data for an access group create request.
|
||||
type VirtualEnvironmentAccessGroupCreateRequestBody struct {
|
||||
Comment string `json:"comment" url:"comment"`
|
||||
ID string `json:"groupid" url:"groupid"`
|
||||
}
|
||||
@ -38,20 +38,19 @@ type VirtualEnvironmentAccessGroupListResponseData struct {
|
||||
ID string `json:"groupid"`
|
||||
}
|
||||
|
||||
// VirtualEnvironmentAccessGroupUpdateRequestBody contains the data for an access group update request.
|
||||
type VirtualEnvironmentAccessGroupUpdateRequestBody struct {
|
||||
Comment string `json:"comment" url:"comment"`
|
||||
}
|
||||
|
||||
// CreateAccessGroup creates an access group.
|
||||
func (c *VirtualEnvironmentClient) CreateAccessGroup(id, comment string) error {
|
||||
reqBody := &VirtualEnvironmentAccessGroupCreateRequestData{
|
||||
Comment: comment,
|
||||
ID: id,
|
||||
}
|
||||
func (c *VirtualEnvironmentClient) CreateAccessGroup(d *VirtualEnvironmentAccessGroupCreateRequestBody) error {
|
||||
return c.DoRequest(hmPOST, "access/groups", d, nil)
|
||||
}
|
||||
|
||||
err := c.DoRequest(hmPOST, "access/groups", reqBody, nil)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
// DeleteAccessGroup deletes an access group.
|
||||
func (c *VirtualEnvironmentClient) DeleteAccessGroup(id string) error {
|
||||
return c.DoRequest(hmDELETE, fmt.Sprintf("access/groups/%s", id), nil, nil)
|
||||
}
|
||||
|
||||
// GetAccessGroup retrieves an access group.
|
||||
@ -85,3 +84,8 @@ func (c *VirtualEnvironmentClient) ListAccessGroups() ([]*VirtualEnvironmentAcce
|
||||
|
||||
return resBody.Data, nil
|
||||
}
|
||||
|
||||
// UpdateAccessGroup updates an access group.
|
||||
func (c *VirtualEnvironmentClient) UpdateAccessGroup(id string, d *VirtualEnvironmentAccessGroupUpdateRequestBody) error {
|
||||
return c.DoRequest(hmPUT, fmt.Sprintf("access/groups/%s", id), d, nil)
|
||||
}
|
||||
|
145
resource_virtual_environment_access_group.go
Normal file
145
resource_virtual_environment_access_group.go
Normal file
@ -0,0 +1,145 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/danitso/terraform-provider-proxmox/proxmox"
|
||||
"github.com/hashicorp/terraform/helper/schema"
|
||||
)
|
||||
|
||||
const (
|
||||
mkResourceVirtualEnvironmentAccessGroupComment = "comment"
|
||||
mkResourceVirtualEnvironmentAccessGroupID = "group_id"
|
||||
mkResourceVirtualEnvironmentAccessGroupMembers = "members"
|
||||
)
|
||||
|
||||
func resourceVirtualEnvironmentAccessGroup() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Schema: map[string]*schema.Schema{
|
||||
mkResourceVirtualEnvironmentAccessGroupComment: &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Description: "The group comment",
|
||||
Optional: true,
|
||||
Default: "",
|
||||
},
|
||||
mkResourceVirtualEnvironmentAccessGroupID: &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Description: "The group id",
|
||||
Required: true,
|
||||
},
|
||||
mkResourceVirtualEnvironmentAccessGroupMembers: &schema.Schema{
|
||||
Type: schema.TypeList,
|
||||
Description: "The group members",
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{Type: schema.TypeString},
|
||||
},
|
||||
},
|
||||
Create: resourceVirtualEnvironmentAccessGroupCreate,
|
||||
Read: resourceVirtualEnvironmentAccessGroupRead,
|
||||
Update: resourceVirtualEnvironmentAccessGroupUpdate,
|
||||
Delete: resourceVirtualEnvironmentAccessGroupDelete,
|
||||
}
|
||||
}
|
||||
|
||||
func resourceVirtualEnvironmentAccessGroupCreate(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
if config.veClient == nil {
|
||||
return errors.New("You must specify the virtual environment details in the provider configuration to use this data source")
|
||||
}
|
||||
|
||||
groupID := d.Get(mkResourceVirtualEnvironmentAccessGroupID).(string)
|
||||
body := &proxmox.VirtualEnvironmentAccessGroupCreateRequestBody{
|
||||
Comment: d.Get(mkResourceVirtualEnvironmentAccessGroupComment).(string),
|
||||
ID: groupID,
|
||||
}
|
||||
|
||||
err := config.veClient.CreateAccessGroup(body)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
d.SetId(groupID)
|
||||
|
||||
return resourceVirtualEnvironmentAccessGroupRead(d, m)
|
||||
}
|
||||
|
||||
func resourceVirtualEnvironmentAccessGroupRead(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
if config.veClient == nil {
|
||||
return errors.New("You must specify the virtual environment details in the provider configuration to use this data source")
|
||||
}
|
||||
|
||||
groupID := d.Get(mkResourceVirtualEnvironmentAccessGroupID).(string)
|
||||
accessGroup, err := config.veClient.GetAccessGroup(groupID)
|
||||
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "HTTP 404") {
|
||||
d.SetId("")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
d.SetId(groupID)
|
||||
|
||||
d.Set(mkResourceVirtualEnvironmentAccessGroupComment, accessGroup.Comment)
|
||||
d.Set(mkResourceVirtualEnvironmentAccessGroupMembers, accessGroup.Members)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourceVirtualEnvironmentAccessGroupUpdate(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
if config.veClient == nil {
|
||||
return errors.New("You must specify the virtual environment details in the provider configuration to use this data source")
|
||||
}
|
||||
|
||||
body := &proxmox.VirtualEnvironmentAccessGroupUpdateRequestBody{
|
||||
Comment: d.Get(mkResourceVirtualEnvironmentAccessGroupComment).(string),
|
||||
}
|
||||
|
||||
groupID := d.Get(mkResourceVirtualEnvironmentAccessGroupID).(string)
|
||||
err := config.veClient.UpdateAccessGroup(groupID, body)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return resourceVirtualEnvironmentAccessGroupRead(d, m)
|
||||
}
|
||||
|
||||
func resourceVirtualEnvironmentAccessGroupDelete(d *schema.ResourceData, m interface{}) error {
|
||||
config := m.(providerConfiguration)
|
||||
|
||||
if config.veClient == nil {
|
||||
return errors.New("You must specify the virtual environment details in the provider configuration to use this data source")
|
||||
}
|
||||
|
||||
groupID := d.Get(mkResourceVirtualEnvironmentAccessGroupID).(string)
|
||||
err := config.veClient.DeleteAccessGroup(groupID)
|
||||
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "HTTP 404") {
|
||||
d.SetId("")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
d.SetId("")
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user