我在Mac上尝试使用Ansible 2.9和Vagrant
我早起了,所以决定学习Ansible。
在星期天早起可真是少见。
验证环境
macOS Catalina(10.15.1)是一款操作系统。这款本体是2012年的Macbook Air(11英寸)。它的寿命比我想象的要长。虽然它只有4GB内存,而且它的CPU也比我最近购买的手机差一些。
在Mac上尝试安装Virtual box。
$ VBoxManage -v
6.1.2r135662
我尝试在Mac上安装Vagrant。
$ vagrant -v
Vagrant 2.2.7
尝试在Mac上安装Ansible。
我尝试使用brew进行安装。
$ brew install ansible
~~?省略~~
==> Installing ansible
==> Downloading https://homebrew.bintray.com/bottles/ansible-2.9.3.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/69/693228e5f7c7b2b02581ae94589d28eac2b6b1128d97c87f08e8acfa22f8f035?__gda__=exp=1580596919~hmac=dafa919db241a7985a6b6023e8f64090da920dcfffbbb17bf
######################################################################## 100.0%
==> Pouring ansible-2.9.3.catalina.bottle.tar.gz
? /usr/local/Cellar/ansible/2.9.3: 16,933 files, 211.1MB
~~省略?~~
$ ansible --version
ansible 2.9.3
config file = None
configured module search path = ['/Users/ユーザー名/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/Cellar/ansible/2.9.3/libexec/lib/python3.8/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.8.1 (default, Dec 27 2019, 18:06:00) [Clang 11.0.0 (clang-1100.0.33.16)]
$ ansible #Tabキー入力候補
ansible ansible-connection ansible-doc ansible-inventory ansible-pull ansible-vault
ansible-config ansible-console ansible-galaxy ansible-playbook ansible-test
可能没问题,OK~ 版本是2.9.3(这可能会导致后来的困扰、、)
尝试在Mac上使用Ansible和Vagrant (标题)
由于已安装了Ansible,因此我们将进行环境准备。
创建vagrant的目录
$ cd /Users/ユーザー名 ※権限アリそうなところに適当に移動する
$ mkdir vagrants
$ mkdir vagrants/ansible_test
$ cd vagrants/ansible_test/ # これからずっと作業することになる場所
$ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.
盒子里什么也没有!!(当然)
添加盒子
$ vagrant box add centos/7 --provider virtualbox
==> box: Loading metadata for box 'centos/7'
box: URL: https://vagrantcloud.com/centos/7
==> box: Adding box 'centos/7' (v1905.1) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1905.1) for 'virtualbox'!
$ vagrant box list
centos/7 (virtualbox, 1905.1)
根据默认设置选择适当的提供者虽然有记录,但是添加时要求输入是一件麻烦的事情,所以最好在一开始就指定好。
我决定作为选项加上–provider virtualbox。
命令:vagrant box
如果提供了–provider参数,Vagrant将验证您添加的盒子是否支持指定的提供商。默认情况下,Vagrant会自动检测使用合适的提供商。
创建VagrantFile。
$ vagrant init centos/7
$ ls -la
Vagrantfile
请按照以下方式设置已创建的VagrantFile的配置。
15行目くらい
config.vm.box = "centos/7" #これはinitの時に指定したのでokですね
26行目くらい
# config.vm.network "forwarded_port", guest: 80, host: 8080
のコメントアウト外す
config.vm.network "forwarded_port", guest: 80, host: 8080
35行目くらい
# config.vm.network "private_network", ip: "192.168.33.10"
のコメントアウト外す
config.vm.network "private_network", ip: "192.168.33.10"
在这里先尝试启动并连接Vagrant,看是否成功。
$ vagrant up
$ vagrant ssh
如果可以的话,我们继续进行Ansible配置的章节。
如果不行的话,可以尝试向谷歌老师请教。
尝试设置Ansible配置
尝试在VagrantFile中添加Ansible配置
70行目くらいに追加
config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/ansible.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = 'all'
end
好好创建库存和操作手册。
首先,尝试创建一个目录,其中包含库存和操作手册。
$ mkdir provisioning
尝试创建一个库存文件※ 您可以使用任何编辑器 [ vim provisioning/hosts ]。
[vagrant]
192.168.33.10 #ここにssh-configのホスト名を記述することも可能(らしい、試してない)
[vagrant:vars]
ansible_ssh_private_key_file=/Users/ユーザー名/vagrants/ansible_test/.vagrant/machines/default/virtualbox/private_key
ansible_become=yes
ansible_user=vagrant
ansible_become_method=su
ansible_become_user=root
ansible_become_password=vagrant
建议使用从根目录开始的路径来写ansible_ssh_private_key_file的路径。
您可以使用以下命令确认私钥的位置。
$ vagrant ssh-config
感觉到在使用Ansible的状态下。
尝试创建一个playbook。
从yum软件包管理器中管理软件包
我想安装nginx,所以我用nginx写了一下,如果你想安装apache,请尝试取消注释(虽然我没有试过,但应该能正常运行)。
请将下面的内容用中文进行本地化,请提供一种选项:
$ vim provisioning/ansible.yml
使用 Vim 编辑 provision.yml 文件
- name: my ansible start
hosts: vagrant
tasks:
# Note: これ実行すると初回は時間がかかります
- name: upgrade all packages
yum:
name: '*'
state: latest
# apache入れたい方はこちら〜
# - name: install the latest version of Apache
# yum:
# name: httpd
# state: latest
- name: install the nginx rpm from a remote repo
yum:
name: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
state: installed
- name: Install a list of packages
yum:
name:
- nginx
- postgresql
- postgresql-server
- git
state: installed
- name: nginx service started
service:
name: nginx
state: started
enabled: yes
- name: create public directories
file:
path: /home/vagrant/app
state: directory
mode: '0755'
owner: vagrant
group: vagrant
实际上,我认为可能会涉及到版本指定、配置文件等等,对于PHP、Ruby之类的及其他各种事情都是必要的。但今天我们只是想简单了解一下Ansible,所以在这里不进行详细解释,要不然还得加上Jinja2之类的讨论。剩下的就只需要阅读官方文档了。
干燥走或其他
# syntax-check
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --syntax-check
YAML形式に慣れてないとここで泣かされる、、、
# dry-run
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --check
初回実行時(まだrunしてない)はパッケージインストールのとこでエラーがでるかもしれない、リポジトリ周りで
只需要进行一个选项的汉语本地化改写:
只用一次”预演”命令就足够了(我写了一个”语法检查”,但如果您实在无法脱离语法困境,我推荐您使用这个扩展!这是为Visual Studio Code准备的!)
https://marketplace.visualstudio.com/items?itemName=vscoss.vscode-ansible
让我们开始运行Ansible吧!(终于)
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml
也许在这里也会遇到无数的困难,但让我们通过查看日志来努力吧,我会支持你的!并不是因为变得麻烦了,或者不想再读英语了之类的原因。
随意确认
确认 nginx 是否已安装
[root@localhost ~]# nginx -v
nginx version: nginx/1.16.1
[root@localhost ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-02-02 05:56:25 UTC; 13min ago
Docs: http://nginx.org/en/docs/
Process: 7508 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 7509 (nginx)
CGroup: /system.slice/nginx.service
├─7509 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
└─7510 nginx: worker process
我看到了!
顺便确认一下是否已经创建目录了。
$ vagrant ssh
[vagrant@localhost ~]$ ll
合計 0
drwxr-xr-x. 2 vagrant vagrant 6 2月 2 05:56 app
755的vagrant:vagrant应用程序目录已经创建好了呢
时间有点奇怪呢,实际上是根据GMT的时区来的
如果按照平时调整到日本时间的方法应该就可以了
而且还可以设置创建时间的时间戳之类的,更详细的信息请查阅官方文档
file – 管理文件和文件属性
触动心灵的感触
因为稍微早起了一点点,就有了能做任何事情的心情。
虽然我尝试了一下,发现其中很深奥,对像我这样的初学者来说可能很难。
不过目前我尝试了最新版本。
Mac也担心有点老旧不稳定(谢谢)
我会反省的,但不后悔!
暗中作乱的那个家伙…
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --check
PLAY [my ansible start] *************************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************************
The authenticity of host '192.168.33.10 (192.168.33.10)' can't be established.
ECDSA key fingerprint is SHA256:rDFlObtISFdpBb5500Sl+PDQ6Xk1RKoa8tndjwvpukY.
Are you sure you want to continue connecting (yes/no)? yes
fatal: [192.168.33.10]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.33.10' (ECDSA) to the list of known hosts.\r\nvagrant@192.168.33.10: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true}
PLAY RECAP **************************************************************************************************************************************************************************************
192.168.33.10 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
秘密的钥匙!?被告知不可以!
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --check --private-key=~/vagrants/ansible_test/.vagrant/machines/default/virtualbox/private_key
う、動いた〜
由于该设置已经在Inventory中进行了描述,因此不再需要通过命令参数传递,R.I.P…
履歴が非常に悪いため、さらに激しい試行錯誤が行われましたが、最終的にこの世から完全に消え去ることになりました。
文献参考
非常感谢所有文档的作者,我对它们学到了很多。
yum – 使用yum包管理器管理软件包
理解权限提升:成为
如何构建您的清单
file – 管理文件和文件属性
Ansible快速入门视频
在Mac上使用Vagrant创建CentOS7环境
给想要开始使用Ansible的人
使用Ansible和Vagrant搭建开发环境
Ansible ~service模块~
无需清单文件即可运行ansible-playbook命令