1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

windows(wsl)、virtualBoxでAnsibleの開発環境を作る

Last updated at Posted at 2024-03-09

次回からのサーバ接続memo

  • virtualboxで仮想マシンの電源ON
  • vscodeでリモート接続

再起動するとIP変わるかも→変わらなかった

# wsl
ssh 192.168.40.246 # control-node
ssh 192.168.40.96 # managed-node01
ssh 192.168.40.83 # managed-node02

方針

control_nodeを1台セットアップしてから、クローンしてmanaged_nodeを作成し、ホスト名変えることにする。
そうすることでセットアップの手間が省ける

wsl2のセットアップ

すでにセットアップしてたので今回は省略する。

資料(これでセットアップはしていない)
https://tech-lab.sios.jp/archives/21023#i-2

wsl2にAnsibleのセットアップ

すでにセットアップしてたので今回は省略する。ControlNodeにする。仮想マシンでもControlNodeは作る

資料(これでセットアップはしていない)
https://tech-lab.sios.jp/archives/21023

isoファイルダウンロード

仮想マシンを作るにはisoファイルなるものが必要。

仮想マシン作成手順(ControlNode)

  • ControlNode1台つくる。後でクローンする。
  • 以下の手順通り行う必要がある

  • ファイル→環境設定→入力→仮想マシン→ホストキーの組み合わせ→ctrlに変えた
  • 自動インストールをスキップのチェックを外しておく。チェックがあると作成になぜか失敗する
  • Installation Sourceは触ってはいけない。戻ることができない
  • ホスト名にアンダーバー使えない
  • rootのパスワードはroot
  • アカウントはユーザアカウントはtsuyoshi
  • ユーザパスワードはrootにしておこう
  • ネットワーク、タイムゾーンがよく忘れる
  • 再起動ボタンがあるので、押すとログインが可能になる。

コンソールログイン

tsuyoshi/rootでログインする

ip確認(ControlNode)(コンソール接続)

[tsuyoshi@rocky01 ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:cf:ec:bd brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.7/24 brd 192.168.40.255 scope global dynamic noprefixroute enp0s3 # ここ!
       valid_lft 35940sec preferred_lft 35940sec
...
[tsuyoshi@rocky01 ~]$

wslからパスワード認証でssh接続する

コンソール接続ではコピペができないので使いずらい。

ssh ip_address

パスワードroot
wslのユーザもtsuyohiなので省略。省略しない場合はssh tsuyoshi@ip_address

ssh鍵作成する(ControlNode)

cd ~/
ssh-keygen -t ed25519 -C "your_email@example.com"
chmod 600 .ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub > .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

cat ~/.ssh/id_ed25519 # wslにもっていく
  • パスフレーズはなしでOK
  • id_ed25519はwslにも作成する

パスワード認証をやめる(ControlNode)

sudo vi /etc/ssh/sshd_config
PasswordAuthentication no # 行は存在する.70行目ぐらい

sudo systemctl restart sshd

sudoパスワード無効化(ControlNode)

面倒なので無効にする

sudo visudo

1番下に追加

tsuyoshi ALL=NOPASSWD: ALL

yum update(ControlNode)

sudo yum update -y;sudo yum install vim git -y;sudo dnf install tree -y

python3.11導入(ControlNode)

sudo dnf install python3.11 -y

which python3

python3 --version

# python関連ファイルを検索(見るだけかな)
whereis python

# シンボリックリンクを作成
sudo ln -s /usr/bin/python3.11 /usr/bin/python

# pythonのバージョンを表示
python -V
Python 3.11.5

pipインストール(ControlNode)

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py # sudoですべきかも
pip list
実行例
[tsuyoshi@rocky01 ~]$ pip list
Package    Version
---------- -------
pip        24.0
setuptools 69.1.1
wheel      0.42.0

ansibleインストール(ControlNode)

yumではansibleの最新版がインストールできなかった。リポジトリにおそらくない。

pip install ansible ansible-lint # sudoをつけたいがつけるとpipがないと言われる。マニュアルにはグローバルにインストールするにはsudoをつけて--userなしでインストールと書いてあった
pip list
ansible-community --version
実行例
[tsuyoshi@rocky01 ~]$ pip list
Package      Version
------------ -------
ansible      9.3.0 # 最新が入った
ansible-core 2.16.4

[tsuyoshi@rocky01 ~]$ ansible-community --version
Ansible community version 9.3.0
...

ipv6無効

sudo vim /etc/default/grub

# 以下の行を最後に追加します。
GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX ipv6.disable=1"

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grub2-mkconfig -o /boot/efi/EFI/rocky/grub2.cfg
sudo reboot

ip addr

仮想マシーンの複製

control_nodeをクローンして、managed_nodeを2台作る

  • 電源OFF
  • クローン
  • 名前変更
  • ip addrでip確認してwslでssh接続

ホスト名変更

# sudo hostnamectl set-hostname control-node
sudo hostnamectl set-hostname managed-node01
sudo hostnamectl set-hostname managed-node02

uname -n
  • ssh入りなおすだけでいい?
  • このあと電源OFFー>ON
  • 全台リブートしないと、DNSが反映されてない気がする
  • control-nodeからpingしてみる。名前解決ができることを確認する。もしかすると時間がかかる
ping managed-node01
ping managed-node02

ssh managed-node01
ssh managed-node02

ansibleのコードのひな型作成(ControlNode)

mkdir -p ~/ansible_test/roles

cd ~/ansible_test/roles
ansible-galaxy init test_role
実行例
[tsuyoshi@rocky01 ansible_test]$ tree test_role/
test_role/
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

テスト用playbook作成(ControlNode)

vi ~/ansible_test/playbook.yml
~/ansible_test/playbook.yml
---
- name: deploy test
  remote_user: tsuyoshi
  hosts: all
  # hosts: localhost
  gather_facts: no
  become: true
  tasks:
    - name: Perform ping
      ansible.builtin.ping:
      
    - name: exec test_role
      ansible.builtin.include_role:
        name: test_role
  # roles:
    # - role: test_role
    #   tags: common
    # - role: mattermost
    #   tags: mattermost

テスト用role作成(ControlNode)

main.yml作成

vi ~/ansible_test/roles/test_role/tasks/main.yml
~/ansible_test/roles/test_role/tasks/tasks/main.yml
---
- name: Copy file from local to remote
  ansible.builtin.copy:
    src: files/hello.txt
    dest: /tmp/hello.txt
    owner: root
    group: root
    mode: "0644"

hello.txt作成

vi ~/ansible_test/roles/test_role/files/hello.txt
~/ansible_test/roles/test_role/files/hello.txt
hello

inventory作成(ControlNode)

mkdir -p ~/ansible_test/inventories
vi ~/ansible_test/inventories/dev
~/ansible_test/inventories/dev
---
all:
 hosts:
   192.168.40.135:
 children:
  web:
   hosts:
    192.168.40.135:
  # db:
   # hosts:
     # 172.17.0.2:
~/ansible_test/inventories/dev
---
all:
  hosts:
    managed-node01:
    managed-node02:
  children:
    web:
      hosts:
        managed-node01:
    db:
      hosts:
        managed-node02:

ansible-lint

# 検出
cd ~/
ansible-lint ~/ansible_test/

# エラーになるので消しておく
rm -v ~/ansible_test/roles/test_role/tests/test.yml
rm -v ~/ansible_test/roles/test_role/meta/main.yml

# 自動修正
ansible-lint ~/ansible_test/ --fix

疎通確認(ControlNode)

cd ~/ansible_test
ansible localhost -m ping
ansible all -i ~/ansible_test/inventories/dev -m ping

playbookを試す(ControlNode)

cd ~/ansible_test
ansible-playbook -i ~/ansible_test/inventories/dev ~/ansible_test/playbook.yml

# sudoパスワードを無効化してないときは--ask-become-passが必要です
# ansible-playbook -i ~/ansible_test/inventories/dev playbook.yml --ask-become-pass
  • Managedに/tmp/hello.txtがあればOK

あとは自由に開発しましょう(ControlNode)

main.ymlにコードを追加すればOK

cd ~/ansible_test
vi ~/ansible_test/roles/test_role/tasks/tasks/main.yml

実行方法は

cd ~/ansible_test
ansible-playbook -i ~/ansible_test/inventories/dev playbook.yml

vscodeを使う(vscodeでControlNodeにアクセス)

タイムゾーン変更(ControlNode/ManagedNode)

初期構築時に設定忘れたら実行する

勝手に電源OFFになる

なんでだろう?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?