Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1741761
  • 博文数量: 297
  • 博客积分: 285
  • 博客等级: 二等列兵
  • 技术积分: 3006
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-06 22:04
个人简介

Linuxer, ex IBMer. GNU https://hmchzb19.github.io/

文章分类

全部博文(297)

文章存档

2020年(11)

2019年(15)

2018年(43)

2017年(79)

2016年(79)

2015年(58)

2014年(1)

2013年(8)

2012年(3)

分类: LINUX

2016-08-07 13:41:10

对于chef,puppet, ansible 这种工具,我一向的态度都是这些都是重复造出来的轮子。
这两天使用了下ansible,记录下心得。
1. ubuntu 上安装ansible。

点击(此处)折叠或打开

  1. apt-get install ansible sshpass
  2. #允许本地root 登陆
  3. passwd root 
  4. vim /etc/ssh/sshd_config
  5. 修改内容为
  6. #PermitRootLogin without-password
    PermitRootLogin yes
  7. #重启ssh 
  8. service ssh restart 
2. ansible 的配置文件查找顺序

点击(此处)折叠或打开

  1. ANSIBLE_CONFIG   环境变量
  2. ./ansible.cfg    当前目录ansible.cfg
  3. ~/.ansible.cfg   家目录ansible.cfg
  4. /etc/ansible/ansible.cfg   /etc/ansible/这个目录通过yum/apt安装会自动创建
3. 
ansible 默认用户使用(key-based) 的ssh 登陆。首先添加host group.

点击(此处)折叠或打开

  1. vim /etc/ansible/hosts
  2. [hosts]
  3. 10.14.10.84
  4. 10.14.10.83
执行命令:ansible hosts -"free -m" -u root
常见的错误是

点击(此处)折叠或打开

  1. FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. 
  2.  Please add this host's fingerprint to your known_hosts file to manage this host.
碰到这个可以先使用下面的命令添加key.

点击(此处)折叠或打开

  1. ansible hosts -a "free -m" -u root
  2. 然后再使用 --ask-pass (-k flag).
  3. ansible hosts -a "free -m" -u root -k 
  4. #ansible 默认-m的模块是'command', 可以省略,上面的命令等同于下面。
  5. ansible hosts -m shell "free -m" -u root 
  6. ansible hosts -m shell "free -m" -u root -k 

第二种方法则是,我们可以直接修改ansible.cfg, 将host_key_checking 设置为False.

点击(此处)折叠或打开

  1. vim /etc/ansible/ansible.cfg
  2. # uncomment this to disable SSH key host checking
  3. host_key_checking = False
4.  apply playbook to rhel .
写一个playbook, yaml 的语法其实挺恶心的,太多都需要空格了。容易看,不容易写。
能看的出来这个playbook就是装apache,然后start httpd 服务,最下面的则是debug 用的。

点击(此处)折叠或打开

  1. vim rhel_pb.yml
  2. - hosts: rhel7
  3.   remote_user: root
  4.   tasks:

  5.   - name: Install httpd package
  6.     yum: name=httpd state=latest
  7.     sudo: yes

  8.   - name: Starting httpd service
  9.     service: name=httpd state=started
  10.     sudo: yes
  11.   
  12.   - name: Show how debug works
  13.     debug: msg={{ ansible_distribution }}

在/etc/ansible/hosts 添加 rhel7.

点击(此处)折叠或打开

  1. [rhel7]
  2. 10.14.10.84
apply playbook

点击(此处)折叠或打开

  1. ansible-playbook -D rhel_pb.yml -k
如果需要查看更多debug信息,可以加上-v,-vv,-vvv . 

点击(此处)折叠或打开

  1. ansible-playbook -D rhel_pb.yml -k -v
  2. ansible-playbook -D rhel_pb.yml -k -vv
  3. ansible-playbook -D rhel_pb.yml -k -vvv
list all the tasks in the playbook 

点击(此处)折叠或打开

  1. ansible-playbook -D rhel_pb.yml -k -v --list-tasks
  2.   play #1 (rhel7):
        Install httpd package
        Starting httpd service
        Show how debug works
--start-at : 将会从指定的任务开始执行。例如我们从'Starting httpd service'开始执行

点击(此处)折叠或打开

  1. ansible-playbook -D rhel_pb.yml -k --start-at-task='Starting httpd service'
--step: 一步一步的执行

点击(此处)折叠或打开

  1. ansible-playbook -D rhel_pb.yml -k --step
使用嵌套的playbook. 

点击(此处)折叠或打开

  1. vim apache.yml
  2. ---
  3. - hosts: hosts
  4.   remote_user: root

  5.   vars:
  6.     - package_name: 'httpd'

  7.   tasks:
  8.     - include: install_apache.yml

  9.     - name: Check apache service
  10.       service: name={{ package_name }} state=started
  11.       sudo: yes
vars: 下面的语句设置了一个变量 package_name.

点击(此处)折叠或打开

  1. vim install_apache.yml
  2. - set_fact: package_name='httpd'
  3.   when: ansible_os_family=='Redhat'

  4. - set_fact: package_name='apache2'
  5.   when: ansible_os_family=='Debian'

  6. - name: Install httpd package
  7.   yum: name=httpd state=latest
  8.   sudo: yes
  9.   when: ansible_os_family=='Redhat'

  10. - name: Install apache2 package
  11.   apt: name=apache2 state=latest
  12.   sudo: yes
  13.   when: ansible_os_family=='Debian'

apply apache.yml 就可以了

点击(此处)折叠或打开

  1. ansible-playbook -D apache.yml -k
playbook的内容比较self-explanation, 对于debian OS,使用apt,对于redhat ,则使用 yum. 模块, ansible 的模块众多,据说有100多个。
下面的命令可以查看ansible 的模块。

点击(此处)折叠或打开

  1. ansible-doc -l
后记: 我不喜欢chef, puppet, 我对于ansible 所说的简单,易用也持怀疑态度。
根据我的观察,很大可能 ansible 也只是再把简单的东西复杂化,又是个重复造轮子造出来的东西。
如果不用yum,不用apt, 我自己编译呢? 对于希望一步步控制细节的人来说,configuration-manager 这些东西都是在把简单的东西复杂化。

参考: 
learning ansible 


阅读(735) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~