2020年2月17日月曜日

redis でリストからインデックスを指定して値を削除する方法

概要

redis ではリストから値を削除するのにインデックスを指定して削除する方法が直接的にはありません
少し工夫することで可能なので紹介します

環境

  • macOS 10.15.2
  • redis 5.0.5

コマンド

  • INDEX=0 && redis-cli lrem hoge 1 "$(redis-cli lindex hoge $INDEX)"

INDEX に削除したいインデックスを指定します
hoge というキーのリストから値を削除します
lindex というインデックスを取得できるコマンドがあるのでそれを使って値を取得することで lrem しています

参考サイト

2020年2月13日木曜日

go-workers のカスタムロギングで標準出力と標準エラーを分けるコツ

概要

過去に go-workers でライブラリ自体のロギングをカスタムする方法を紹介しました
基本的には標準出力に出力されるようで標準エラーにエラーの内容を分けたい場合は少しコツがいるようです

環境

  • macOS 10.15.2
  • golang 1.12.9
  • go-workers dbf81d0b75bbe2fd90ef66a07643dd70cb42a88a

サンプルコード

全体のコードは過去の記事を参考にしてください
ポイントとなる Println の部分だけ紹介します

func (l *MyLogger) Println(kv ...interface{}) {
    msg := ""
    elog := false
    for _, v := range kv {
        switch v.(type) {
        case string:
            msg += v.(string) + " "
        case int:
            msg += strconv.Itoa((v.(int))) + " "
        case error:
            elog = true
            msg += v.(error).Error() + " "
        }
    }
    if elog {
        log.SetOutput(ioutil.Discard)
        log.SetOutput(os.Stderr)
        log.Println(msg)
    } else {
        log.SetOutput(os.Stdout)
        log.Println(msg)
    }
}

どうやら標準エラーのみ出力したいログの場合には直前に log.SetOutput(ioutil.Discard) を実行する必要がありそうです
もじ log.SetOutput(ioutil.Discard) していないと elog に入った場合でも標準出力にログが出力されてしまいます

2020年2月12日水曜日

VMware PowerCLI で nfs のマウント操作をしてみた

概要

VMware.PowerCLI で nfs のデータストアをマウントする操作をしてみました
サンプルのコマンドレットを紹介します

環境

  • CentOS 7.7.1908
  • .NET SDK 3.1
  • PowerShell 6.2.3
  • VMware.PowerCLI 11.5.0.14912921

データストアを追加する (マウント)

  • Connect-VIServer -Server 192.168.100.10 -User administrator@vsphere.local -Password xxxxxxxx
  • $host1 = Get-VMhost -Name 192.168.100.11
  • New-Datastore -Name nfs_test -Nfs -NfsHost 192.168.100.20 -Path /opt/nfs -VMHost $host1

データストアを削除する (アンマウント)

  • Remove-Datastore -Datastore nfs_test -VMHost $host1 -Confirm:$false

データストアの一覧を表示する

  • Get-Datastore

参考サイト

2020年2月11日火曜日

CentOS7 に VMware vCLI をインストールする方法

環境

  • CentOS 7.7.1908
  • VMware vSphere Command Line Interface 6.7

ダウンロード

VMware の公式から gz 形式のファイルをダウンロードしましょう

インストール

  • tar zvxf VMware-vSphere-CLI-6.7.0-8156551.x86_64.tar.gz
  • cd vmware-vsphere-cli-distrib/
  • ./vmware-install.pl

cpan から必要なモジュールのダウンロードとインストールが開始されます
必要なモジュールが揃えば vCLI をインストールするパスを聞いてくるのでパスを指定して完了です

cpan から特定のモジュールがインストールできなかった場合

自分は UUID がインストールできませんでした
以下のようなメッセージが表示されます

CPAN not able to install following Perl modules on the system. These must be
installed manually for use by vSphere CLI:

UUID 0.27 or newer

cpan コマンドで直接インストールしてみると状況がわかると思います

  • cpan install UUID

これで出てきたエラーに対して対処すれば OK です
自分の場合は libuuid-devel がなかったのでインストールしました

  • yum -y install libuuid-devel
  • cpan install UUID

このあとで再度 ./vmware-install.pl を実行すれば OK です

動作確認

  • esxcfg-vswitch --server 192.168.100.10 --list
  • esxcli --version
  • esxcli --thumbprint 45:D3:5E:D1:1A:E7:CB:2C:E5:A5:79:4B:F3:C1:29:DD:C4:39:9C:9E --server
    192.168i.100.10 network vswitch standard list

esxcfg-hoge コマンドは非推奨なので esxcli コマンドを使いましょう
実際に実行すると警告が表示されるのが確認できると思います

2020年2月10日月曜日

VMware PowerCLI でポートグループを操作するサンプル

概要

VMware.PowerCLI でポートグループを操作してみました
サンプルのコマンドレットを紹介します

環境

  • CentOS 7.7.1908
  • .NET SDK 3.1
  • PowerShell 6.2.3
  • VMware.PowerCLI 11.5.0.14912921

指定の vDS 配下にポートグループを作成する

  • New-VDPortgroup -VDSwitch vds -name pg -NumPorts 123 -VlanId 456

ポートグループを削除する

  • Get-VDPortGroup -Name pg | Remove-VDPortGroup

ポートグループのセキュリティポリシーを変更する

  • $pg = New-VDPortgroup -VDSwitch vds -name pg -NumPorts 123 -VlanId 456
  • $pg | Get-VDSecurityPolicy | Set-VDSecurityPolicy -AllowPromiscuous $true -MacChanges $true -ForgedTransmits $true

その他関連操作

  • Set-VDPortgroup
  • Export-VDPortgroup
  • Set-VDSecurityPolicy

参考サイト

2020年2月5日水曜日

Lチカでトランジスタの使い方を学ぼう

概要

トランジスタの使い方を簡単に学ぶために Lチカ回路にトランジスタを組み合わせて動作させてみました
負荷の高い抵抗を使って小さな電流を作りそこからトランジスタを使って電流を増幅し LED を点灯させてみます

環境

  • トランジスタ 2N5088
  • 抵抗 (47, 330, 470, 1k, 330k)
  • 赤色LED

実験で使う回路

電源は単三電池 2 本 (約 1.5v + 1.5v = 3V) を使用します
単純な Lチカの回路になります

電流の計測が必要になるので以下のような感じで LED に流れる電流を測れるようにしておきます
電流計は直列に接続する必要があるのでご注意を

電流を計測する

まずは抵抗の値を変えて LED に流れる電流を計測していきます

47オーム

30mA
やはり抵抗が小さいと流れる電流も大きくなるので LED もだいぶ明るくなります

330オーム

7mA
写真でもわかるくらい明るさがなくなったと思います

470オーム

5mA
330 オームとそこまで変わらない感じでしたが電流は少し少なくなっています

1kオーム

2mA
明るさもだいぶなくなりました

330kオーム

?
自分の電流計だとほとんど針が振れなかったので計測不能でした
写真だと全くわかりませんがすごい小さい明かりが点灯しています

トランジスタあり

今回は 330k オームを使った場合に LED を点灯させようと思います
トランジスタを使うことで電流を増幅させ点灯させる感じです

使用するトランジスタ

手元にあるトランジスタが 2N5088 しかないので今回はこれを使います
そもそもトランジスタを電流増幅部品として使っていますがトランジスタ自体は増幅というよりも電流の値を調整するための部品かなと思います

データシートを見ると増幅率は 300 倍ほどあるようです
頑張れば 900 倍くらいはいけるそうです
今回は電圧も低めなので 300 倍あれば十分です
写真左から「エミッタ」「ベース」「コレクタ」になります

回路作成

トランジスタを使った回路を作成します
2N5088 は NPN トランジスタなのでベースにプラスエミッタ、コミッタにマイナス側の端子を接続します
またベースに 330k オームの抵抗を挟んで先程計測した超微量な電流を流します
そうすることでエミッタとコミッタ間に増幅した電流が流れるようになります

回路図的には以下のような感じです

電流の計測

下の写真のコレクタと LED のカソード部分にある緑の配線部分を電流計に変えて計測しました
結果は「8mA」ほど流れました
だいたい 330 オームを使っている場合と同じくらいの明るさになりました

300 倍の増幅率だとすると 8mA / 300 = 0.027mA がもともとの L チカ回路で流れていた電流かなと予測できます

おまけ: 10kオーム

もう少し小さい抵抗があったのでやってみました
これだと増幅後は 50mA も流れたので明るさもかなり変わったので実験の変化としてはわかりやすかったです
ただ 50mA も LED に流すのはあまり意味がないし壊れる可能性があるので実際の回路では 20mA 程度が流れるようにしましょう

最後に

トランジスタの使い方の基本を学ぶために Lチカ回路でトランジスタを使ってみました
簡単な回路を使って変化を確認することで使い方の理解がより深まると思います

今回は LED で試しましたが少し大きめの電流が必要なアクチュエータなどでよく使われるイメージがあります
なのでトランジスタを使えるようになると大きな電力が必要な部品や回路を動作させることもできるようになるので覚えておいて損はないかなと思います
ただ大きな電流を流せば流すほど電源の電圧降下が早まりバッテリーなどの消耗も早くなるのでそこは電源の容量とも相談しながら回路を作成すると良いかなと思います

2020年2月4日火曜日

VMware.PowerCLI でロールや権限周りの操作をしてみる

環境

  • CentOS 7.7.1908
  • .NET SDK 3.1
  • PowerShell 6.2.3
  • VMware.PowerCLI 11.5.0.14912921

Powershell の起動

以下は Powershell を起動したプロンプト内で実行します

証明書のエラーを抑制する

  • Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore

一度のみ実行すれば OK です

vCenter or ESXi への接続 (basic 認証)

  • Connect-VIServer -Server 192.168.100.10 -User administrator@vsphere.local -Password xxxxxxxxxxx

vCenter or ESXi への接続解除

  • Disconnect-VIServer

ユーザの取得

  • Get-VMHostAccount
  • Get-VMHostAccount -Name hoge

ユーザの追加

  • New-VMHostAccount -Id hoge -Password "fuga12345!" -Description "for test"

ユーザの削除

  • Get-VMHostAccount -Id hoge | Remove-VMHostAccount

ロールの取得

  • Get-VIRole
  • Get-VIRole -Name NewRole_20200204

ロールの追加

  • New-VIRole -Name NewRole_20200204 -Privilege (Get-VIPrivilege -PrivilegeGroup)

ロールの削除

  • Get-VIRole -Name NewRole_20200204 | Remove-VIRole

権限の取得

  • Get-VIPermission
  • Get-VIPermission -Entity (Get-Datacenter) -Principal VSPHERE.LOCAL\vsphere-webclient-0c0e11a5-d914-4030-976c-04e51aa67b00

権限の追加 (ロール or ユーザへの権限割り当て)

  • New-VIPermission -Role NewRole_20200204 -Entity (Get-Datacenter) -Principal VSPHERE.LOCAL\vsphere-webclient-0c0e11a5-d914-4030-976c-04e51aa67
  • New-VIPermission -Entity (Get-VMHost) -Principal hoge -Role Admin -Propagate:$true

権限の削除

  • $permission = Get-VIPermission -Entity (Get-VMHost) -Principal hoge
  • Remove-VIPermission -Permission $permission

Tips

Get-View の使い方

  • $dc = Get-Datacenter | Get-View
  • Write-Host $dc.Name

Get-Datacenter で取得した結果から Datacenter オブジェクトを取得して編集に格納します
オブジェクトにすることでドットつなぎでフィールドなどを参照することができます

Select-Object -ExpandProperty

  • Get-VIPrivilege -Name System | Select-Object -ExpandProperty Id

デフォルトで表示されない Id フィールドを表示することができます
フィールドの一覧は Get-Member あたりで確認できます

  • Get-VIPrivilege | Get-Member

WhatIf (ドライラン)

  • Get-VIRole -Name NewRole_20200204 -WhatIf

どういう挙動になるのか確認することができます

Format-List で短縮形を表示する

  • Get-VIPermission | Format-List

長くて表示されない項目がある場合はフォーマットを指定することで表示できます

各コマンドのヘルプの表示

  • Get-Help Get-VIPermission
  • Get-Help Get-VIPermission -examples
  • Get-Help Get-VIPermission -full

最後に

VMware.PowerCLI でユーザ/ロール/権限周り操作をしてみました
Powershell に用意されているコマンドレットと組み合わせることで更に便利に扱うことができるようになります