ansible入门

安装

直接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# 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值