ansible loopでindexを取得する。
ansibleで、タスクを配列の要素数だけループさせるときに、
各ループのインデックスを取得する方法の備忘録
インデックスを取得するために、loop_controlのindex_varを使用する。
indexは0から取得できる。
〇indexを取得するサンプルプレイブック
--- - name: Example of getting index with loop in Ansible hosts: localhost vars: items: - name: item1 - name: item2 - name: item3 tasks: - name: Print item with index debug: msg: "Item {{ index }}: {{ item.name }}" loop: "{{ items }}" loop_control: index_var: index
〇実行結果
[root@629bed370fc3 workspace]# ansible-playbook sample.yml [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [Example of getting index with loop in Ansible] ***************************************************************************************************** TASK [Print item with index] ***************************************************************************************************************************** ok: [localhost] => (item={'name': 'item1'}) => { "msg": "Item 0: item1" } ok: [localhost] => (item={'name': 'item2'}) => { "msg": "Item 1: item2" } ok: [localhost] => (item={'name': 'item3'}) => { "msg": "Item 2: item3" } PLAY RECAP *********************************************************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
〇その他
indexに、+1する場合は、{{}}の中に入れる。
- name: Print item with index debug: msg: "Item {{ index + 1 }}: {{ item.name }}" loop: "{{ items }}" loop_control: index_var: index
index > 1のときのみ、処理するようにする。
- name: Print item with index debug: msg: "Item {{ index }}: {{ item.name }}" loop: "{{ items }}" loop_control: index_var: index when: index > 1
loopの際に、pauseを入れる。
- name: debug debug: msg="test" loop: "{{ range(2) | list }}" loop_control: pause: 5
awxのバックアップ/リストア (tower-cli)
検証環境のawxで、awxがバックエンドで使用しているpostgresの調子が悪く、何度もawxが落ちる事象が発生しました(最終的にはawxをアップグレードしたら解消しました)。その際に、awxのバックアップ/リストアを行ったので備忘録として残しておきます。
概要
- tower-cliコマンドの設定のエクスポート、インポートを使ってawxのバックアップ/リストア操作を行えます。
- 完全なリストアではなく設定のインポートのため、バックアップ後に消えたオブジェクトは復元するが、バックアップ後に作成されたオブジェクトは消えない。(消えたデータの復元)
tower-cliとは
- Ansible Tower のコマンドツール
- Tower 内にある大半のオブジェクトを取得、作成、変更、削除することができる
- プレイブック実行の起動 (例: Jenkins、TeamCity、Bamboo など)
- ジョブステータスの確認
- 組織、ユーザー、チームなどのオブジェクトの迅速な作成
- 既に開発は終わり、後続のawxコマンドが出ている※現在はこちらが推奨
ansible公式: tower-cli の概要 — Ansible Tower API Guide v3.1.4
Reference: https://tower-cli.readthedocs.io/en/latest/cli_ref/
手順
tower-cliのセットアップ
-
tower-cliのインストール
コマンド: pip/pip3 install ansible-tower-cli
-
Ansible AWXの情報をconfigに設定する。
-
configの確認
コマンド: tower-cli config
User optionsに設定した情報が表示される
バックアップ
オブジェクトのバックアップ
コマンド: tower-cli receive --all > xxx.json
※オプション(--all)を変えれば一部のオブジェクトだけエクスポートも可能(リファレンス参照)
出力内容の確認
リストア
オブジェクトのリストア(バックアップファイル(.json)のインポート
※どこがリストアされたかは一目瞭然
error: /run/flannel/subnet.env: no such file or directory
エラーの備忘録
概要
kubeadm + CNI: flannelでKubernetesクラスタを作成したところ、
corednsの作成がContainerCreating で固まった
[root@kube01 ~]# k get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcd69978-srgcc 0/1 ContainerCreating 0 114s
coredns-78fcd69978-z2kd4 0/1 ContainerCreating 0 114s
確認内容
kubectl describe でcorednsのpodを確認したところ、以下のログを確認
"/run/flannel/subnet.env: no such file or directory"
[root@kube01 ~]# k describe pod coredns-78fcd69978-srgcc -n kube-system
…
dbox: rpc error: code = Unknown desc = failed to set up sandbox container "74fc30873acfc616154b3457e3e0aa4fd1595b10f826618240ddcdee91a533b0" network for pod "coredns-78fcd69978-srgcc": networkPlugin cni failed to set up pod "coredns-78fcd69978-srgcc_kube-system" network: open /run/flannel/subnet.env: no such file or directory
解決策
flannel用の以下のファイルを作成する。
/run/flannel/subnet.env
ファイルの中身はデフォルトであればこちら。
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
原因は不明ですが、ひとまず動くようになりました。
Rsyslog 監視環境を作ってみました。
環境
管理対象
Rsyslogサーバ(CentOS8)の構築
Rsyslogのインストール
[root@rsyslog ~]# dnf install -y rsyslog
設定ファイルの編集
[root@rsyslog ~]# vi /etc/rsyslog.conf
↓のコメントアウト(#)を外す
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")
[root@rsyslog ~]# cat /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
SysSock.Use="off") # Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
module(load="imjournal" # provides access to the systemd journal
StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark") # provides --MARK-- message capability
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### sample forwarding rule ###
#action(type="omfwd"
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1" # unique name prefix for spool files
#queue.maxdiskspace="1g" # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on" # save messages to disk on shutdown
#queue.type="LinkedList" # run asynchronously
#action.resumeRetryCount="-1" # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")
ファイアウォールの設定
[root@rsyslog ~]# firewall-cmd --add-port=514/tcp --permanent
success
[root@rsyslog ~]# firewall-cmd --reload
success
サービス再起動
[root@rsyslog ~]# systemctl restart rsyslog
[root@rsyslog ~]# systemctl enable rsyslog
管理対象サーバの構築 (CentOS7)
Rsyslogのインストール
[root@rsyslog ~]# dnf install -y rsyslog
設定ファイルの編集
[root@rsyslog ~]# vi /etc/rsyslog.conf
↓を追加
action(type="omfwd" Target="192.168.1.104" Port="514" Protocol="tcp")
サービス再起動
[root@rsyslog ~]# systemctl restart rsyslog
[root@rsyslog ~]# systemctl enable rsyslog
ログ転送テスト
Rsyslogサーバでログを確認する
/var/log/messagesを継続的に確認する
[root@rsyslog ~]# tail -f /var/log/messages
管理対象サーバでログを生成
[root@postgress ~]# logger hogehoge
Rsyslogサーバでログが確認できることを確認
・・・
Apr 25 22:02:52 postgress root: hogehoge
iDRACでのRsyslogテスト
iDRACはRsyslogをUDPで送信するため、Rsyslogサーバの設定を変更する。
設定ファイルの編集
[root@rsyslog ~]# vi /etc/rsyslog.conf
↓のコメントアウト(#)を外す
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
ファイアウォールの設定
[root@rsyslog ~]# firewall-cmd --add-port=514/udp --permanent
success
[root@rsyslog ~]# firewall-cmd --reload
Success
iDRACで送信テスト
iDRAC GUI > Configuration > System Settings > Alert Configuration > Test Event
"MEM0001"
Rsyslogサーバでログが確認できることを確認
[root@rsyslog ~]# tail /var/log/messages
...
Apr 25 22:29:52 idrac-XXXXXX Severity: Critical, Category: System Health, MessageID: MEM0001, Message: Multi-bit memory errors are detected on the memory device at location(s) DIMM1. Immediately replace the DIMM.
Apr 25 22:29:52 idrac-BH6GPS3 Severity: Informational, Category: Audit, MessageID: LOG006, Message: Test event generated for message ID MEM0001.
DvDStylerの使い方 (結婚式の動画は自作で無料でやろう)
先日、私自身の結婚式を行いました。その際に、映像をDVDに焼くのにDVDStylerを使ったのですが、利用方法がとても簡単だったので、今回はDvDStylerの使い方をまとめたいと思います。
インストール手順から、画像付きでわかりやすく解説しますので、順番に実施すれば、DVDへの書き込みは問題なく完了すると思います。もちろん、全部無料ですので安心してください。
準備するもの
- DVDドライブ搭載のPC
- 書き込む用のDVDディスク
※DVDドライブ搭載のPCがない場合は、外付けのDVDドライブを用意します。
※Windows PCでの手順を記載してます。MaCでもDVDStylerの利用手順は変わりません。
ちなみに、私はこのDVD-Rを使用しました。
インストール手順
ダウンロードサイトを開く
以下のダウンロードサイトを開きます。
DVDStyler download latest version
インストーラーをダウンロード
PCの環境に合わせたインストーラーをダウンロードします。
基本的には、Windows 64bitかと思いますが、環境に合わせてインストーラーを選択します。
32bitか64bitかわからない場合は、こちらを参考にしてみてください。Windows 32bit/64bit 確認方法 | すべてのサービス | 広島大学情報メディア教育研究センター
インストール
ダウンロードしたファイルをダブルクリックします。
- DVDStyler-3.2.1-win64.exe
インストールウィンドウが開くので、順番に選択していきます。
(すべてデフォルトで問題ありません。)
「次へ」
「次へ」
「次へ」
「次へ」
「次へ」
「インストール」
「完了」
映像をDVDに書き込む手順
ここからは、映像をDVDに書き込む手順を記載します。
DVD-Rの挿入
PCのDVDドライブにDVDを差し込みます。
※私の場合は、結婚式場よりDVD-Rを指定されました。特に指定がない場合は、DVD-R/DVD-RWどららでも大丈夫です。
DvDStylerの起動
WindowsデスクトップのDVDStylerを選択します。
プロジェクトの作成
映像をDVDに書き込むにあたって、まずは、プロジェクトを作成します。
基本的には、「ディスクラベル」と「映像の各種設定」について設定します。
※映像の各種設定については、結婚式場から指定があると思いますので、それに合わせて設定します。
※私の結婚式の際は、映像形式: NTSC, 縦横比: 16:9の指定でした。(音声形式は特に指定がなかったので、デフォルトのAC3のままにしました。)
テンプレートの指定
次にテンプレートを指定します。DVDを再生したときにトップにくるメニュー画面(映像選択画面)になります。私は結婚式を選択しました。テンプレートを選択したら、「OK」を選択します。
※「テンプレートを使わない」がありますが、その場合、別の設定をいじる必要が出てくるので、特に要件がない場合は、テンプレートを選択した方が良いと思います。
メニューの文字化け解消
デフォルトだと、メニュー画面の日本語が文字化けしています。
文字化けしている部分をダブルクリップします。
プロパティウィンドウが開くので、「フォント設定」を選択し、日本語フォントを選択します。私は、「メイリオ」を選択しました。
また、一番上の□部分は、タイトルになるので映像にあわせて修正します。
上記の作業を繰り返し実施し、すべての文字化けが解消されました。
動画のアップロード
アップロードする映像を下の部分にドラッグする、もしくは、ファイルの選択から動画を選択します。
アップロードが完了すると、ドラッグスペースになっていた部分に動画が追加されます。
DVDへの書き込み
「DVD書き込み...」を選択します。
書き込みウィンドウが開くので、「DVDに書き込み」を選択し、デバイスでDVDディスクを選択したうえで、「開始」を選択します。
これで、DVDへの書き込みは完了となります。
EtherChannelの設定
今度、MLAGを設定する必要があり、そもそもLAG設定を忘れていたので、復習として、Cisco Packet TracerでEtherChannelの設定をしてみました。設定手順をメモとして残したいと思います。
構成
コマンド
■Switch8
Switch>en
Switch#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)#hostname SW08
SW08(config)#int range fa0/1-2
SW08(config-if-range)#switchport mode access
SW08(config-if-range)#exit
SW08(config)#vlan 2
SW08(config-vlan)#exit
SW08(config-if)#int fa0/2
SW08(config-if)#switchport access vlan 2
SW08(config-if)#exit
SW08(config)#int range fa0/23-24
SW08(config-if-range)#switchport mode trunk
SW08(config-if-range)#channel-group 1 mode on
SW08(config-if-range)#
SW08(config-if-range)#do show etherchannel summary
Flags: D - down P - in port-channel
I - stand-alone s - suspended
H - Hot-standby (LACP only)
R - Layer3 S - Layer2
U - in use f - failed to allocate aggregator
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
Number of channel-groups in use: 1
Number of aggregators: 1
Group Port-channel Protocol Ports
------+-------------+-----------+----------------------------------------------
1 Po1(SU) - Fa0/23(P) Fa0/24(P)
■Switch9
Switch>en
Switch#conf t
Switch(config)#hostname SW09
SW09(config)#vlan 2
SW09(config-vlan)#exit
SW09(config)#int range fa0/1-2
SW09(config-if-range)#switchport mode access
SW09(config-if)#int fa0/2
SW09(config-if)#switchport access vlan 2
SW09(config-if)#exit
SW09(config)#int range fa0/23-24
SW09(config-if-range)#switchport mode trunk
SW09(config-if-range)#channel-group 1 mode on
protocol on Interface FastEthernet0/24, changed state to up
SW09(config-if-range)#
SW09#show etherchannel summary
Flags: D - down P - in port-channel
I - stand-alone s - suspended
H - Hot-standby (LACP only)
R - Layer3 S - Layer2
U - in use f - failed to allocate aggregator
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
Number of channel-groups in use: 1
Number of aggregators: 1
Group Port-channel Protocol Ports
------+-------------+-----------+----------------------------------------------
1 Po1(SU) - Fa0/23(P) Fa0/24(P)
■負荷分散方法の設定と確認
SW08(config)#port-channel load-balance src-mac
SW08(config)#exit
SW08#show etherchannel load-balance
EtherChannel Load-Balancing Operational State (src-mac):
Non-IP: Source MAC address
#負荷分散方法
※ちなみに、EtherChannelを設定しない場合は、以下のようにSTPで片方のポートがブロックされる。
SW09#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0002.1696.3EC7
Cost 19
Port 23(FastEthernet0/23)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 0003.E455.7E17
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Desg FWD 19 128.1 P2p
Fa0/24 Altn BLK 19 128.24 P2p
Fa0/23 Root FWD 19 128.23 P2p
VLAN0002
Spanning tree enabled protocol ieee
Root ID Priority 32770
Address 0002.1696.3EC7
Cost 19
Port 23(FastEthernet0/23)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32770 (priority 32768 sys-id-ext 2)
Address 0003.E455.7E17
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/2 Desg FWD 19 128.2 P2p
Fa0/24 Altn BLK 19 128.24 P2p
Fa0/23 Root FWD 19 128.23 P2p