---
title: PCF OpsManagerでVM Typeを変更する
tags: ["AWS", "Cloud Foundry", "Pivotal Cloud Foundry", "Ops Manager"]
categories: ["Dev", "PaaS", "CloudFoundry", "PCF"]
date: 2018-07-02T07:59:02Z
updated: 2018-07-02T12:08:42Z
---

Pivotal Cloud FoundryのOps Managerで指定可能なVM Typeはインストール時にいくつかプリセットされていますが、[Ops Manager API](https://docs.pivotal.io/pivotalcf/2-1/opsman-api/#core-concepts)を使って変更、追加、削除できます。

変更するためのスクリプトを貼っておきます。

`update-vm-types.sh`

```bash
#!/bin/bash

set -eu

om --target https://$OPSMAN_DOMAIN_OR_IP_ADDRESS \
   --skip-ssl-validation \
   --username "$OPS_MGR_USR" \
   --password "$OPS_MGR_PWD" \
   curl \
   --silent \
   --path /api/v0/vm_types > vm_types.json

cat <<EOF > ops.yml
- type: replace
  path: /vm_types/name=t2.nano?
  value: 
    cpu: 1
    ephemeral_disk: 8192
    name: t2.nano
    ram: 512
- type: replace
  path: /vm_types/name=t2.medium?
  value: 
    cpu: 2
    ephemeral_disk: 32768
    name: t2.medium
    ram: 4096
- type: replace
  path: /vm_types/name=m4.large?
  value: 
    cpu: 2
    ephemeral_disk: 32768
    name: m4.large
    ram: 8192
- type: remove
  path: /vm_types/name=c4.large?
EOF

bosh int vm_types.json | yq r - -j | python -m json.tool > vm_types_old.json
bosh int vm_types.json -o ops.yml | yq r - -j | python -m json.tool > vm_types_new.json
diff vm_types_old.json vm_types_new.json | cat

om --target https://$OPSMAN_DOMAIN_OR_IP_ADDRESS \
   --skip-ssl-validation \
   --username "$OPS_MGR_USR" \
   --password "$OPS_MGR_PWD" \
   curl \
   --silent \
   --request PUT \
   --path /api/v0/vm_types \
   --data "$(cat vm_types_new.json)"

rm -f ops.yml vm_types*.json
```

`ops.yml`を作成している箇所を環境と好みに応じて変更してください。

上記の例はAWSの場合で、

* `t2.nano`を追加
* プリセットされている`t2.medium`のCPU数/メモリがなぜか1/3.75GBなのを2/4GBに変更
* プリセットされている`m4.large`のメモリがなぜか7.5GBなのを8GBに変更
* プリセットされている`c4.large`を削除

を適用しています。

> 元々は`m5.large`を追加したかったのですが、BOSH AWS CPIで`m5.large`が使えるようになるのは[`v71`](https://github.com/cloudfoundry-incubator/bosh-aws-cpi-release/releases/tag/v71)以降のようです([参考コミット](https://github.com/cloudfoundry-incubator/bosh-aws-cpi-release/commit/63fa59120a6e83ad9b9c519d7b9f98fab5c48156))。PCF 2.1では`v69`が使われています。

使い方は

```
chmod +x update-vm-types.sh

export OPSMAN_DOMAIN_OR_IP_ADDRESS=aaa.bbb.ccc.ddd
export OPS_MGR_USR=admin
export OPS_MGR_PWD=password

./update-vm-types.sh
```

です。

次のコマンドをインストールしておく必要があります。

* [`om`](https://github.com/pivotal-cf/om/releases)
* [`bosh`](https://bosh.io/docs/cli-v2/#install)
* [`yq`](https://github.com/mikefarah/yq/releases)


Ops ManagerはこのVM Typeで設定されているCPU数、メモリサイズを見てインストール対象のソフトウェアが最低限のサイズを満たしているかチェックします。
ここの閾値が4GBだったり8GBだったりするので、3.75GB -> 4GB、7.5GB -> 8GBに変更するのは最小のVM Typeを使用するには実は重要だったりします...
VM TypeをAutomaticにしている場合は、推奨のVM Typeが自動で選択されるので、AWSにPCFをインストールしている場合で上記を設定を行えばいくつかのVMがより小さいVM Typeになる場合があります。
規模次第では嬉しい人がいれば困る人もいるので気をつけてください。
