github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/test/resource.go (about) 1 package test 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/terraform/helper/schema" 7 ) 8 9 func testResource() *schema.Resource { 10 return &schema.Resource{ 11 Create: testResourceCreate, 12 Read: testResourceRead, 13 Update: testResourceUpdate, 14 Delete: testResourceDelete, 15 Schema: map[string]*schema.Schema{ 16 "required": { 17 Type: schema.TypeString, 18 Required: true, 19 }, 20 "optional": { 21 Type: schema.TypeString, 22 Optional: true, 23 }, 24 "optional_bool": { 25 Type: schema.TypeBool, 26 Optional: true, 27 }, 28 "optional_force_new": { 29 Type: schema.TypeString, 30 Optional: true, 31 ForceNew: true, 32 }, 33 "optional_computed_map": { 34 Type: schema.TypeMap, 35 Optional: true, 36 Computed: true, 37 }, 38 "optional_computed_force_new": { 39 Type: schema.TypeString, 40 Optional: true, 41 Computed: true, 42 ForceNew: true, 43 }, 44 "computed_read_only": { 45 Type: schema.TypeString, 46 Computed: true, 47 ForceNew: true, 48 }, 49 "computed_from_required": { 50 Type: schema.TypeString, 51 Computed: true, 52 ForceNew: true, 53 }, 54 "computed_read_only_force_new": { 55 Type: schema.TypeString, 56 Computed: true, 57 ForceNew: true, 58 }, 59 "computed_list": { 60 Type: schema.TypeList, 61 Computed: true, 62 Elem: &schema.Schema{ 63 Type: schema.TypeString, 64 }, 65 }, 66 "set": { 67 Type: schema.TypeSet, 68 Optional: true, 69 Elem: &schema.Schema{ 70 Type: schema.TypeString, 71 }, 72 Set: schema.HashString, 73 }, 74 "computed_set": { 75 Type: schema.TypeSet, 76 Computed: true, 77 Elem: &schema.Schema{ 78 Type: schema.TypeString, 79 }, 80 Set: schema.HashString, 81 }, 82 "map": { 83 Type: schema.TypeMap, 84 Optional: true, 85 }, 86 "optional_map": { 87 Type: schema.TypeMap, 88 Optional: true, 89 }, 90 "required_map": { 91 Type: schema.TypeMap, 92 Required: true, 93 }, 94 "map_that_look_like_set": { 95 Type: schema.TypeMap, 96 Optional: true, 97 Elem: &schema.Schema{ 98 Type: schema.TypeString, 99 }, 100 }, 101 "computed_map": { 102 Type: schema.TypeMap, 103 Computed: true, 104 }, 105 "list": { 106 Type: schema.TypeList, 107 Optional: true, 108 Elem: &schema.Schema{ 109 Type: schema.TypeString, 110 }, 111 }, 112 "list_of_map": { 113 Type: schema.TypeList, 114 Optional: true, 115 Elem: &schema.Schema{ 116 Type: schema.TypeMap, 117 Elem: &schema.Schema{ 118 Type: schema.TypeString, 119 }, 120 }, 121 }, 122 }, 123 } 124 } 125 126 func testResourceCreate(d *schema.ResourceData, meta interface{}) error { 127 d.SetId("testId") 128 129 // Required must make it through to Create 130 if _, ok := d.GetOk("required"); !ok { 131 return fmt.Errorf("Missing attribute 'required', but it's required!") 132 } 133 if _, ok := d.GetOk("required_map"); !ok { 134 return fmt.Errorf("Missing attribute 'required_map', but it's required!") 135 } 136 137 d.Set("computed_from_required", d.Get("required")) 138 139 return testResourceRead(d, meta) 140 } 141 142 func testResourceRead(d *schema.ResourceData, meta interface{}) error { 143 d.Set("computed_read_only", "value_from_api") 144 d.Set("computed_read_only_force_new", "value_from_api") 145 if _, ok := d.GetOk("optional_computed_map"); !ok { 146 d.Set("optional_computed_map", map[string]string{}) 147 } 148 d.Set("computed_map", map[string]string{"key1": "value1"}) 149 d.Set("computed_list", []string{"listval1", "listval2"}) 150 d.Set("computed_set", []string{"setval1", "setval2"}) 151 return nil 152 } 153 154 func testResourceUpdate(d *schema.ResourceData, meta interface{}) error { 155 return nil 156 } 157 158 func testResourceDelete(d *schema.ResourceData, meta interface{}) error { 159 d.SetId("") 160 return nil 161 }