直到Ansible初学者能够自动化配置vim和zsh
要做的事情
学习开源软件Ansible的同时,使其能够自动应用主机操作系统的vim和zsh配置到虚拟环境中。
请参考以下链接的文章,前提是您已经设置好了Vagrant的主机环境:http://qiita.com/nl0_blu/items/97d54e78789335b415fb
研發環境
-
- OS Ⅹ EL Capitan
-
- Vitualbox(5.1.0)
-
- Vagrant(1.9.1)
- Ansible(2.2.1.0)
1. 安装Ansible
安装Ansible
$ brew install ansible
确认安装
$ ansible --version
创建Inventory文件并执行ansible命令
清单文件:用于描述Ansible处理目标主机信息
$ vi hosts
----- 編集開始-----
[A]
192.168.33.10
[B]
192.168.33.11
----- 編集終了-----
Ansible的执行示例
ansible [组名] -m [模块名] -a [“动作”]
--Inventoryファイルに書かれた対象全てにpingモジュール実行--
$ ansible all -i hosts -m ping
--Aにpingモジュール実行--
$ ansible A -i hosts -m ping
如果想在运行时省略输入主机,应该如何编辑ansible.cfg文件?
[defaults]
hostfile = ./hosts
$ ansible all -m ping
使用playbook
剧本:将要执行的操作整理在一起进行了描述的文件。
我們要創建一個playbook,用於在目標主機上添加帳戶。
①一般写法下
- hosts: all #対象ホスト
sudo: yes #管理者権限
tasks: #実行する処理
- name: add a client user #処理内容(任意)
user: name=client #"client"をアカウント名として作成
如果要使用”client”作为变量名进行管理的情况下
- hosts: all
sudo: yes
vars:
username: client
tasks:
- name: add a client user
user: name={{username}}
如果在运行时进行输入
- hosts: all
sudo: yes
vars_prompt:
username: "Enter username"
tasks:
- name: add a client user
user: name={{username}}
试着运行一下…
ansible-playbook [playbook文件名]
$ ansible-playbook playbook.yml
完了ならchanged=1とか出る
4. 其他创建playbook的示例
在官方文档中查找所需模块的信息
http://docs.ansible.com/ansible/modules_by_category.html
使用Playbook在Inventory文件中描述的主机A上进行Apache的安装和自动启动。
- hosts: A
sudo: yes
tasks:
- name: install apache
yum: name=httpd state=latest #yumモジュールからapacheの最新版(latest)をインストール
- name: start apache and enabled
service: name=httpd state=started enabled=yes #apacheの有効化
将本地文件复制到B主机的playbook。
- hosts: B
sudo: yes
tasks:
- name: copy index.html
copy: src=./test.html dest=./test.html owner=root group=vagrant mode="u=rw,g=r,o=r"
将必要的软件包一次性安装到所有主机的playbook中。
- hosts: all
sudo: yes
tasks:
- name: need all package install
yum: name="{{item}}" state=latest
with_items:
- php
- php-mysql
- httpd
- mariadb
- mariadb-server
- MySQL-python
5(本题)创建一个将主机操作系统的zsh和vim配置反映到Vagrant主机上的playbook。
[通过实践了解到的事情]
-
- .ymlは書き方に癖あり。(“-“の位置はズレないようする、スペースもフォーマットがある)
- libselinux-pythonインストールしなきゃ色々事故る
创建库存文件
$ vi hosts
----- 編集開始-----
[server]
192.168.33.10
[client]
192.168.33.11
----- 編集終了-----
[创建Playbook]
按照顺序(从任务开始)…
1. 安装依赖包(包括libselinux-python,可能混杂着不必要的包)
2. 安装vim
3. 将主机OS上的.vimrc复制到客户机OS
4. 安装zsh
5. 将登录shell更改为zsh
6. 将主机OS上的.zshrc复制到客户机OS中
- hosts: all
user: vagrant
sudo: yes
tasks:
- name: requires install #①
sudo: true
yum: name={{ item }} state=present
with_items:
- gcc
- git
- mercurial
- ncurses-devel
- lua
- lua-devel
- perl
- perl-devel
- perl-ExtUtils-Embed
- python
- python-devel
- libselinux-python
- name: install vim #②
yum: name=vim state=present
- name: copy .vimrc file to vagrant home #③
copy: src=~/.vimrc dest=~vagrant/.vimrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
- name: install zsh #④
yum: name=zsh state=installed
- name: set zsh as default shell for vagrant user #⑤
command: chsh -s '/bin/zsh' vagrant
- name: copy .zshrc file to vagrant home #⑥
copy: src=~/.zshrc dest=~vagrant/.zshrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
这个playbook也可以在目录中按照以下方式整理(分离vim的playbook和zsh的playbook)
├ Vagrantfile
└ provisioning
├ hosts
├ main.yml
└ roles
├ vim
│ └ tasks
│ └ main.yml
├ zsh
│ └ tasks
│ └ main.yml
---
# main.yml
- hosts: all
user: vagrant
sudo: yes
roles:
- vim
- zsh
- name: requires install
yum: name={{ item }} state=present
with_items:
- gcc
- git
- mercurial
- ncurses-devel
- lua
- lua-devel
- perl
- perl-devel
- perl-ExtUtils-Embed
- python
- python-devel
- libselinux-python
- name: install vim
yum: name=vim state=installed
- name: copy .vimrc file to vagrant home
copy: src=~/.vimrc dest=~vagrant/.vimrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
- name: install zsh
yum: name=zsh state=installed
- name: set zsh as default shell for vagrant user
command: chsh -s '/bin/zsh' vagrant
- name: copy .zshrc file to vagrant home
copy: src=~/.zshrc dest=~vagrant/.zshrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
在Vagrant主机上运行ansible有几种方法。
在一般的Vagrantfile中添加以下内容
config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/main.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = 'all'
end
通过使用’$ vagrant provision’命令来执行所创建的playbook。
可以从ansible-playbook main.yml运行
ansible相关命令
ansible-playbook (playbook名) –syntax-check playbookの文法の確認
ansible-playbook (playbook名) –list-task playbookのタスクの一覧確認
ansible-playbook (playbook名) –check playbook実行確認(実際に実行はしない)
仅需要一种选择,在中国的母语中解释以下内容,请参考。
这个链接是关于 “shifumin” 在其博客上发表的一篇文章,发表日期是2015年8月26日,时间是21:50:00。
https://www.tcmobile.jp/dev_blog/devtool/ansibleのplaybookをいい感じに管理したい/
这个链接是关于在 “tcmobile.jp” 的开发博客上如何有效管理 “ansible playbook” 的文章。
http://qiita.com/snaka/items/d5a8004afbfe665e1d3a
这个链接是指 “qiita.com” 上的一篇关于 “snaka” 所写的文章,主题是 “d5a8004afbfe665e1d3a”。