20241027

Terraform incompatible provider version

 Example use case with template:

│ Error: Incompatible provider version
│ 
│ Provider registry.terraform.io/hashicorp/template v2.2.0 does not have a package available for your current platform, darwin_arm64.
│ 
│ Provider releases are separate from Terraform CLI releases, so not all providers are available for all platforms. Other versions of this provider
│ may have different platforms supported.


Solution

For this use case, download the source code https://github.com/hashicorp/terraform-provider-template/releases/tag/v2.2.0 and build it.


% make
==> Checking that code complies with gofmt requirements...
go install
go: downloading github.com/hashicorp/terraform v0.12.0-alpha4.0.20190424121927-9327eedb0417
go: downloading github.com/hashicorp/hcl2 v0.0.0-20190416162332-2c5a4b7d729a
go: downloading github.com/zclconf/go-cty v0.0.0-20190320224746-fd76348b9329
go: downloading github.com/agext/levenshtein v1.2.2
go: downloading github.com/apparentlymart/go-textseg v1.0.0
go: downloading github.com/mitchellh/go-wordwrap v1.0.0
go: downloading golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2
go: downloading github.com/hashicorp/go-hclog v0.0.0-20181001195459-61d530d6c27f
go: downloading github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856
go: downloading google.golang.org/grpc v1.18.0
go: downloading github.com/mitchellh/go-homedir v1.0.0
go: downloading github.com/hashicorp/go-multierror v1.0.0
go: downloading github.com/mitchellh/copystructure v1.0.0
go: downloading github.com/mitchellh/mapstructure v1.1.2
go: downloading github.com/apparentlymart/go-cidr v1.0.0
go: downloading github.com/hashicorp/go-uuid v1.0.1
go: downloading golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
go: downloading golang.org/x/net v0.0.0-20190311183353-d8887717615a
go: downloading github.com/golang/protobuf v1.3.0
go: downloading github.com/hashicorp/errwrap v1.0.0
go: downloading github.com/hashicorp/go-getter v1.1.0
go: downloading github.com/hashicorp/go-version v1.1.0
go: downloading github.com/mitchellh/cli v1.0.0
go: downloading github.com/vmihailenco/msgpack v4.0.1+incompatible
go: downloading github.com/hashicorp/hcl v1.0.0
go: downloading github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590
go: downloading github.com/mitchellh/reflectwalk v1.0.0
go: downloading github.com/blang/semver v3.5.1+incompatible
go: downloading github.com/mitchellh/hashstructure v1.0.0
go: downloading github.com/hashicorp/go-cleanhttp v0.5.0
go: downloading github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb
go: downloading github.com/mitchellh/go-testing-interface v1.0.0
go: downloading github.com/oklog/run v1.0.0
go: downloading github.com/aws/aws-sdk-go v1.16.36
go: downloading github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d
go: downloading github.com/hashicorp/go-safetemp v1.0.0
go: downloading github.com/ulikunitz/xz v0.5.5
go: downloading github.com/armon/go-radix v1.0.0
go: downloading github.com/bgentry/speakeasy v0.1.0
go: downloading github.com/fatih/color v1.7.0
go: downloading github.com/mattn/go-isatty v0.0.5
go: downloading github.com/posener/complete v1.2.1
go: downloading github.com/spf13/afero v1.2.1
go: downloading github.com/mattn/go-colorable v0.1.1
go: downloading github.com/google/go-cmp v0.2.0
go: downloading google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922
go: downloading github.com/jmespath/go-jmespath v0.0.0-2018
% go build -o terraform-provider-template
% mkdir -p ~/.terraform.d/plugins/hashicorp.com/template/2.2.0/darwin_amd64
% mv terraform-provider-template ~/.terraform.d/plugins/hashicorp.com/template/2.2.0/darwin_arm64

20200223

The upload size in bytes # - 512 bytes for the VHD footer (# in this case) must be a multiple of MiB.

$ wc -c os_disk.vhdx
5272240128 os_disk.vhdx

The vhd file size needs to be a number divisible by 1024.

5272240128 / 1025 / 1024 / 1024 = 4.91015625

4.91015625 is not divisible by 1024. We are going to round the number to 5.

5 * 1024 * 1024 * 1024 = 5368709120

And add 512 bytes for the VHD footer.

5368709120 + 512 = 5368709632

Reference: Reddit

20191221

Azure Terraform Role Definition

For security purpose, we tend to create service principal that can performs Terraform operations only within a specific resource group without able modify resource outside the resource group within the same subscription.

Reality is we still need to allow the service principal to run few actions within the scope of the subscription.

Therefore here is the role definition with actions required that Terraform operations need to execute successfully.

{
    "Name": "Terraform",
    "Description": "Role definition has actions required that Terraform operations need",
    "Actions": [
        "*/read",
        "Microsoft.Sql/register/action",
        "Microsoft.CognitiveServices/register/action",
        "microsoft.insights/register/action"
    ],
    "AssignableScopes": ["/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]
}

With this as json content, we may run the following command to create the role and assign it to the subscription.

az role definition create --role-definition terraform-role-definition.json


Reference

Schedule Dark Mode













To schedule dark mode at 7 PM:

schtasks /CREATE /SC DAILY /TN "Enable Dark Mode" /TR "C:\Windows\System32\reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f" /ST 19:00

To schedule light mode at 7 AM:

schtasks /CREATE /SC DAILY /TN "Disable Dark Mode" /TR "C:\Windows\System32\reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 1 /f" /ST 7:00

Execute these commands in Command Prompt or PowerShell. There are additional steps you need to do to ensure it is enabled even if you turn on your laptop after the scheduled time.

  1. Launch Task Scheduler.
  2. Open the Properties dialog of the tasks we created.
  3. Go to Settings and check the box "Run task as soon as possible after a scheduled start is missed."


Reference

  1. How to Auto-Toggle Windows 10 Dark Mode at Night
  2. Schtasks.exe /Create

20191213

Generate self-signed certificate

openssl genrsa -out www.example.com.key 2048
openssl req -new -x509 -key www.example.com.key -out www.example.com.cert -days 3650 -subj /CN=www.example.com

20170627

apt-add-repository: invalid HTTP proxy, unsupported URI

Had this error on a Ubuntu which runs behind a proxy. Your $http_proxy environment variable must contain "http://"

root@ubuntu:~# echo $http_proxy
http://proxy.company.net:8080

20141220

handy script to quickly backup a file

#!/bin/bash
# backup a file (somefile to somefile.yyyy-mm-dd.tar.gz)

FILE="$@"

#debug
echo $FILE

if [ -f $(which tar) ]
then
        tar zcPf "${FILE}".$(date +%s).tar.gz "${FILE}"
else
        echo "sorry, do you have 'tar' installed?"
fi

20141020

find files that contain string

# grep -Hirn "mystring" /path/to/dir
find . -print0 | xargs -0 -n1 -P8 grep -Hirn 

thanks to sifu enshu