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

対象の文字列が記載されたファイルを検索

コマンド

以下のコマンドで"カレントディレクトリ配下にあるファイルから対象の文字列が記載されたファイルをを検索できます。

 

$ find ./ -type f -print | xargs grep 'xxxxx'

 

 

テスト

memo04.txt'hoge'を記載したうえで、'hoge'と書かれたファイルを検出する。

 

find ./ -type f -print | xargs grep 'hoge'
> ./subtest/memo04.txt:hoge

 

memo04.txtが検出できました。

 

awxのバックアップ/リストア (tower-cli)

検証環境のawxで、awxがバックエンドで使用しているpostgresの調子が悪く、何度もawxが落ちる事象が発生しました(最終的にはawxをアップグレードしたら解消しました)。その際に、awxのバックアップ/リストアを行ったので備忘録として残しておきます。

 

概要

  • tower-cliコマンドの設定のエクスポート、インポートを使ってawxのバックアップ/リストア操作を行えます。
    • tower-cli receiveコマンドを使ってawxの設定情報をjsonファイルとしてエクスポート
      (tower-cli receive --all > xxx.json)
    • tower-cli sendコマンドでjsonファイルをawxにインポート
      (tower-cli send xxx.json)
  • 完全なリストアではなく設定のインポートのため、バックアップ後に消えたオブジェクトは復元するが、バックアップ後に作成されたオブジェクトは消えない。(消えたデータの復元)
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のセットアップ

  1. tower-cliのインストール

コマンド: pip/pip3 install ansible-tower-cli

自動生成された代替テキスト: 
Croot@sp-centos7-awx01]#pip3installarsible-towe「-cli
Collectingansible-towe「-cli
Downloadingansible-towe「-cliー3.3.9.士a「.z(203kB)
Requirementalreadysatisfied:six>:l.7.2in/us「川ocaし勹ib/python3.6/site-p
ckages(fromansible-towe「-cli)(1.15.の
Requirementalreadysatisfied:Py〉:3.10in/us「川ocaしⅢ団4/py日13.6/sit
e-packages(f「omansible-towe「-cli)(5.3.1)
Collectingclickく7.0
Downloadingclickー6.7ーpy2.py3ー「肥ーany.同引(71kB)

  1. Ansible AWXの情報をconfigに設定する。
    • hostの設定: tower-cli config host <http://" ansible awx IP"/>
    • userの設定: tower-cli config username <admin>
    • passwordの設定: tower-cli config password <password>
    • ssl証明書の無効化: tower-cli config verify_ssl false

自動生成された代替テキスト: 
Croot@sp-centos7-awx01]#t01i肥「一cli
vonfigurationupdatedsuccessfully.
root@sp-centos7-awx01]#t01i肥「一cli
しonfigurationupdatedsuccessfully.
Croot@sp-centos7-awx01]#t01i肥「一cli
oonfigurationupdatedst-にcessfully.
root@sp-centos7-awx01]#t01i肥「一cli
vonfigurationupdatedsuccessfully.
Croot@sp-centos7-awx01]#t01i肥「一cli
config
config
config
config
config
s士http:〃192.168.2.3:31497
usernameadrnin
passwo「dpasswo「d
ve「ify-sslfalse

 

  1. configの確認

コマンド: tower-cli config

User optionsに設定した情報が表示される

自動生成された代替テキスト: 
[root@sp-centos7-awx01]#士肥「一clic紆ig
#し「opti(setwitht(*er-cliconfig;sto「in7.t(»er—cli.cfg).
http:〃192-168-2-3:31497
aånin
.し「Tれ:
passyord:passwrd
.verify—ssl:F引
#Defaults.
Color:
F引
げコ」「e:
・verbose:F引
:(e--t1:F引
.formt:
・杙ificate:
descripti1-01:F引

バックアップ

オブジェクトのバックアップ

コマンド: tower-cli receive --all > xxx.json

※オプション(--all)を変えれば一部のオブジェクトだけエクスポートも可能(リファレンス参照)自動生成された代替テキスト: 
Croot@sp-centos7-awx01]#tot/肥「一cli「eceive--all>aw廴badく叩ー20210124.jsor

出力内容の確認

自動生成された代替テキスト: 
[root@sp-centos7-awx01~]#catawxーback(ー20210124.json
し樰e「
admin"
last—name":
"fi「stゴ肥":
username
asset—type"・
asset—relat1":{
name":"Default"
asset_type:organizati61"
is—superuse「":t代旧
email":"「00t38st"
team":[]
name
roles":[
Admin"

リストア

オブジェクトのリストア(バックアップファイル(.json)のインポート

コマンド: tower-cli send xxx.json

自動生成された代替テキスト: 
[root@sp-centos7-awx01
USER[admin]
ORGANIZATION(Default]
Assetup士0date
]#士肥「-clisendawxーback!一20210124.json
Assetup士0date
All「olesa「eup士0date
CREDENTIAL[匪「「0Credential]
Assetup士0date
All「olesa「eup土0date

 

※どこがリストアされたかは一目瞭然

自動生成された代替テキスト: 
WORKFLOWCset_up_idrac]
Checkingonwo「k日on-nodes
C「eatedwo「k日owse士ュ膾」d「ac
Su「veyup士0date
BuiIdingnewworkflownodes
BuiIdingwo「k日ownode「引a士ions
Alllabelsa「eup土0date
All「olesa「eup土0date
AⅡschedulesa「eup土0date

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を使用しました。

www.amazon.co.jp

インストール手順

ダウンロードサイトを開く

以下のダウンロードサイトを開きます。

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

IPv4: Source MAC address

IPv6: Source MAC address

 

#負荷分散方法

  • src-mac
  • dst-mac
  • src-dst-mac
  • src-ip
  • dst-ip
  • src-dst-ip
  • src-port
  • dst-port
  • src-dst-port

 

※ちなみに、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