github.com/armen/terraform@v0.5.2-0.20150529052519-caa8117a08f1/builtin/providers/openstack/provider.go (about)

     1  package openstack
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/hashicorp/terraform/helper/schema"
     7  	"github.com/hashicorp/terraform/terraform"
     8  )
     9  
    10  // Provider returns a schema.Provider for OpenStack.
    11  func Provider() terraform.ResourceProvider {
    12  	return &schema.Provider{
    13  		Schema: map[string]*schema.Schema{
    14  			"auth_url": &schema.Schema{
    15  				Type:        schema.TypeString,
    16  				Required:    true,
    17  				DefaultFunc: envDefaultFunc("OS_AUTH_URL"),
    18  			},
    19  			"user_name": &schema.Schema{
    20  				Type:        schema.TypeString,
    21  				Optional:    true,
    22  				DefaultFunc: envDefaultFunc("OS_USERNAME"),
    23  			},
    24  			"user_id": &schema.Schema{
    25  				Type:     schema.TypeString,
    26  				Optional: true,
    27  				Default:  "",
    28  			},
    29  			"tenant_id": &schema.Schema{
    30  				Type:     schema.TypeString,
    31  				Optional: true,
    32  				Default:  "",
    33  			},
    34  			"tenant_name": &schema.Schema{
    35  				Type:        schema.TypeString,
    36  				Optional:    true,
    37  				DefaultFunc: envDefaultFunc("OS_TENANT_NAME"),
    38  			},
    39  			"password": &schema.Schema{
    40  				Type:        schema.TypeString,
    41  				Optional:    true,
    42  				DefaultFunc: envDefaultFunc("OS_PASSWORD"),
    43  			},
    44  			"api_key": &schema.Schema{
    45  				Type:     schema.TypeString,
    46  				Optional: true,
    47  				Default:  "",
    48  			},
    49  			"domain_id": &schema.Schema{
    50  				Type:     schema.TypeString,
    51  				Optional: true,
    52  				Default:  "",
    53  			},
    54  			"domain_name": &schema.Schema{
    55  				Type:     schema.TypeString,
    56  				Optional: true,
    57  				Default:  "",
    58  			},
    59  			"insecure": &schema.Schema{
    60  				Type:     schema.TypeBool,
    61  				Optional: true,
    62  				Default:  false,
    63  			},
    64  		},
    65  
    66  		ResourcesMap: map[string]*schema.Resource{
    67  			"openstack_blockstorage_volume_v1":         resourceBlockStorageVolumeV1(),
    68  			"openstack_compute_instance_v2":            resourceComputeInstanceV2(),
    69  			"openstack_compute_keypair_v2":             resourceComputeKeypairV2(),
    70  			"openstack_compute_secgroup_v2":            resourceComputeSecGroupV2(),
    71  			"openstack_compute_floatingip_v2":          resourceComputeFloatingIPV2(),
    72  			"openstack_fw_firewall_v1":                 resourceFWFirewallV1(),
    73  			"openstack_fw_policy_v1":                   resourceFWPolicyV1(),
    74  			"openstack_fw_rule_v1":                     resourceFWRuleV1(),
    75  			"openstack_lb_monitor_v1":                  resourceLBMonitorV1(),
    76  			"openstack_lb_pool_v1":                     resourceLBPoolV1(),
    77  			"openstack_lb_vip_v1":                      resourceLBVipV1(),
    78  			"openstack_networking_network_v2":          resourceNetworkingNetworkV2(),
    79  			"openstack_networking_subnet_v2":           resourceNetworkingSubnetV2(),
    80  			"openstack_networking_floatingip_v2":       resourceNetworkingFloatingIPV2(),
    81  			"openstack_networking_router_v2":           resourceNetworkingRouterV2(),
    82  			"openstack_networking_router_interface_v2": resourceNetworkingRouterInterfaceV2(),
    83  			"openstack_objectstorage_container_v1":     resourceObjectStorageContainerV1(),
    84  		},
    85  
    86  		ConfigureFunc: configureProvider,
    87  	}
    88  }
    89  
    90  func configureProvider(d *schema.ResourceData) (interface{}, error) {
    91  	config := Config{
    92  		IdentityEndpoint: d.Get("auth_url").(string),
    93  		Username:         d.Get("user_name").(string),
    94  		UserID:           d.Get("user_id").(string),
    95  		Password:         d.Get("password").(string),
    96  		APIKey:           d.Get("api_key").(string),
    97  		TenantID:         d.Get("tenant_id").(string),
    98  		TenantName:       d.Get("tenant_name").(string),
    99  		DomainID:         d.Get("domain_id").(string),
   100  		DomainName:       d.Get("domain_name").(string),
   101  		Insecure:         d.Get("insecure").(bool),
   102  	}
   103  
   104  	if err := config.loadAndValidate(); err != nil {
   105  		return nil, err
   106  	}
   107  
   108  	return &config, nil
   109  }
   110  
   111  func envDefaultFunc(k string) schema.SchemaDefaultFunc {
   112  	return func() (interface{}, error) {
   113  		if v := os.Getenv(k); v != "" {
   114  			return v, nil
   115  		}
   116  
   117  		return nil, nil
   118  	}
   119  }
   120  
   121  func envDefaultFuncAllowMissing(k string) schema.SchemaDefaultFunc {
   122  	return func() (interface{}, error) {
   123  		v := os.Getenv(k)
   124  		return v, nil
   125  	}
   126  }