導入專案,建置專案從手工到自動,以下幾個是在嘗試把專案會用到的都寫成 playbook,先分開不同的檔案,未來等都完成的差不多,就可以整合成一個大的 playbook,下次需要再建置一次部署環境的時候,就可以直接拿來使用,非常的方面,而且還可以加入版控,方便管理.
安裝 git 2.8.1
vim git2.8.1.yml
---
- hosts: all
name: Git 2.8.1
tasks:
- name: install packages
sudo: yes
yum: name="{{ packages }}" state=present
when: ansible_pkg_mgr == "yum"
vars:
packages:
- make
- wget
- curl-devel
- expat-devel
- gettext-devel
- openssl-devel
- zlib-devel
- gcc
- perl-ExtUtils-MakeMaker
- name: Download git-2.8.1.tar.gz
sudo: yes
get_url:
url: https://www.kernel.org/pub/software/scm/git/git-2.8.1.tar.gz
dest: /usr/src/git-2.8.1.tar.gz
- name: Unarchive git-2.8.1.tar.gz
sudo: yes
unarchive:
src: /usr/src/git-2.8.1.tar.gz
dest: /usr/src
remote_src: yes
- name: make all
sudo: yes
shell: cd /usr/src/git-2.8.1; make prefix=/usr/local/git all
- name: make install
sudo: yes
shell: cd /usr/src/git-2.8.1; make prefix=/usr/local/git install
- name: backup old git
sudo: yes
shell: mv /usr/bin/git /usr/bin/git-bak; ln /usr/local/git/bin/git /usr/bin/git;git --version
register: result
- name: print stdout
debug:
msg: "{{ result.stdout }}"
# 測試執行
ansible-playbook git2.8.1.yml
安裝 Postgresql 9.5
vim postgres.yml
---
- hosts: all
name: Postgresql 9.5
tasks:
- name: pgdg-centos95-9.5-2.noarch.rpm
sudo: yes
when: ansible_pkg_mgr == "yum"
yum:
name: http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
state: present
- name: install postgresql95
sudo: yes
when: ansible_pkg_mgr == "yum"
yum: name="{{ packages }}" state=present
vars:
packages:
- postgresql95-server
- postgresql95
- postgresql95-devel
- name: check /var/lib/pgsql/9.5/data is exist
sudo: yes
stat:
path: "/var/lib/pgsql/9.5/data"
register: pgdata_dir_version
- name: initdb
sudo: yes
when: not pgdata_dir_version.stat.exists
shell: /usr/pgsql-9.5/bin/postgresql95-setup initdb
- name: systemctl restart postgresql-9.5
sudo: yes
systemd:
name: postgresql-9.5
state: started
enabled: yes
# 測試執行
ansible-playbook postgres.yml
創建使用者,並且創建 DB 的使用者
vim user.yml
---
- hosts: all
name: Create Linux User and DB User
tasks:
- name: Add the user 'project'
sudo: yes
user:
name: project
state: present
password: 123456
- name: install packages
sudo: yes
yum: name="{{ packages }}" state=present
when: ansible_pkg_mgr == "yum"
vars:
packages:
- gcc
- gcc-c++
- make
- patch
- openssl-devel
- zlib-devel
- readline-devel
- sqlite-devel
- bzip2-devel
- net-tools
- libjpeg
- zlib
- libtiff
- libwebp
- tcl
- tk
- openjpeg
- libtiff-devel
- libjpeg-devel
- libzip-devel
- freetype-devel
- lcms2-devel
- libwebp-devel
- tcl-devel
- tk-devel
- python-devel
- libffi-devel
- name: Create Postgres User
become: yes
become_user: postgres
command: "psql -c 'CREATE ROLE project CREATEDB LOGIN;'"
ignore_errors: yes
# 測試
ansible-playbook user.yml
切換到 project 帳號安裝 pyenv
vim pyenv.yml
---
- hosts: all
name: Create Linux User and DB User
tasks:
- name: add pgsql-9.5 PATH
become: yes
become_user: project
lineinfile:
path: ~/.bash_profile
line: 'export PATH=/usr/pgsql-9.5/bin:$PATH'
- name: git clone pyenv
become: yes
become_user: project
command: "git clone git://github.com/yyuu/pyenv.git ~/.pyenv"
ignore_errors: yes
- name: add pyevn 1
become: yes
become_user: project
lineinfile:
path: ~/.bash_profile
line: 'export PATH=/home/project/.pyenv/bin:$PATH'
- name: add pyevn 2
become: yes
become_user: project
lineinfile:
path: ~/.bash_profile
line: 'eval "$(pyenv init -)"'
- name: source .bash_profile
become: yes
become_user: project
shell: source ~/.bash_profile
- name: pyenv install 3.5.0
become: yes
become_user: project
command: ~/.pyenv/bin/pyenv install 3.5.0
- name: pyenv install 2.7.12
become: yes
become_user: project
command: ~/.pyenv/bin/pyenv install 2.7.12
#測試
ansible-playbook pyenv.yml
在實作 playbook 的腳本的時候,發現 shell module 很好用,但是有一個問題是,每次執行都會跑一次指令,所以後來都盡量避免使用 shell module.