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