mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-04 12:32:59 +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:
|
FEATURES:
|
||||||
|
|
||||||
* **New Data Source:** `proxmox_virtual_environment_access_group`
|
* **New Data Source:** `proxmox_virtual_environment_access_group`
|
||||||
* **New Data Source:** `proxmox_virtual_environment_access_groups`
|
* **New Data Source:** `proxmox_virtual_environment_access_groups`
|
||||||
* **New Data Source:** `proxmox_virtual_environment_version`
|
* **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.
|
* `repository_id` - The repository id.
|
||||||
* `version` - The version string.
|
* `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
|
## 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`.
|
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"
|
mkDataSourceVirtualEnvironmentAccessGroupMembers = "members"
|
||||||
)
|
)
|
||||||
|
|
||||||
// dataSourceVirtualEnvironmentAccessGroup retrieves a list of access groups.
|
|
||||||
func dataSourceVirtualEnvironmentAccessGroup() *schema.Resource {
|
func dataSourceVirtualEnvironmentAccessGroup() *schema.Resource {
|
||||||
return &schema.Resource{
|
return &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
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 {
|
func dataSourceVirtualEnvironmentAccessGroupRead(d *schema.ResourceData, m interface{}) error {
|
||||||
config := m.(providerConfiguration)
|
config := m.(providerConfiguration)
|
||||||
|
|
||||||
@ -50,7 +48,6 @@ func dataSourceVirtualEnvironmentAccessGroupRead(d *schema.ResourceData, m inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
groupID := d.Get(mkDataSourceVirtualEnvironmentAccessGroupID).(string)
|
groupID := d.Get(mkDataSourceVirtualEnvironmentAccessGroupID).(string)
|
||||||
|
|
||||||
accessGroup, err := config.veClient.GetAccessGroup(groupID)
|
accessGroup, err := config.veClient.GetAccessGroup(groupID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -15,7 +15,6 @@ const (
|
|||||||
mkDataSourceVirtualEnvironmentAccessGroupsIDs = "ids"
|
mkDataSourceVirtualEnvironmentAccessGroupsIDs = "ids"
|
||||||
)
|
)
|
||||||
|
|
||||||
// dataSourceVirtualEnvironmentAccessGroups retrieves a list of access groups.
|
|
||||||
func dataSourceVirtualEnvironmentAccessGroups() *schema.Resource {
|
func dataSourceVirtualEnvironmentAccessGroups() *schema.Resource {
|
||||||
return &schema.Resource{
|
return &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
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 {
|
func dataSourceVirtualEnvironmentAccessGroupsRead(d *schema.ResourceData, m interface{}) error {
|
||||||
config := m.(providerConfiguration)
|
config := m.(providerConfiguration)
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ const (
|
|||||||
mkDataSourceVirtualEnvironmentVersionVersion = "version"
|
mkDataSourceVirtualEnvironmentVersionVersion = "version"
|
||||||
)
|
)
|
||||||
|
|
||||||
// dataSourceVirtualEnvironmentVersion retrieves version information for a Proxmox installation.
|
|
||||||
func dataSourceVirtualEnvironmentVersion() *schema.Resource {
|
func dataSourceVirtualEnvironmentVersion() *schema.Resource {
|
||||||
return &schema.Resource{
|
return &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
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 {
|
func dataSourceVirtualEnvironmentVersionRead(d *schema.ResourceData, m interface{}) error {
|
||||||
config := m.(providerConfiguration)
|
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_access_groups": dataSourceVirtualEnvironmentAccessGroups(),
|
||||||
"proxmox_virtual_environment_version": dataSourceVirtualEnvironmentVersion(),
|
"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{
|
Schema: map[string]*schema.Schema{
|
||||||
mkProviderVirtualEnvironment: &schema.Schema{
|
mkProviderVirtualEnvironment: &schema.Schema{
|
||||||
Type: schema.TypeList,
|
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) {
|
func providerConfigure(d *schema.ResourceData) (interface{}, error) {
|
||||||
var err error
|
var err error
|
||||||
var veClient *proxmox.VirtualEnvironmentClient
|
var veClient *proxmox.VirtualEnvironmentClient
|
||||||
|
@ -10,8 +10,8 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
// VirtualEnvironmentAccessGroupCreateRequestData contains the data for an access group create request.
|
// VirtualEnvironmentAccessGroupCreateRequestBody contains the data for an access group create request.
|
||||||
type VirtualEnvironmentAccessGroupCreateRequestData struct {
|
type VirtualEnvironmentAccessGroupCreateRequestBody struct {
|
||||||
Comment string `json:"comment" url:"comment"`
|
Comment string `json:"comment" url:"comment"`
|
||||||
ID string `json:"groupid" url:"groupid"`
|
ID string `json:"groupid" url:"groupid"`
|
||||||
}
|
}
|
||||||
@ -38,20 +38,19 @@ type VirtualEnvironmentAccessGroupListResponseData struct {
|
|||||||
ID string `json:"groupid"`
|
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.
|
// CreateAccessGroup creates an access group.
|
||||||
func (c *VirtualEnvironmentClient) CreateAccessGroup(id, comment string) error {
|
func (c *VirtualEnvironmentClient) CreateAccessGroup(d *VirtualEnvironmentAccessGroupCreateRequestBody) error {
|
||||||
reqBody := &VirtualEnvironmentAccessGroupCreateRequestData{
|
return c.DoRequest(hmPOST, "access/groups", d, nil)
|
||||||
Comment: comment,
|
}
|
||||||
ID: id,
|
|
||||||
}
|
|
||||||
|
|
||||||
err := c.DoRequest(hmPOST, "access/groups", reqBody, nil)
|
// DeleteAccessGroup deletes an access group.
|
||||||
|
func (c *VirtualEnvironmentClient) DeleteAccessGroup(id string) error {
|
||||||
if err != nil {
|
return c.DoRequest(hmDELETE, fmt.Sprintf("access/groups/%s", id), nil, nil)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAccessGroup retrieves an access group.
|
// GetAccessGroup retrieves an access group.
|
||||||
@ -85,3 +84,8 @@ func (c *VirtualEnvironmentClient) ListAccessGroups() ([]*VirtualEnvironmentAcce
|
|||||||
|
|
||||||
return resBody.Data, nil
|
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