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# 
Ansible是一个开源的IT自动化工具,它可以用于应用部署、任务自动化、配置管理等,是自动化运维领域非常受欢迎的工具之一。Ansible使用Python编写,它的特点是没有客户端代理,通过SSH通信来管理配置节点,配置简单,学习曲线相对平缓。 入门Ansible通常需要以下几个步骤: 1. 安装AnsibleAnsible可以在多种操作系统上运行,比如Linux、Unix或Mac OS X。大多数Linux发行版都可以通过包管理器安装Ansible,例如在Ubuntu上可以通过`apt`安装,在CentOS上可以通过`yum`安装。 2. 配置Ansible:配置`/etc/ansible/hosts`文件,这是Ansible的inventory文件,用于定义要管理的主机组和主机。也可以使用其他方式来指定inventory,如环境变量、命令行参数等。 3. 编写Playbook:Playbook是Ansible进行自动化任务的配置文件,使用YAML语法编写。它定义了任务列表、变量、条件和角色等,可以完成复杂的部署和配置任务。 4. 运行Ansible:使用`ansible-playbook`命令执行编写的Playbook文件,就可以按照预定的配置自动对目标主机进行操作。 5. 学习模块的使用:Ansible有一个非常丰富的模块库,涵盖了文件传输、用户管理、软件包安装、服务控制等方方面面,学习这些模块的使用是掌握Ansible的关键。 6. 测试和调试:可以通过`ansible`命令对单个任务进行测试,也可以在Playbook中使用`debug`模块输出变量值进行调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值