在WSL2上安装使用Ansible的STNS-Client的方法
由于在某项业务中有了接触的机会,特此发布。下面将说明如何使用Asinble安装STNS-Client。
首先,Ansible是什么?
总结起来就是一个”基础设施建设自动化工具”。近年来,随着构建和运维系统的规模不断增大,我们可以减少人为操作的错误和工作量。另外,由于具备冪等性,可以确保在所有管理对象上获得相同的结果。
虽然还有其他配置管理工具如 Puppet 和 Chef,但 Ansible 更受欢迎的原因是可以使用 YAML 进行编写,学习成本较低。
运行环境
安装程序的主机
-
- WSL (Ubuntu 20.04.5 LTS)
-
- asinble 6.4.0 (2022/10/11 現在)
- asinble-core 2.13.4 (2022/10/11 現在)
适用对象
- Ubuntu 20.04 の VM7台
1. 安装Asinble
1-1. 安装软件包
使用pip通过Asinble进行安装。
$ pip install --user ansible
如果希望在Python环境中安装特定版本,您可以通过明确指定版本来实现,如下例所示。请随时从ansible-build-data-Github上确认版本信息。
$ pip install --user ansible==6.4.0
1-2. 打通路径
如果安装后运行ansible –version时显示命令“ansible”未找到,但可以通过sudo apt install ansible等方式安装时,需要设置环境变量。
打开~/.bashrc文件,然后按照下面的方式添加内容。
export PATH="~/.local/bin:$PATH"
然后,我们要确认版本显示是否正常。
$ ansible --version
ansible [core 2.13.4]
config file = None
configured module search path = ['/home/<User>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/<User>/.local/lib/python3.8/site-packages/ansible
ansible collection location = /home/<User>/.ansible/collections:/usr/share/ansible/collections
executable location = /home/<User>/.local/bin/ansible
python version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]
jinja version = 3.1.2
libyaml = True
2. Ansible的设置
为了在pip版本上进行安装,需要生成以下命令的ansible.cfg文件。
通过添加–disabled选项可以生成被注释掉的配置文件。
$ ansible-config init --disabled > ansible.cfg
通过运行ansible-config,将设置配置文件的路径。这次我们将使用默认设置,没有特别的配置。
$ ansible --version
ansible [core 2.13.4]
config file = /home/<User>/ansible.cfg
︙
3. 制作playbook
我們將描述要自動化的操作。這次的STNS伺服器設定已經完成,預先準備好STNS客戶端的設定文件。此外,還有各種文件備份和服務重新啟動的描述。
- hosts: all
tasks:
- name: Get installer
ansible.builtin.uri:
url: https://repo.stns.jp/scripts/apt-repo.sh
return_content: true
register: stns_installer
- name: Run installer
become: true
ansible.builtin.shell:
cmd: "{{ stns_installer.content }}"
when: not ansible_check_mode
- name: Apt install
become: true
ansible.builtin.apt:
pkg:
- stns-v2
- libnss-stns-v2
- cache-stnsd
ignore_errors: "{{ ansible_check_mode }}"
- name: Backup /etc/stns/client/stns.conf
become: true
ansible.builtin.copy:
src: /etc/stns/client/stns.conf
dest: /etc/stns/client/stns.conf.bak
owner: root
group: root
mode: 0644
remote_src: true
- name: Copy stns.conf
become: true
ansible.builtin.copy:
src: config/stns.conf
dest: /etc/stns/client/stns.conf
owner: root
group: root
mode: 0644
- name: "Restart & Enabled service cache-stnsd"
become: true
ansible.builtin.service:
name: cache-stnsd
state: restarted
enabled: true
- name: Backup /etc/nsswitch.conf
become: true
ansible.builtin.copy:
src: /etc/nsswitch.conf
dest: /etc/nsswitch.conf.bak
owner: root
group: root
mode: 0644
remote_src: true
- name: Copy nsswitch.conf
become: true
ansible.builtin.copy:
src: config/nsswitch.conf
dest: /etc/nsswitch.conf
owner: root
group: root
mode: 0644
- name: Backup /etc/ssh/sshd_config
become: true
ansible.builtin.copy:
src: /etc/ssh/sshd_config
dest: /etc/ssh/sshd_config.bak
owner: root
group: root
mode: 0644
remote_src: true
- name: Copy sshd_config
become: true
ansible.builtin.copy:
src: config/sshd_config
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: 0644
- name: Restart service sshd
become: true
ansible.builtin.service:
name: sshd
state: restarted
4. 创建一个包含管理目标主机的清单文件。
创建一个文件,其中包含您想要操作的机器的主机名或 IP 地址。
[stns]
<実行するサーバのホスト名またはIP>
执行游戏策略。
终于要开始执行了。
进行语法检查
$ ansible-playbook -i hosts ./stns-install.yaml --syntax-check
【提示】如果您希望以密码认证而不是SSH密钥认证方式运行,请添加以下选项进行执行。
$ ansible-playbook --ask-pass -K -i hosts ./stns-install.yaml --syntax-check
进行干跑测试。
$ ansible-playbook -i hosts ./stns-install.yaml --check
5-3. 实际执行
$ ansible-playbook -i hosts ./stns-install.yaml
6. 检查冪等性
因为已经执行过playbook,所以确认不会执行任何操作。
$ ansible-playbook -i hosts ./stns-install.yaml
使用Ansible-Lint来提高playbook的质量。
由于不同人有不同的写作方式,playbook 可能会难以阅读和理解。
ansible-lint 是一种工具,旨在提高 playbook 的质量。
如果 playbook 的写作方式不符合一定的规则,ansible-lint 将会指出,建议按照指示进行修正。
$ ansible-lint stns-install.yaml
参考网站或文章 huò
借用这个场合,我想表达我的感激之情。