我在Mac上尝试使用Ansible 2.9和Vagrant

我早起了,所以决定学习Ansible。
在星期天早起可真是少见。

验证环境

macOS Catalina(10.15.1)是一款操作系统。这款本体是2012年的Macbook Air(11英寸)。它的寿命比我想象的要长。虽然它只有4GB内存,而且它的CPU也比我最近购买的手机差一些。

在Mac上尝试安装Virtual box。

スクリーンショット 0002-02-02 7.20.45.png
スクリーンショット 0002-02-02 7.12.30.png
$ VBoxManage -v
6.1.2r135662

我尝试在Mac上安装Vagrant。

スクリーンショット 0002-02-02 7.17.35.png
$ 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
スクリーンショット 0002-02-02 15.11.51.png

我看到了!

顺便确认一下是否已经创建目录了。

$ 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命令

广告
将在 10 秒后关闭
bannerAds