github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/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 DefaultFunc: envDefaultFunc("OS_AUTH_TOKEN"), 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 "endpoint_type": &schema.Schema{ 65 Type: schema.TypeString, 66 Optional: true, 67 DefaultFunc: envDefaultFunc("OS_ENDPOINT_TYPE"), 68 }, 69 }, 70 71 ResourcesMap: map[string]*schema.Resource{ 72 "openstack_blockstorage_volume_v1": resourceBlockStorageVolumeV1(), 73 "openstack_compute_instance_v2": resourceComputeInstanceV2(), 74 "openstack_compute_keypair_v2": resourceComputeKeypairV2(), 75 "openstack_compute_secgroup_v2": resourceComputeSecGroupV2(), 76 "openstack_compute_floatingip_v2": resourceComputeFloatingIPV2(), 77 "openstack_fw_firewall_v1": resourceFWFirewallV1(), 78 "openstack_fw_policy_v1": resourceFWPolicyV1(), 79 "openstack_fw_rule_v1": resourceFWRuleV1(), 80 "openstack_lb_monitor_v1": resourceLBMonitorV1(), 81 "openstack_lb_pool_v1": resourceLBPoolV1(), 82 "openstack_lb_vip_v1": resourceLBVipV1(), 83 "openstack_networking_network_v2": resourceNetworkingNetworkV2(), 84 "openstack_networking_subnet_v2": resourceNetworkingSubnetV2(), 85 "openstack_networking_floatingip_v2": resourceNetworkingFloatingIPV2(), 86 "openstack_networking_router_v2": resourceNetworkingRouterV2(), 87 "openstack_networking_router_interface_v2": resourceNetworkingRouterInterfaceV2(), 88 "openstack_objectstorage_container_v1": resourceObjectStorageContainerV1(), 89 }, 90 91 ConfigureFunc: configureProvider, 92 } 93 } 94 95 func configureProvider(d *schema.ResourceData) (interface{}, error) { 96 config := Config{ 97 IdentityEndpoint: d.Get("auth_url").(string), 98 Username: d.Get("user_name").(string), 99 UserID: d.Get("user_id").(string), 100 Password: d.Get("password").(string), 101 APIKey: d.Get("api_key").(string), 102 TenantID: d.Get("tenant_id").(string), 103 TenantName: d.Get("tenant_name").(string), 104 DomainID: d.Get("domain_id").(string), 105 DomainName: d.Get("domain_name").(string), 106 Insecure: d.Get("insecure").(bool), 107 EndpointType: d.Get("endpoint_type").(string), 108 } 109 110 if err := config.loadAndValidate(); err != nil { 111 return nil, err 112 } 113 114 return &config, nil 115 } 116 117 func envDefaultFunc(k string) schema.SchemaDefaultFunc { 118 return func() (interface{}, error) { 119 if v := os.Getenv(k); v != "" { 120 return v, nil 121 } 122 123 return nil, nil 124 } 125 } 126 127 func envDefaultFuncAllowMissing(k string) schema.SchemaDefaultFunc { 128 return func() (interface{}, error) { 129 v := os.Getenv(k) 130 return v, nil 131 } 132 }