alicloud/data_source_alicloud_file_crc64_checksum.go (41 lines of code) (raw):
package alicloud
import (
"fmt"
"hash/crc64"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func dataSourceAlicloudFileCRC64Checksum() *schema.Resource {
return &schema.Resource{
Read: dataSourceAlicloudFileCRC64ChecksumRead,
Schema: map[string]*schema.Schema{
"filename": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"checksum": {
Type: schema.TypeString,
Computed: true,
},
"output_file": {
Type: schema.TypeString,
Optional: true,
},
},
}
}
func dataSourceAlicloudFileCRC64ChecksumRead(d *schema.ResourceData, meta interface{}) error {
filename := d.Get("filename")
file, err := loadFileContent(filename.(string))
if err != nil {
return WrapError(err)
}
table := crc64.MakeTable(crc64.ECMA)
checkSum := fmt.Sprintf("%d", crc64.Checksum(file, table))
d.Set("checksum", checkSum)
d.SetId(checkSum)
// create a json file in current directory and write data source to it.
if output, ok := d.GetOk("output_file"); ok && output.(string) != "" {
writeToFile(output.(string), map[string]string{"checksum": checkSum})
}
return nil
}