使用 Terraform 和 Ansible 相结合来构建 IBM Cloud 虚拟服务器的步骤
我在电脑上创建了一个能够使用Terraform、Ansible和IBM Cloud CLI的虚拟服务器,并尝试了使用Terraform构建IBM Cloud虚拟服务器的步骤和工具,以下是我留下的备忘录。
启动用于Terraform的工作站。
我在GitHub的https://github.com/takara9/vagrant-terraform创建了一个Vagrantfile和Ansible playbook,用于构建用于在Terraform中操作的工作站。通过使用这个工具,可以启动Ubuntu虚拟服务器。
imac:work3 maho$ git clone https://github.com/takara9/vagrant-terraform
imac:work3 maho$ cd vagrant-terraform/
imac:vagrant-terraform maho$ vagrant up
imac:vagrant-terraform maho$ vagrant ssh
创建一个名为secret.tfvars的Terraform变量文件,其中包含以下内容。sl_username是IBM Cloud经典基础设施的用户ID,sl_api_key是相同经典基础设施的API密钥,ic_api_key是为了授予terraform执行权限而生成的。可以从IBM Cloud控制台页面的顶部选择”管理”->”访问(IAM)”->”API密钥”来获取或生成这些值。
vagrant@workstation:~$ vi secret.tfvars
vagrant@workstation:~$ cat secret.tfvars
sl_username = "IBM999999"
sl_api_key = "1234567890123456789012345678901234567890123456789012345678901234"
ic_api_key = "abcdefghijklmnopqrstuvwxyz1234567890"
将模板克隆到一个供应单元
我已经将用于与Ansible集成来构建虚拟服务器的模板放在GitHub上的 https://github.com/takara9/terraform-ibmcloud-vsi。在之前提到的vagrant up命令中,已经克隆到/home/vagrant/vsi目录下。
虚拟服务器建设执行步骤
克隆的目录中包含以下文件。
vagrant@workstation:~/vsi$ tree
.
├── ansible.cfg Ansible 設定ファイル
├── install.yml TFプロビジョニング時にインストールするパッケージ
├── main.tf TF仮想サーバーのプロビジョニング設定ファイル
├── playbooks Ansible プレイブック
│ ├── hosts hostsファイル
│ ├── setup.yml プレイブック本体
│ └── versions.yml 変数ファイル
├── terraform.tfvars TF変数ファイル
└── tfstate2hosts.py TFの terraform.tfstate から Ansible の hosts を生成するプログラム
从这里开始,按照以下步骤构建成为Docker主机的虚拟服务器。
-
- Terraform の main.tf, install.yml, terraform.tfvars を編集
-
- Ansible の プレイブックを置き換え、または、編集
-
- Terraform のプラグインを取得
-
- terraformコマンドで仮想サーバーをプロビジョニング
-
- プロビジョニング後に、Terraform で仮想サーバーをプロビジョニングした後に生成される terraform.tfstate から Ansible の hostsファイルを生成します。
ansible -m ping -i playbooks/hosts nodes で疎通確認
ansible-playbook -i playbooks/hosts playbooks/setup.yml で自動設定
使用 Terraform 进行项目初始化
使用此命令完成与IBM Cloud插件的配对。
vagrant@workstation:~$ cd vsi
vagrant@workstation:~/vsi$ terraform init
使用 Terraform 进行云资源的自动化部署。
使用以下命令,在指定APIKEY变量文件的情况下构建虚拟服务器。
$ terraform plan -var-file=/vagrant/secret.tfvars -var-file=terraform.tfvars
<中略>
$ terraform apply -var-file=/vagrant/secret.tfvars -var-file=terraform.tfvars
<中略>
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
base_name = node
hostname = [
node-0
]
public_ip = [
165.***.**.*
]
生成Ansible hosts文件
使用 terraform.tfstate 生成 Ansible 的 hosts 文件,以便可以执行 Ansible。
$ python tfstate2hosts.py
用下列Ansible命令,执行虚拟服务器的连通性检查。
$ ansible -m ping -i playbooks/hosts nodes
node-0 | SUCCESS => {
"changed": false,
"ping": "pong"
}
使用Ansible进行自动配置执行
我們將在配置好的虛擬伺服器上進行必要的設置。這裡我們將安裝 Docker CE。
$ ansible-playbook -i playbooks/hosts playbooks/setup.yml
登录服务器并进行操作确认。
检查Ansible自动配置的结果。
$ ssh -i ~/keys/key root@***.***.**.*
# docker system info
我将尝试启动Rancher。
# docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee50590f1e47 rancher/rancher "entrypoint.sh" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp vibrant_bell
请参考这些资料。
-
- Terraform + Cloud-init + Ansible で IBM Cloud VSIプロビジョニング自動化 https://qiita.com/MahoTakara/items/0b23d9bca3edcfe0081c
- *
上述内容