使用 Terraform 和 Ansible 相结合来构建 IBM Cloud 虚拟服务器的步骤

我在电脑上创建了一个能够使用Terraform、Ansible和IBM Cloud CLI的虚拟服务器,并尝试了使用Terraform构建IBM Cloud虚拟服务器的步骤和工具,以下是我留下的备忘录。

スクリーンショット 2019-03-21 20.13.15.png

启动用于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

 

    *

上述内容

广告
将在 10 秒后关闭
bannerAds