apiの動作検証

TerraformでConoHaのインスタンスを立ててみる - Qiita

作業前

CONOHA_USERNAME=gncxxx
CONOHA_PASSWORD=xxxx
CONOHA_TENANT_ID=xxxx

token取得

$ CONOHA_TOKEN=`curl -X POST \
-H "Accept: application/json" \
-d "{\"auth\":{\"passwordCredentials\":{\"username\":\"$CONOHA_USERNAME\",\"password\":\"$CONOHA_PASSWORD\"},\"tenantId\":\"$CONOHA_TENANT_ID\"}}" \
https://identity.tyo1.conoha.io/v2.0/tokens \
| jq ".access.token.id" | sed "s/\"//g"`
{"unauthorized":{"message":"Invalid user: gncu96693838","code":401}} のようにレスポンスが返却される。コンソールのエンドポイントを確認すると、 `tyo1` でした。

image一覧

$ curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: $CONOHA_TOKEN" \
https://compute.tyo1.conoha.io/v2/$CONOHA_TENANT_ID/images \
| jq ".images | sort_by(.name) | map(.name)"

vmi-centos-7.7-amd64 にする

VPSのプラン一覧

$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Accept: application/json" \
-H "X-Auth-Token: $CONOHA_TOKEN" \
https://compute.tyo1.conoha.io/v2/$CONOHA_TENANT_ID/flavors \
| jq ".flavors | sort_by(.name) | map(.name)"

g-4gb にする

IP取得前

COMPUTE_ID にterraform実行して取得したIDを設定する

TerraformでConoHaのインスタンスを立ててみる - Qiita インスタンスを立てる最低限の構成

サーバIP取得

$ curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: $CONOHA_TOKEN" \
https://compute.tyo1.conoha.io/v2/7cf6cd6aed604d90a290608b89169504/servers/$COMPUTE_ID \
| jq -r ".server.addresses[][] | select(.version == 4) | .addr"

tips

TerraformでConoHaのインスタンスを立ててみる - Qiita で、 public_key には何を設定すればよいのかと思ったが ssh-rsa... で始まる値を設定する。 (画面上から作成した際に取得した)pemから求めるには下記を実行

$ cat ~/.ssh/vps-ansible.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwqefppGbqYPNKj/vLbO4BN1WjNPSkWRf7nBVtJ4qR1aTHGdB
.
.
.
-----END RSA PRIVATE KEY-----
$ ssh-keygen -y -f ~/.ssh/vps.pem
ssh-rsa AAAAB3NzaC... # <= コレ

OpenStack: openstack_compute_keypair_v2 - Terraform by HashiCorp

conoha用にterraformファイル作成 - Qiita の通りにセキュリティを設定してもよいが、アウトバウンドに関して記載がないので、内部から外部に通信を行う(yumなど)でエラーが発生する。下記を追加

resource "openstack_networking_secgroup_rule_v2" "egress_instances" {
  direction         = "egress"
  ethertype         = "IPv4"
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = "${openstack_networking_secgroup_v2.sg.id}"
}

ansible実行

firewalld - Manage arbitrary ports/services with firewalld — Ansible Documentation にてfirewalldの設定で問題がある。

FAILED! => {"changed": false, "msg": "ERROR: Exception caught: org.fedoraproject.FirewallD1.Exception: INVALID_SERVICE: ssh-private Permanent and Non-Permanent(immediate) operation, Services are defined by port/tcp relationship and named as they are in /etc/services (on most systems)"}

のエラーが発生する。

# - name: start new ssh
#   # エラーにより起動せず
#   # fatal: [163.44.168.113]: FAILED! => {"changed": false, "msg": "ERROR: Exception caught: org.fedoraproject.FirewallD1.Exception: INVALID_SERVICE: 'ssh-private' not among existing services Permanent and Non-Permanent(immediate) operation, Services are defined by port/tcp relationship and named as they are in /etc/services (on most systems)"}
```yaml:main.yml
   firewalld:
     service: ssh-private
     state: enabled
     permanent: true
     immediate: true

これの場合は、ポート解放を指定する。サービス指定でできなさそう。

- name: open new ssh port
  firewalld:
    port: "/tcp"
    state: enabled
    permanent: true # permanentを付けない:一時的に適用。reloadすると適用から外れる。permanentを付ける:継続的に適用。reloadすると適用される。
    immediate: true