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 }