github.com/richardbowden/terraform@v0.6.12-0.20160901200758-30ea22c25211/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_read_only_force_new": { 50 Type: schema.TypeString, 51 Computed: true, 52 ForceNew: true, 53 }, 54 "computed_list": { 55 Type: schema.TypeList, 56 Computed: true, 57 Elem: &schema.Schema{ 58 Type: schema.TypeString, 59 }, 60 }, 61 "set": { 62 Type: schema.TypeSet, 63 Optional: true, 64 Elem: &schema.Schema{ 65 Type: schema.TypeString, 66 }, 67 Set: schema.HashString, 68 }, 69 "computed_set": { 70 Type: schema.TypeSet, 71 Computed: true, 72 Elem: &schema.Schema{ 73 Type: schema.TypeString, 74 }, 75 Set: schema.HashString, 76 }, 77 "map": { 78 Type: schema.TypeMap, 79 Optional: true, 80 }, 81 "optional_map": { 82 Type: schema.TypeMap, 83 Optional: true, 84 }, 85 "required_map": { 86 Type: schema.TypeMap, 87 Required: true, 88 }, 89 "map_that_look_like_set": { 90 Type: schema.TypeMap, 91 Optional: true, 92 Elem: &schema.Schema{ 93 Type: schema.TypeString, 94 }, 95 }, 96 "computed_map": { 97 Type: schema.TypeMap, 98 Computed: true, 99 }, 100 "list_of_map": { 101 Type: schema.TypeList, 102 Optional: true, 103 Elem: &schema.Schema{ 104 Type: schema.TypeMap, 105 Elem: &schema.Schema{ 106 Type: schema.TypeString, 107 }, 108 }, 109 }, 110 }, 111 } 112 } 113 114 func testResourceCreate(d *schema.ResourceData, meta interface{}) error { 115 d.SetId("testId") 116 117 // Required must make it through to Create 118 if _, ok := d.GetOk("required"); !ok { 119 return fmt.Errorf("Missing attribute 'required', but it's required!") 120 } 121 if _, ok := d.GetOk("required_map"); !ok { 122 return fmt.Errorf("Missing attribute 'required_map', but it's required!") 123 } 124 125 return testResourceRead(d, meta) 126 } 127 128 func testResourceRead(d *schema.ResourceData, meta interface{}) error { 129 d.Set("computed_read_only", "value_from_api") 130 d.Set("computed_read_only_force_new", "value_from_api") 131 if _, ok := d.GetOk("optional_computed_map"); !ok { 132 d.Set("optional_computed_map", map[string]string{}) 133 } 134 d.Set("computed_map", map[string]string{"key1": "value1"}) 135 d.Set("computed_list", []string{"listval1", "listval2"}) 136 d.Set("computed_set", []string{"setval1", "setval2"}) 137 return nil 138 } 139 140 func testResourceUpdate(d *schema.ResourceData, meta interface{}) error { 141 return nil 142 } 143 144 func testResourceDelete(d *schema.ResourceData, meta interface{}) error { 145 d.SetId("") 146 return nil 147 }