github.com/tarrant/terraform@v0.3.8-0.20150402012457-f68c9eee638e/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 }, 60 61 ResourcesMap: map[string]*schema.Resource{ 62 "openstack_blockstorage_volume_v1": resourceBlockStorageVolumeV1(), 63 "openstack_compute_instance_v2": resourceComputeInstanceV2(), 64 "openstack_compute_keypair_v2": resourceComputeKeypairV2(), 65 "openstack_compute_secgroup_v2": resourceComputeSecGroupV2(), 66 "openstack_compute_floatingip_v2": resourceComputeFloatingIPV2(), 67 "openstack_fw_firewall_v1": resourceFWFirewallV1(), 68 "openstack_fw_policy_v1": resourceFWPolicyV1(), 69 "openstack_fw_rule_v1": resourceFWRuleV1(), 70 "openstack_lb_monitor_v1": resourceLBMonitorV1(), 71 "openstack_lb_pool_v1": resourceLBPoolV1(), 72 "openstack_lb_vip_v1": resourceLBVipV1(), 73 "openstack_networking_network_v2": resourceNetworkingNetworkV2(), 74 "openstack_networking_subnet_v2": resourceNetworkingSubnetV2(), 75 "openstack_networking_floatingip_v2": resourceNetworkingFloatingIPV2(), 76 "openstack_networking_router_v2": resourceNetworkingRouterV2(), 77 "openstack_networking_router_interface_v2": resourceNetworkingRouterInterfaceV2(), 78 "openstack_objectstorage_container_v1": resourceObjectStorageContainerV1(), 79 }, 80 81 ConfigureFunc: configureProvider, 82 } 83 } 84 85 func configureProvider(d *schema.ResourceData) (interface{}, error) { 86 config := Config{ 87 IdentityEndpoint: d.Get("auth_url").(string), 88 Username: d.Get("user_name").(string), 89 UserID: d.Get("user_id").(string), 90 Password: d.Get("password").(string), 91 APIKey: d.Get("api_key").(string), 92 TenantID: d.Get("tenant_id").(string), 93 TenantName: d.Get("tenant_name").(string), 94 DomainID: d.Get("domain_id").(string), 95 DomainName: d.Get("domain_name").(string), 96 } 97 98 if err := config.loadAndValidate(); err != nil { 99 return nil, err 100 } 101 102 return &config, nil 103 } 104 105 func envDefaultFunc(k string) schema.SchemaDefaultFunc { 106 return func() (interface{}, error) { 107 if v := os.Getenv(k); v != "" { 108 return v, nil 109 } 110 111 return nil, nil 112 } 113 }