自动安装 Ansible 于 Windows
概要 – 简要总结
Ansible 是一款用于自动化在 Linux 服务器上安装各种软件和文件的软件。
然而,没有提供针对 Windows 系统的 Ansible 安装程序。此外,在网络上几乎找不到 Windows 用户尝试使用 Ansible 的方法。
因此,我想要从Windows的重置状态开始,逐步详细介绍安装带有Ansible的虚拟机(VM)到Windows的步骤。请注意,在此过程中有一个下载Vagrant项目的步骤,以便尽可能自动化安装步骤。
当某人学会自动化之后,即使对硬件和网络没有了解的人也能使用虚拟机服务或增加物理服务器,并能够实现分工互助。
目标系统
提前准备的必要事项如下:
- Windows 10 21H1 64bit (多少古いバージョンでもよい)
以下是软件的安装步骤:
所有版本都是此时此刻的最新版。
如果本文过时了,以下介绍的步骤可能会失败,请谅解。
ホストOS(Windows)
Visual Studio Code 1.59.1
VirtualBox 6.1.26
Vagrant 2.2.18(コードで VirtualBox の VM を自動的に作るソフトウェア)
Ansible Local プロビジョナー(Ansible をインストールおよび実行をする Vagrant のプラグイン)
Vagrant や Ansible の設定ファイル
Git 2.33.0.2 (bash および SSH 関連のコマンドを使うため)
コントロール ノード (VirtualBox の VM。名前は control)
CentOS7
Ansible
Ansible の設定ファイル(ホストOSと共有)
マネージド ノード (VirtualBox の VM。名前は node1)
CentOS7
Ansible でインストールするソフトウェアやファイル
在打开Windows上的Visual Studio Code的同时,为了在Linux上运行Ansible,我将主机操作系统和控制节点分开。
然而,并不是说只有这种配置才能使用Ansible。
我认为主机操作系统也可以是mac,但我没有尝试过。
请参考本文章的最后一个参考网站,了解有关在物理服务器上安装的方法。
Ansible 是一种自动化工具。
如果您不太了解Ansible,我将解释一下它是什么。
如果您只是要安装它,也可以跳过这个解释。
Ansible是一款旨在自动化在Linux服务器上安装各种软件和文件的软件。将安装过程写入Ansible的Playbook文件中的任务。Playbook文件采用YAML格式编写,但与其他脚本一样,按照从上到下的顺序执行任务。
任务的执行是在通过 SSH 登录的托管节点中进行的。只要能够通过 SSH 登录,就可以使用 Ansible 执行各种任务。然而,需要单独进行配置以确保能够通过 SSH 登录,这与 Ansible 不同。
在任务中,您可以指定在受管理的节点上执行的相应命令的模块。
提供了非常多的模块,包括安装RPM包的模块和远程复制文件的模块等等。
由于还有直接执行shell命令的模块,所以您可以先使用shell命令创建Playbook,然后在以后有效率地进行开发时将其替换为适当的模块。
跳过与已安装软件相关的任务。
因此,如果从已安装状态重新安装,会出现错误。
即使使用安装程序,Ansible也不会出现错误。
无论是否已安装,执行Ansible后都会在已安装状态下正常完成。
即使前提条件不同,结果也相同,这种特性称为幂等性,
几乎所有可以指定给Ansible任务的模块都具有幂等性。
然而,如果使用直接执行shell命令的模块,则该任务可能没有幂等性。
如果稍后将直接执行命令的模块替换为非直接执行命令的模块或者设置适当的条件,就可以将其变为具有幂等性的Playbook。
Vagrant 是什么意思?
如果您不太熟悉Vagrant,我来解释一下它是什么。
如果您只是想安装它,可以跳过这部分内容。
Vagrant 是一种用于操作虚拟机软件(如VirtualBox或VMWare Player)的自动化软件,可以通过代码创建虚拟机。
当我们能够通过代码进行操作时,虚拟机的配置信息(包括虚拟机数量、内存大小、IP地址等)将嵌入到代码中。
通过复制代码,可以重新利用虚拟机配置的全部或部分,并且可以进行版本管理,例如使用Git。
虚拟机是在物理硬件内创建的虚拟硬件。它用于开发在另一个物理服务器上运行的生产系统。当系统的构成要素包括响应网络请求的服务器时,它就是必需的。
可以将虚拟机(VM)替换为Docker容器进行开发和运维,
但Vagrant仅处理虚拟机(VM)。
如果使用Docker,Vagrant的代码和Ansible的全部或部分代码将被替换为Dockerfile和docker-compose.yml。
Vagrant 中提供了 Ansible Local provisioner 插件。
当编写 Vagrant 的代码以执行 Ansible Playbook 时,
Ansible Local provisioner 会自动在虚拟机中安装 Ansible,
并执行 Playbook。
本书使用的方法是通过运行虚拟的 Playbook 来自动安装 Ansible。
安装步骤
手续虽然繁琐,但并无特定的前提知识或需要考虑的事项,所以可以直接按照原样进行。
如果文字解释难以理解,您也可以参考本书末尾的结构化文档,按照步骤进行操作。
安装 VirtualBox
请在浏览器中打开 https://www.virtualbox.org/,点击下载 VirtualBox 6.1 按钮,然后选择 Windows hosts 下载。下载完毕后,打开下载的文件进行安装。
安装选项可以使用默认设置。
当被问及是否要安装驱动程序时,我会选择安装。
若在后续编写的步骤中出现了虚拟机无法启动的问题,请在网络上搜索以下具体方法。
-
- お使いの PC(ホストOS)の BIOS に仮想化(Virtualization)の機能をオンまたはオフを
-
- 選ぶ項目がある場合、オンに設定する必要があります
- Hyper-V は無効にする必要があります
安装Vagrant
请在浏览器中打开https://www.vagrantup.com/downloads.html,并点击Windows选项卡下的64位版本进行下载。
下载完成后,打开下载的文件并进行安装。
安装选项可以使用默认设置。
完成安装后,将重新启动计算机。
安装Git for Windows。
打开浏览器并访问https://git-scm.com/,点击“Downloads for Windows”按钮即可开始下载。
下载完成后,打开文件并进行安装。
在安装过程中,建议您按9次“Next”按钮进行配置行结尾转换。将其设置为“按原样提取、按原样提交”。
其他安装选项可以使用默认设置。
安装Visual Studio Code
在浏览器中打开 https://code.visualstudio.com/,然后下载并运行。
安装选项可以全部使用默认设置。
完成安装后,建议您启动 Visual Studio Code 并将其固定到任务栏。
将 Visual Studio Code 的终端使用的 Shell 更改为 bash。
在Visual Studio Code的菜单中选择Terminal>>New Terminal,打开终端,然后在显示的菜单中点击右边的”+”下面的↓,选择Select Default Profile,然后选择Git bash。
使用PowerShell的现有终端,请按下垃圾箱按钮关闭。
为了能够使用后续代码命令,先关闭 Visual Studio Code,然后重新启动。
当主机操作系统位于有代理服务器的局域网中时,需要进行代理设置。
如果在公司内或其他有代理服务器的局域网中,请进行代理设置。
请向网络管理员等咨询获取需要设定的代理服务器的URL。
如果在家庭等没有代理的环境中,则不需要进行此设置。
在Visual Studio Code菜单中,选择Terminal >> New Terminal打开一个终端(bash),然后输入以下命令。
echo ${http_proxy}
如果显示了代理服务器的URL,则不需要执行以下步骤。
将以下命令的一部分更改为所属的LAN的代理服务器URL并执行。
echo "export http_proxy=\"http://__ProxyDomain__:__ProxyPortNum__\"" >> ~/.bashrc
echo "export https_proxy=\"http://__ProxyDomain__:__ProxyPortNum__\"" >> ~/.bashrc
echo "export no_proxy=\"localhost,127.0.0.1,control,node1\"" >> ~/.bashrc
修改項目:
`http://__ProxyDomain__:__ProxyPortNum__`
修改后的例子:
`http://proxy.example.com:8080`
或者
`http://10.100.100.100:8080`
执行上述命令后,重新打开bash终端。
可以忽略以下的警告。
WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.
安装 vbguest 插件
vbguest插件是Vagrant的一个插件,用于安装和执行Ansible Local Provisioner。
请在终端(bash)中输入以下命令。
如果终端未打开,
请在Visual Studio Code菜单下选择 Terminal >> New Terminal
来打开它。
vagrant plugin install vagrant-vbguest
下载并打开项目文件夹。
下载包含Vagrant代码和简单Ansible Playbook的Vagrant项目,创建虚拟机并安装Ansible。
您可以在终端(bash)中输入以下命令。
cd ~/Desktop
git clone https://github.com/Takakiriy/multi_vm_ansible.git
在终端(bash)中输入以下命令。
code ~/Desktop/multi_vm_ansible
如果找不到 code 命令,请重新启动 Visual Studio Code。
在Visual Studio Code中输入上述命令后,将关闭输入命令的Visual Studio Code。
在新打开的 Visual Studio Code 中选择终端菜单 >> 新建终端。
主要文件包括在项目中的文件。
创建并启动虚拟机。
在终端(bash)中输入下列命令。
此命令根据 Vagrantfile 的内容创建虚拟机。
vagrant up
为了在控制节点上安装Ansible Local Provisioner,我们要执行一个名为playbook-0.yml的文件。这个过程大约需要10分钟时间。
Vagrant 项目所在的文件夹会与虚拟机的/vagrant/文件夹进行共享。
执行日志的示例:
Unmounting Virtualbox Guest Additions ISO from: /mnt
==> control: Checking for guest additions in VM...
==> control: Configuring and enabling network interfaces...
==> control: Mounting shared folders...
control: /vagrant => C:/Users/user1/Desktop/multi_vm_ansible
==> control: Running provisioner: ansible_local...
control: Installing Ansible...
control: Running ansible-playbook...
PLAY [control] *****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [control]
TASK [dummy] *******************************************************************
ok: [control] => {
"msg": "Ansible ready"
}
PLAY RECAP *********************************************************************
control : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我們將設定Visual Studio Code,以使其可以通過SSH連接到VM。
按下Visual Studio Code的”拡張機能”按鈕,安裝Remote Development擴展功能。
在Remote Development视图中,从REMOTE EXPLORER下拉菜单中选择SSH Targets。
在终端(bash)中输入以下命令。
vagrant ssh-config
将显示必要的SSH连接设置并进行复制。
复制目标是下面命令打开的文件。
请不要删除已存在的其他服务器配置。
code ~/.ssh/config
将光标悬停在远程开发视图上,并按下右上角显示的”重新加载”按钮。
当鼠标悬停在所显示的控件上时,会出现文件夹按钮,然后点击它。
会打开一个新的 Visual Studio Code 窗口。
该窗口是通过 SSH 远程连接的 Visual Studio Code。
当您首次连接时,会询问您的平台,请选择 Linux。
用控制 Visual Studio Code 菜单中的 “File” >> “Open Folder …”,选择打开 “/vagrant/” 文件夹。
新的 Visual Studio Code 窗口将再次打开。
之前打开的控制的 Visual Studio Code 将被关闭。
新的窗口将打开控制节点的 /vagrant/ 文件夹。
在该窗口中选择 Terminal >> New Terminal 菜单,
以确保打开了一个终端。
该终端是通过 SSH 连接的终端。
[vagrant@localhost vagrant]$
被标注为。
当打开了 Visual Studio Code,我会把它关闭。
确保控制节点能够通过SSH连接到托管节点。
使用主机操作系统上的Visual Studio Code终端(bash),输入以下命令。
./upload_SSH_keys.sh
当在途中被询问是否连接到此服务器时,请输入“是”作答。
Shell脚本upload_SSH_keys.sh用于进行SSH连接所需的各种设置和连接测试。
-
- コントロール ノード に秘密鍵をコピーします
-
- その公開鍵を マネージド ノード にコピーします
-
- ホスト名を登録します
- コントロール ノード から マネージド ノードに SSH 接続できることをテストします
执行过程中的情况:
$ ./upload_SSH_keys.sh
~/.ssh/known_hosts
cat: /c/Users/user1/.ssh/known_hosts: No such file or directory
# test connection and set known_host @control
The authenticity of host '[localhost]:2259 ([127.0.0.1]:2259)' can't be established.
ED25519 key fingerprint is SHA256:OyAt+LkHfQOnkxDEJ2JhI+MTWKvOgg9ou/l2C21ltIs.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2259' (ED25519) to the list of known hosts.
connected to (@control)
# test connection and set known_host @node1
The authenticity of host '[localhost]:2251 ([127.0.0.1]:2251)' can't be established.
ED25519 key fingerprint is SHA256:Ndr0xuMRTa6a9OKa15VI3HmQtCFwty81RDeadb/ibhw.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2251' (ED25519) to the list of known hosts.
connected to (@node1)
# make private key @control
private_key 100% 1706 603.4KB/s 00:00
-rw-r--r--. 1 vagrant vagrant 1706 Aug 29 04:13 /home/vagrant/.ssh/id_rsa
# chmod private key @control
-rw-------. 1 vagrant vagrant 1706 Aug 29 04:13 /home/vagrant/.ssh/id_rsa
# add host name @control
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.33.51 node1
# get public key @host
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCymXRpjm0PZfc2CHSi+Ilelm2BSfwigfXIWRleNPH66y+y46B8tENLDtwlVlMcv/p55HOelg+VwJ4P3udX80VABGWRKW/+VvEaZU5rdeCU82q95WyZOfV2WUwtwtEV81lcpKIsigDp1leR1eWmp8xucGbjLiZJ1i3WDCjgb7cYq49CIUpETHRdLqPFnsKOram3wRUOhD93kxVDma6d73E1b9XxoOm72EU2K0lQpejcjZuS/hZ8PCgca1kzM8wq6L6StOYlOugm/rorZDOMIXXEQddj2FUl27ORqCZn5b6YQr7ludd72AJE3ARVkRwRQGlm0Yasc8zqK99tph+jErF9 vagrant
# set authorized_keys @node1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsdsticBkUTm3ndmUuu1bdxuyw5guXo7FmpjwWoa1lGIX4pIBtSh+2VfcpEnShT4rl1mxRjHDXJT6lNqIW7BYMHeC61GLafKVkrQeXkwEpiQBvx2gYd6gO/zkrNAd6JwI13D/iNqxHKohylDI1A64DsBSHgZS8QV1BYWJSAl5iUxct2aA04jq0+LKU4WteQcZjCU03TTIYKYzXfQ8OhvUd7JNJvI3IUgpkolJz8keidKZdmfNmNzrjGhu51KdDZnn0iMfOe8rAgwzdKcRnYIbP4m9oBifZeFecWeuHFLOUP6hbNn+MRao8h/s07drlQNXkhUnZqwV8PgnT35gz6eOB vagrant
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCymXRpjm0PZfc2CHSi+Ilelm2BSfwigfXIWRleNPH66y+y46B8tENLDtwlVlMcv/p55HOelg+VwJ4P3udX80VABGWRKW/+VvEaZU5rdeCU82q95WyZOfV2WUwtwtEV81lcpKIsigDp1leR1eWmp8xucGbjLiZJ1i3WDCjgb7cYq49CIUpETHRdLqPFnsKOram3wRUOhD93kxVDma6d73E1b9XxoOm72EU2K0lQpejcjZuS/hZ8PCgca1kzM8wq6L6StOYlOugm/rorZDOMIXXEQddj2FUl27ORqCZn5b6YQr7ludd72AJE3ARVkRwRQGlm0Yasc8zqK99tph+jErF9 vagrant
# test connection and set known_host @control
Warning: Permanently added 'node1,192.168.33.51' (ECDSA) to the list of known hosts.
control connected to node1
$
通过SSH进行主机操作系统上的控制节点运行Ansible。
在主机操作系统的 Visual Studio Code 终端 (bash) 中输入以下命令。
./run_playbook.sh
执行 playbook.yml 中的所有任务。
附随的 playbook.yml 仅在托管节点 node1 上创建 ~/tmp_visiting_card 文件,
而通常的 playbook.yml 则进行安装。
执行的情况: de : )
行动的情况: de : )
$ ./run_playbook.sh
Using /etc/ansible/ansible.cfg as config file
PLAY [node1] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node1]
TASK [make visiting card] ******************************************************
--- before
+++ after
@@ -1,6 +1,6 @@
{
- "atime": 1630211877.1403475,
- "mtime": 1630211877.1403475,
+ "atime": 1630211959.23235,
+ "mtime": 1630211959.23235,
"path": "tmp_visiting_card",
- "state": "file"
+ "state": "touch"
}
changed: [node1] => {"changed": true, "dest": "tmp_visiting_card", "gid": 1000, "group": "vagrant", "mode": "0664", "owner": "vagrant", "secontext": "unconfined_u:object_r:user_home_t:s0", "size": 0, "state": "file", "uid": 1000}
PLAY RECAP *********************************************************************
node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
备份和恢复操作步骤。
一旦安装了Ansible,可以考虑备份该状态的虚拟机。
有了备份,可以在我们开发的Playbook正常运行之前,还原虚拟机并重新执行操作。
此外,在任务成功运行的数量达到一定程度时,备份虚拟机也是个不错的选择。
备份虚拟机。
关闭正在进行 SSH 连接的 Visual Studio Code。
打开VirtualBox管理器,按住Ctrl键选择多个虚拟机,右键单击,选择关闭>>电源关机。
将下面的文件夹复制到备份文件夹中。
-
- 各 VM のフォルダー (~/VirtualBox VMs/____)
- Vagrant プロジェクトの .vagrant フォルダー
删除VM
打开VirtualBox管理器,在按住Ctrl键的同时选择多个虚拟机,右键点击,选择删除>>删除所有文件。
从备份中恢复 VM。
删除下列文件夹,然后从备份中复制。
-
- 各 VM のフォルダー (~/VirtualBox VMs/____)
- Vagrant プロジェクトの .vagrant フォルダー
如果 VirtualBox 管理器中没有显示虚拟机,应该在 VirtualBox 管理器 >> 虚拟机 >> 添加 中进行恢复。
启动步骤
打开控制节点的电源
用 Visual Studio Code 打开主机操作系统中 Vagrant 项目的文件夹,然后在终端 (bash) 中输入以下命令。
control_only=1 vagrant up
只通过设定 control_only=1 的环境变量,可以从 Vagrant 启动控制节点 (@control)。
-
- control_only=1 は、このプロジェクトの Vagrantfile が定義した固有の設定です
-
- コントロール ノード だけを対象にすることで、
-
- コントロール ノード の起動の完了を待たずに、マネージド ノードの起動を始めることができます
- 先に VirtualBox マネージャーから起動した VM は共有フォルダーが使えなくなります
打开托管节点的电源
打开VirtualBox管理器,右键单击VM (@node1),然后选择启动 >> 无界面启动。
如果存在多个受管节点,可以同时按住 Ctrl 键选择多个虚拟机进行启动。
调试步骤
通过仅运行出现问题的一个任务,可以高效地进行 Ansible 执行的 Playbook 的调试。
只需要执行一个任务时,需要通过SSH登录到控制节点。
我会打开 Visual Studio Code 中的控制节点。
当使用Visual Studio Code打开(登录)远程文件夹时,可以像与非远程文件夹一样,从最近打开的文件夹中选择来打开。
以下是几种可选的方法:
-
- Windows のタスクバーの VSCode を右クリック >> Folder [SSH:Server]
- 任意の Visual Studio Code >> File >> Open Recent >> Folder [SSH:Server]
就像第一次打开远程文件夹那样,你也可以从“Remote Development”视图中打开。
使用 Visual Studio Code 登录后,您可以通过 Visual Studio Code 的文本编辑器编辑远程文件。
只执行一个Ansible任务。
登录控制节点后,将用于Ansible的清单文件路径设置为ANSIBLE_INVENTORY环境变量。
export ANSIBLE_INVENTORY="/tmp/vagrant-ansible/inventory/vagrant_ansible_local_inventory"
由于使用Vagrant的Ansible Local配置管理器,
Ansible的清单文件将自动在虚拟机内部创建。
当使用Ansible对用于生产的物理服务器进行配置时,
需要单独准备清单文件。
要单独运行Ansible的一个任务,请执行以下命令。但请编辑要执行的任务名称。 “制作名片”是在playbook.yml中指定的任务名称。
ansible-playbook playbook.yml --diff -v --step --start-at-task "make visiting card"
以下的常用选项未在上文提及:
-
- –check: チェックだけ行い、タスクの実行は行ません (dry run)。本番では必ず行ってください
-
- –limit “HostName”: 対象のサーバーを指定または制限します
- -vvv: 最も詳細に状況を表示します。-v オプションの代わりに指定します
因为指定了–step选项,所以在收集服务器信息之前和执行任务之前会被询问是否要执行它。
由于每次都要进行服务器信息收集,所以当只执行一个任务时,需要输入y两次。
然后会被询问是否要继续执行下一个任务,这时按下Ctrl + C键来结束。
当执行完最后一个任务时,不需要按下Ctrl + C键。
执行情况
$ ansible-playbook playbook.yml --diff -v --step --start-at-task "make visiting card"
Using /etc/ansible/ansible.cfg as config file
PLAY [node1] ****************************************************************************
Perform task: TASK: Gathering Facts (N)o/(y)es/(c)ontinue: y
Perform task: TASK: Gathering Facts (N)o/(y)es/(c)ontinue: ******************************
TASK [Gathering Facts] ******************************************************************
ok: [node1]
Perform task: TASK: make visiting card (N)o/(y)es/(c)ontinue: y
Perform task: TASK: make visiting card (N)o/(y)es/(c)ontinue: ***************************
TASK [make visiting card] ***************************************************************
--- before
+++ after
@@ -1,6 +1,6 @@
{
- "atime": 1630211959.231837,
- "mtime": 1630211959.231837,
+ "atime": 1630214387.011351,
+ "mtime": 1630214387.011351,
"path": "tmp_visiting_card",
- "state": "file"
+ "state": "touch"
}
changed: [node1] => {"changed": true, "dest": "tmp_visiting_card", "gid": 1000, "group": "vagrant", "mode": "0664", "owner": "vagrant", "secontext": "unconfined_u:object_r:user_home_t:s0", "size": 0, "state": "file", "uid": 1000}
PLAY RECAP ******************************************************************************
node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
增加托管节点的时候
只需进行一次性操作,将 Vagrantfile 中的 Managed node 部分复制粘贴并调整 IP 地址和端口号,然后执行 vagrant up,就可以增加服务器(即节点)。由于 Vagrant 具有幂等性,仅会创建新增的节点。
同样进行从主机操作系统到托管节点的SSH连接以及从控制节点到托管节点的SSH连接的配置。
引入效果
当你开始使用Ansible后,你将只在第一次安装软件时遇到困难,而且不会对将Linux恢复到初始状态表示抵抗。
当多个软件被安装时,我们会对许多软件的运行产生疑问,但你将从这样的不安要素中得到解放。
此外,不需要为新来的人安装开发环境提供文档,搭建环境所需的时间也将大大缩短。
(附录)通过结构化文档的操作手册.
以下是在 Windows 上安装具有 Ansible 的 VM 的步骤。
VirtualBox をインストールします:
- https://www.virtualbox.org/ >> Download VirtualBox X.X >> Windows hosts
- ダウンロードしたファイル(例:VirtualBox-6.1.22-144080-Win.exe)を開きます
- インストール オプションはデフォルトを使用
- ドライバーはインストールします
Vagrant をインストールします:
- https://www.vagrantup.com/downloads.html >> Windows(タブ)>> 64-bit
- ダウンロードしたファイル(例:vagrant_2.2.16_x86_64.msi)を開きます
- インストール オプションはデフォルトを使用
- PC を再起動します
Git for Windows をインストールします:
- https://git-scm.com/ >> Download for Windows(右下)
- ダウンロードしたファイル(例:Git-2.33.0.2-64-bit.exe)を開く
- Next を9回押す
- Configuring the line ending conversions: Checkout as-is, commit as-is
- 他のインストール オプションはデフォルトを使用
Visual Studio Code をインストールします:
- https://code.visualstudio.com/
- ダウンロードしたファイル(例:VSCodeUserSetup-x64-1.50.1.exe)を開きます
- インストール オプションはデフォルトを使用
- Git bash シェルをデフォルトで開くようにします:
VSCode >> Terminal >> New Terminal >> +の右の↓(シェルの右上)>>
Select Default Profile >> Git bash >> ゴミ箱 ボタン(シェルの右上)
- (推奨)VSCode (Visual Studio Code をタスクバーにピン止めします:
- (推奨)Ctrl + S キーを押したときに全てのファイルを保存するように設定します: |
VSCode >> File >> Preferences >> Keyboard Shortcuts >> save all (と入力) >>
File: Save All (をダブルクリック) >> Ctrl + S キー >> Enter キー
ホストOSがプロキシがあるLANにいるとき:
Git bash の環境変数 http_proxy などにプロキシのアドレスを設定します:
#// 下記で定義する環境変数名は Linux でよく使われます
#// http://__ProxyDomain__:__ProxyPortNum__ の例: http://10.100.100.100:8080
(@host) bash:
- echo ${http_proxy} #// 表示されたら以降の手順は不要です
- echo "export http_proxy=\"http://__ProxyDomain__:__ProxyPortNum__\"" >> ~/.bashrc
- echo "export https_proxy=\"http://__ProxyDomain__:__ProxyPortNum__\"" >> ~/.bashrc
- echo "export no_proxy=\"localhost,127.0.0.1,control,node1\"" >> ~/.bashrc
bash を開きなおします:
下記の警告は無視できます: |
WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.
vbguest プラグインをインストールします: #// Ansible Local と Vagrant を接続するプラグインです
(@host) Git bash: #// VSCode >> Terminal >> New Terminal
- vagrant plugin install vagrant-vbguest
プロジェクト フォルダーをダウンロードします:
(@host) Git bash:
- cd ~/Desktop
- git clone https://github.com/Takakiriy/multi_vm_ansible.git
Visual Studio Code で プロジェクト フォルダーを開きます:
(@host) Git bash:
- code ~/Desktop/multi_vm_ansible
#// VSCode 内で上記のコマンドを入力したら、コマンドを入力した VSCode を閉じます
Git bash シェルを開きます:
(@host) VSCode >> Terminal >> New Terminal
仮想マシンを作って起動します:
(@host) Git bash:
- cd __Project__ #// 不要の場合あり。以後も同様
- vagrant up #// 初回は約 10分。内部で Ansible Local による Playbook も動きます
#// Vagrant プロジェクトがあるフォルダーは、VM の /vagrant/ フォルダーと共有します。
SSH で仮想マシンにログインできるように設定します(VSCode用):
VSCode の Remote Development 拡張機能をインストールします:
インストールします:
(@host) VSCode >> 拡張機能 ボタン(左) >> Remote Development
SSH Targets を表示します:
メニュー: (@host) VSCode >> Remote Explorer(アイコン:左)
REMOTE EXPLORER(上): SSH Targets
SSH の設定を VSCode に追加します:
(@host) VSCode Git bash:
- vagrant ssh-config #// SSH の接続に必要な設定が表示されます
- code ~/.ssh/config #// vagrant ssh-config の出力を最後に貼り付けます
Visual Studio Code で SSH 接続します:
vagrant / フォルダーが表示されているか確認します:
(@host) VSCode >> Remote Explorer(左のアイコン)>> control >> vagrant /
vagrant / フォルダーが表示されていない場合:
SSH 接続します:
control(の右のフォルダー)ボタン
(@control) platform: Linux
#// 接続できない時は、vagrant ssh-config を再実行してください
SSH 接続した Visual Studio Code でフォルダーを開きます:
(@control) VSCode >> File >> Open Folder ... >> /vagrant/
vagrant / フォルダーが表示されている場合:
(@host) vagrant / フォルダー(の右のフォルダー)ボタン
シェルを開けることを確認します:
(@control) VSCode >> Terminal >> New Terminal
#// [vagrant@localhost vagrant]$ と表示されます
#// 次回プロジェクトを開いたときにシェルが開いた状態になります
開けたら Visual Studio Code を閉じます:
Remote Explorer で開いたフォルダーを表示させます:
(@host) VSCode >> Remote Explorer(左のアイコン)>> Reflesh ボタン(右上)
次回からログインするときの操作:
- (@host) タスクバーの VSCode を右クリック >> __Folder__ [SSH:__Server__] #// または
- (@host) VSCode >> File >> Open Recent >> __Folder__ [SSH:__Server__] #// または
- (@host) VSCode >> Remote Explorer ボタン(左)>> REMOTE EXPLORER= SSH Targets >> __Server__ >> __Folder__
以上を @node1 についても行ます:
ansible_local がインストールされた VM から他の VM に SSH 接続できるようにします:
(@host) Git bash:
./upload_SSH_keys.sh
SSH 経由で Ansible playbook を実行します:
(@host) Git bash:
./run_playbook.sh
作成したすべての VM の電源を切ります:
VirtualBox マネージャー >> __ProjectFolderName___control____ などを選択して右クリック >>
閉じる >> 電源オフ
(必要なら).vagrant フォルダーと VM のフォルダーをバックアップします:
VM のフォルダー:
.vagrant フォルダー: #// VM の情報を持っています
VM の電源を入れます: #// VM の電源を入れてホストOS と SSH 接続できるようにします
#// 現在の VM が電源オフの状態でも中断の状態(ホストOSをシャットダウンした後の状態)でも同じ手順です
VSCode でホストOS の Vagrant プロジェクトを開きます:
タスクバーの VSCode を右クリック >> __Project__
VirtualBox マネージャーに VM が表示されていない場合:
VirtualBox マネージャー >> 仮想マシン >> 追加
vagrant を起動します:
(@host) Git bash:
control_only=1 vagrant up
#// 下記のサーバーも同時に起動できます:
#// control_only=1 は、この Vagrantfile 固有の設定です
#// 先に VirtualBox マネージャーで起動した VM は共有フォルダーが使えません
#// control サーバー以外は vagrant up では起動しません。後で並列起動して早くするためです
control サーバー以外を VirtualBox から起動します:
VirtualBox マネージャー >> __ProjectFolderName___node1____ などをまとめて選択して右クリック >>
起動 >> ヘッドレス起動
1つのタスクだけ実行します:
--step オプションと --start-at-task オプションを使います:
(@control) bash:
- export ANSIBLE_INVENTORY="/tmp/vagrant-ansible/inventory/vagrant_ansible_local_inventory"
- ansible-playbook playbook.yml --diff -v --step --start-at-task "__TaskName__"
よく使うオプション:
--limit "__HostName__": 対象のサーバーを指定または制限します
-vvv: 最も詳細に状況を表示します
--check: チェックだけ行い、タスクの実行は行ません (dry run)
请参考以下网站。
-
- Ansible の Vagrant ガイド https://docs.ansible.com/ansible/2.9_ja/scenario_guides/guide_vagrant.html
Vagrant の Amsible Local プロビジョナー https://www.vagrantup.com/docs/provisioning/ansible_local
Ansible Playbook の作り方(サンプルの表示が崩れています) https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks.html
Ansible Playbook の作り方(英語版) https://docs.ansible.com/ansible/2.9/user_guide/playbooks.html
ansible-playbook コマンドのオプション https://docs.ansible.com/ansible/2.9_ja/cli/ansible-playbook.html
Ansible のモジュールのカタログ https://docs.ansible.com/ansible/2.9_ja/modules/modules_by_category.html
(物理サーバーなど、Vagrant を使わない)Ansible のインストール https://docs.ansible.com/ansible/2.9_ja/installation_guide/intro_installation.html