安装
直接apt-get安装版本太低
apt-get install ansible
root@pca-test:~# ansible --version
ansible 1.5.4
root@pca-test:~#
我们使用源码安装
sudo apt-get install python-pip
sudo apt-get install python-dev libffi-dev libssl-dev libyaml-dev sshpass -y
sudo pip install paramiko PyYAML Jinja2 httplib2 six --upgrade
sudo pip install --upgrade setuptools
git clone git://github.com/ansible/ansible.git --recursive
cd ansible
git pull --rebase
git submodule update --init --recursive
sudo make install
报错…
[root@ansible_01 ~]# ansible -v
Traceback (most recent call last):
File "/usr/bin/ansible", line 36, in <module>
from ansible.runner import Runner
ImportError: No module named ansible.runner
执行这个~
source hacking/env-setup
修改配置
直接安装完成后没有/etc/ansible目录
mkdir /etc/ansible
cp examples/ansible.cfg /etc/ansible/
cp examples/hosts /etc/ansible/
加入几个host
root@pca-test:/etc/ansible# grep -Ev "^$|#" /etc/ansible/hosts
[pca]
192.168.11.81 ansible_ssh_pass=123456
[oat-server]
192.168.11.82 ansible_ssh_pass=123456
[oat-client]
192.168.11.83 ansible_ssh_pass=123456
root@pca-test:/etc/ansible#
设置为首次链接不需要key认证
sed -i "s/^#\(host_key_checking\).*/\1 = False/g" /etc/ansible/ansible.cfg
测试
利用ping测试
root@pca-test:~/workspace/ansible# ansible all -m ping
SSH password:
192.168.11.81 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.11.82 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.11.83 | SUCCESS => {
"changed": false,
"ping": "pong"
}
root@pca-test:~/workspace/ansible#
将salt-stack转变为ansible
ansible模块可以从这里看到:http://docs.ansible.com/ansible/list_of_files_modules.html
我们来尝试把之前用salt-stack写的代码改成ansible
原saltstack代码
之前用salt-stack写的pre.sls如下:
{# for /etc/hosts #}
/etc/hosts:
file.managed:
- source: salt://files/hosts
- user: root
- group: root
- mode: 644
cmd.run:
- name: sed -i 's/^\(127.0.1.1\).*$/\1\t{{host}}/g' /etc/hosts
/etc/apt/sources.list:
file.managed:
- source: salt://files/local_sources.list
- user: root
- group: root
- mode: 644
/etc/apt/sources.list.bak:
file.managed:
- source: salt://files/ubuntu/sources.list
- user: root
- group: root
- mode: 644
install_base_pkg:
cmd.run:
- name: |
sed -i "s/MODIFIED/{{conf.admin_host}}/g" /etc/apt/sources.list
apt-get update -y
- require:
- file: /etc/apt/sources.list
ansible代码
目录结构如下:
root@pca-test:~/workspace/test# tree
.
├── group_vars
│ └── bootstrap.json
├── roles
│ └── pre
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ ├── hosts
│ └── ubuntu
│ ├── sources.list
│ └── sources.list.local
├── site.retry
└── site.yml
8 directories, 8 files
root@pca-test:~/workspace/test#
相关文件内容:
root@pca-test:~/workspace/test# cat site.yml
---
# pre for deploying OAT
- hosts: all
remote_user: root
# become: activate privilege escalation
become: yes
# overrides the default method set in ansible.cfg, set to sudo/su/pbrun/pfexec/doas/dzdo/ksu
become_method: sudo
# invoke setup module to gather facts before executing tasks
gather_facts: true
vars_files:
- group_vars/bootstrap.json
roles:
- pre
root@pca-test:~/workspace/test# cat roles/pre/handlers/main.yml
---
- name: update sources
#command: apt-get update -y
debug: msg="handlers update sources is triggered.."
root@pca-test:~/workspace/test# cat roles/pre/tasks/main.yml
---
- name: copy files
template:
src: "{{item.src}}"
dest: "{{item.dest}}"
owner: root
group: root
mode: 0644
with_items:
- {src: "hosts", dest: "/etc/hosts"}
- {src: "ubuntu/sources.list.local", dest: "/etc/apt/sources.list"}
- {src: "ubuntu/sources.list", dest: "/etc/apt/sources.list.bak"}
- name: debug
debug: msg="admin={{base.admin_host}}, myhostname={{ansible_hostname}}"
- name: modify parameters for hosts
command: sed -i 's/^\(127.0.1.1\).*$/\1\t{{ansible_hostname}}/g' /etc/hosts
- name: modify parameters for sources.list
command: sed -i "s/MODIFIED/{{base.admin_host}}/g" /etc/apt/sources.list
notify: update sources
root@pca-test:~/workspace/test#
目前代码只为测试,最后应当使用template来代替sed
执行结果:
root@pca-test:~/workspace/test# ansible-playbook site.yml
PLAY [all] ****************************************************************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************************************************
ok: [192.168.11.81]
ok: [192.168.11.82]
ok: [192.168.11.83]
TASK [pre : copy files] ***************************************************************************************************************************************************************
changed: [192.168.11.82] => (item={u'dest': u'/etc/hosts', u'src': u'hosts'})
changed: [192.168.11.81] => (item={u'dest': u'/etc/hosts', u'src': u'hosts'})
changed: [192.168.11.83] => (item={u'dest': u'/etc/hosts', u'src': u'hosts'})
ok: [192.168.11.81] => (item={u'dest': u'/etc/apt/sources.list', u'src': u'ubuntu/sources.list.local'})
ok: [192.168.11.82] => (item={u'dest': u'/etc/apt/sources.list', u'src': u'ubuntu/sources.list.local'})
ok: [192.168.11.81] => (item={u'dest': u'/etc/apt/sources.list.bak', u'src': u'ubuntu/sources.list'})
ok: [192.168.11.82] => (item={u'dest': u'/etc/apt/sources.list.bak', u'src': u'ubuntu/sources.list'})
ok: [192.168.11.83] => (item={u'dest': u'/etc/apt/sources.list', u'src': u'ubuntu/sources.list.local'})
ok: [192.168.11.83] => (item={u'dest': u'/etc/apt/sources.list.bak', u'src': u'ubuntu/sources.list'})
TASK [pre : debug] ********************************************************************************************************************************************************************
ok: [192.168.11.81] => {
"msg": "admin=pca-test, myhostname=pca-test"
}
ok: [192.168.11.83] => {
"msg": "admin=pca-test, myhostname=vtpm"
}
ok: [192.168.11.82] => {
"msg": "admin=pca-test, myhostname=oat-test"
}
TASK [pre : modify parameters for hosts] **********************************************************************************************************************************************
changed: [192.168.11.81]
[WARNING]: Consider using template or lineinfile module rather than running sed
changed: [192.168.11.83]
changed: [192.168.11.82]
TASK [pre : modify parameters for sources.list] ***************************************************************************************************************************************
changed: [192.168.11.81]
changed: [192.168.11.83]
changed: [192.168.11.82]
RUNNING HANDLER [pre : update sources] ************************************************************************************************************************************************
ok: [192.168.11.81] => {
"msg": "handlers update sources is triggered.."
}
ok: [192.168.11.83] => {
"msg": "handlers update sources is triggered.."
}
ok: [192.168.11.82] => {
"msg": "handlers update sources is triggered.."
}
PLAY RECAP ****************************************************************************************************************************************************************************
192.168.11.81 : ok=6 changed=3 unreachable=0 failed=0
192.168.11.82 : ok=6 changed=3 unreachable=0 failed=0
192.168.11.83 : ok=6 changed=3 unreachable=0 failed=0
root@pca-test:~/workspace/test#