1.ansible的安装

http://www.tuicool.com/wx/vUfYVfA

1)使用源码安装Python3.5

一、ansible 安装

安装支撑包

ansible 依赖于python2.6或更加高的本子、paramiko、PyYAML及Jinja2。

yum -y install lrzsz vim
net-tools gcc gcc-c++
ncurses ncurses-devel unzip
zlib-devel zlib openssl-devel
openssl

https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

tar xf Python-3.5.2.tgz -C /usr/src/

tar xvzf Python-2.7.8.tgz

./configure –prefix=/usr/local/python/

cd Python-2.7.8

make && make
install

./configure –prefix=/usr/local

ln -s /usr/local/python/bin/python3 /usr/bin/python3

make –jobs=grep processor/proc/cpuinfo | wc -l

2)使用pip3安装ansible

make install

将python头文件拷贝到规范目录,以制止编写翻译ansible时,找不到所需的头文件

/usr/local/python/bin/pip3 install
ansible

cd /usr/local/include/python2.7

ln -s /usr/local/python/bin/ansible /usr/local/bin/

cp -a ./* /usr/local/include/

备份旧版本的python,并符号链接新本子的python

2.模块简单利用

cd /usr/bin

1)ansible的配置文件

mv python python2.6

vim /etc/ansible/hosts

ln -s /usr/local/bin/python

改进yum脚本,使其指向旧版本的python,已制止其不恐怕运行

机器1 ansible_ssh_host=ip ansible_ssh_port=22 ansible_ssh_user=root

vim /usr/bin/yum

机器2 ansible_ssh_host=ip ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=666666

!/usr/bin/python –> #!/usr/bin/python2.6

1.1 编译安装

消除依赖关系

  1. ansible_ssh_host ===>主机IP
  2. ansible_ssh_port ===>ssh的默认端口
  3. ansible_ssh_user ===>ssh的用户名
  4. ansible_ssh_pass ===>ssh的用户的连接密码

yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

解压安装包

https://github.com/ansible/ansible/archive/v1.7.2.tar.gz

只要我们曾经设置了ssh免密钥了。那么就无需写密码了。比如:webA

tar xf ansible-1.5.4.tar.gz # cd ansible-1.5.4

编译安装

 
大家只要未有设置免密钥,那么就须求安装sshpass工具,并在/etc/ansible/hosts文件里写上主机的连天密码。

python setup.py build # python setup.py install

拷贝配置文件

wget -O /etc/yum.repos.d/epel.repo

mkdir /etc/ansible # cp -r examples/* /etc/ansible

1.2 rpm包安装

动用Ali云镜像源就能够,这里为了方便使用,就一向使用yum安装了。

Fedora 客户可平素安装Ansible, 但LANDHEL或CentOS客户,需求 配置 EPEL # yum
install -y epel-release # yum install -y ansible

瞩目:不相同版本的ansible的法力差别或者相当的大。

二、配置

布置文件:/etc/ansible/ansible.cfg

hostfile=/etc/ansible/hosts #点名私下认可hosts配置的职分host_key_checking = False
#不进行host_key检查,省去目标key发生变化时输入(yes/no卡塔尔(قطر‎的步子
ask_pass=True # 每回实施ansible命令是还是不是精通ssh密码
ask_sudo_pass=True # 每一遍实施ansible命令时是或不是了然sudo密码

长机清单:/etc/ansible/hosts

主程序:ansible、ansible paly-book、ansible-doc

1、就要管理的主机归入 /etc/ansible/hosts配置文件中,能够填充IP或是主机名

[WebServers] 10.10.10.3 10.10.10.4

2、.基于ssh的方式与被管理的主机实行通讯,在拘留的主机上(计划ansible的主机上)生成生龙活虎对非对称密钥,将公钥发给被处理的主机。

a,生成密钥对:ssh-keygen -t rsa

b,将密钥发放到要保管的主机:ssh-copy-id -i 10.10.10.3 或 ssh-copy-id -i
/root/.ssh/id_rsa.pub
root@10.10.10.3

3、使用ansible命令测量试验

yum -y install
sshpass

ansible all -m ping

[root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS
=> { “changed”: false, “ping”: “pong” }

三、基本接纳

1、常用命令

ansible-doc 命令:获取模块列表、模块使用格式。

ansible-doc -l :获取列表

ansible-doc -s module_name:获取钦定模块新闻

2、ansible 命令格式

ansible <host-pattern> [-f forks] [-m module_name] [-a
args]

<host-pattern>
指明管理调控主机,以方式代表照旧直接钦点ip,必得事情发生前钦定在文件中;all全数

[-f forks] 指明每批管理调节多少主机,暗许是5个主机一群次

[-m module_name] 使用何种模块操作,全数操作都急需通过模块钦点

[-a args] 指明模块专项使用参数;args 日常是
key=value格式。注:command模块的参数不是kv形式,而是一直付出要举办的吩咐。

小心:<host-pattern>
私下认可读取/etc/ansible/hosts,也得以指明自定义文件路线-iPATH,–inventory=PATH:指明使用的 host inventory文件路线;

3、常用模块介绍

1、command模块:远程主机上运营命令

例:ansible hosts -m command -a “ls /tmp” 注:command模块也足以大概。

给长途主机增加顾客、设置密码:

ansible hosts -a ‘useradd user1’

ansible hosts -a ‘echo abc | passwd –stdin user1’

2)举行ansible远程执行命令测量试验

一贯那样使用不会马到功成,只会增加顾客密码不会设置成功,不帮助管道符,上边介绍shell模块

2、shell模块:远程主机在shell进度下运营命令,援救shell性子,也支撑管道符。

ansible
-i /etc/ansible/hosts 主机或主机组 -m 钦点模块 -a 命令

ansible hosts -m shell -a ‘echo abc | passwd –stdin user1’

10.10.10.4 | SUCCESS | rc=0 >>

3、copy模块:把当下主机文件复制到远程主飞机地点置,能够钦命mode、own、group

接受ping模块用来查看服务器是或不是连接符合规律,ping模块没有必要-a内定参数

ansible hosts -m copy -a ‘src=/tmp/abc.txt dest=/root/ mode=644 owner=ansible group=root’

10.10.10.4 | SUCCESS => { “changed”: true, “checksum”:
“325287cee456533bf76025312e5d05e842cb43a9”, “dest”: “/root/abc.txt”,
“gid”: 0, “group”: “root”, “md5sum”: “1c6d47c6e4d59c630751b47fff140b89”,
“mode”: “0644”, “owner”: “ansible”, “size”: 15, “src”:
“/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source”,
“state”: “file”, “uid”: 0 }

4、cron模块:在长间隔主机钦赐crontab周期性安顿职分

minute= hour= day= month= weekday= job= name= (必需填写卡塔尔(قطر‎ state=

ansible all -m cron -a “minute=*/10 job=’/sbin/ntpdate 10.10.10.10 &
>/dev/null’ name=synctime” 可使用crontab -l查看

在管理的主机上能够去除制订的安插职务

ansible 主机1    -m ping

ansible all -m cron -a ‘state=absent name=synctome’

10.10.10.4 | SUCCESS => { “changed”: true, “envs”: [], “jobs”: []
}

5、fetch模块:和copy相反,从远程主机拷贝文件到地面主机

  1. [root@ansible .ssh]# ansible all -m ping
  2. webA | SUCCESS => {
  3. "changed": false,
  4. "ping": "pong"
  5. }
  6. webB | SUCCESS => {
  7. "changed": false,
  8. "ping": "pong"
  9. }

ansible all -m fetch -a “src=/root/abc.txt dest=/root/kel/ flat=yes”

能够不用flat=yes参数,但功效:

当dest=/root/kel/ ,abc.txt会保存在/root/kel/目录下

当dest=/root/kel ,会拷贝abc.txt文件,并取名成kel

6、file模块:file模块包罗了文件、文件夹、一级链接类的开创、拷贝、移动、删除

3)ansible模块command(不扶植管道,不指出接受)

ansible all -m file -a

 ansible all -m
command -a “pwd”

改正文件的全数组、人、权限

path=/etc/foo.conf owner=foo group=foo mode=0644

ansible all -m command -a “echo bb >>
/tmp/testansible”

操作连接的案例

src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo
state=link

-a
‘name= state={present(创设卡塔尔|absent(删除卡塔尔(英语:State of Qatar)} force=(是或不是强制操作删除家目录卡塔尔(英语:State of Qatar)system= uid= shell=
home=’

参数化案例

src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items:

  • { path: ‘x’,dest: ‘y’ } – { path: ‘z’,dest: ‘k’ }

4)ansible模块shell(支持管道,援救重定向)

选拔touch创设二个空文件并定义权限

path=/etc/foo.conf state=touch mode=”u=rw,g=w,o=r”

 ansible all -m
shell -a “echo
testansible | grep a”

touch一个空文件,并纠正权限

path=/etc/foo.conf state=touch mode=”u+w,g-w,o-rw”

7、yum模块:用于yum安装安装和卸载

 ansible all -m
shell -a “echo bb
>> /tmp/testansible”

ansible all -m yum -a “name=httpd”

8、service模块:服务管理

 ansible all -m
shell -a “cat
/etc/passwd | awk -F”:” ‘{print
$1}'”

ansible all -m service -a “name=httpd state=started/stopped enabled=yes”

9、user/group模块:user模块管理客商;group模块管理group

 5)ansible的copy模块批量下发布公文件或文件夹

ansible all -m user -a ‘name=user1 group=root’ 增添顾客,校订属组

 ansible all -m
copy -a “src=/service/scripts/test.txt
dest=/service/scripts/”

ansible all -m user -a ‘name=user1 state=absent remove=yes’ 删除客户

 ansible webB -m copy -a “src=/service/scripts/test.txt
dest=/service/scripts/”

ansible all -m group -a “name=test1 state=absent” 删除客商组

四、Playbook剧本

playbook
是ansible越来越强硬的配备处理组件,完结基于文本文件编写制定实行的八个职分,且数次重复实践。playbook协会格式为利用YAML语言来编排的。

playbook
是由叁个或四个“play”组成的列表。play的第后生可畏成效在于将优先归为豆蔻年华组的主机装扮成事情发生前经过ansible中的task定义好的剧中人物。从根本上讲,所谓的task无非是调用ansible的多少个module。将三个play协会在二个playbook中,即能够让他们联通起来按事情发生前编排的机制生效。

1、例子:

在ansible主机上的root目录下开创httpd目录,将本机的httpd.conf文件拷贝到该目录下,改进配置文件里的监听端口是8081

copy模块拷贝文件夹,假若目的路线里有与自身拷贝的公文同名文件的话,会一向覆盖指标路线下的文件

vim web.yaml

  • hosts: webservers

remote_user:root #root前不能够有空格

tasks: #职分列表

  • name:install httpd package #安装职务任职资格非要求

yum name=httpd state=present #yum后的: 删除掉

  • name:install configure file

copy src=/root/httpd/httpd.conf dest=/etc/httpd/conf

  • name:start httpd service

service name=httpd state=started

留心:yaml文件中帮衬#;下边包车型地铁操作要跟下面的name对齐。

测试:

ansible-playbook –check playbook
:只检查实验或许会时有爆发的变动,但不着实举行操作

ansible-playbook playbook :直接推行

ansible-playbook –list-hosts :列出运转职分的主机

图片 1

image.png

2、playbook介绍

设置在特定条件下接触:

a,某职责的气象在运作后为changed时,可因此“notify”通告给相应的handles;

handles:职分在特定条件下接触;选拔到其余职分的照管是被触发;

b,任务能够通过“tags”打标签,而后可在ansible-playbook命令上使用-t钦命进行调用;

参数:backup=yes
===>意思是,要是目的路线下,有与本身同名但差异内容的公文时,在覆盖前,对指标文件先实行备份。

ansible webB -m copy -a “src=/service/scripts/
dest=/service/scripts/
backup=yes”

6)ansible的script模块批量周转脚本

ansible all   -m script -a “/root/service/mysql/auto_mysql.sh”

在内定的机器上推行本地脚本

7)service:

-a ‘name= state={started|stopped|restarted} enabled=(是还是不是开机自动运行卡塔尔(قطر‎runlevel=’ [root@localhost ~]# ansible all -m service -a ‘name=httpd
state=started’

3.变量连串:

1卡塔尔(قطر‎facts:由长途主机发回的主机特有的属性新闻,那几个新闻被保存在ansible变量中;无须表明,可直接调用;

2卡塔尔(قطر‎自定义变量: 通过命令行传递:ansible-playbook test.yml –extra-vars
“host=www user=test” 通过roles传递

3卡塔尔主机变量:定义在inventory中的主机之后的变量;直接传送给单个主机的变量

例子:

[root@localhost~]# vim useradd.yml

  • hosts: websrvs
    remote_user: root
    vars:
    username: testuser
    password: xuding
    tasks:
    -name: add user
    user: name={{ username }} state=present
    -name: set password
    shell: /bin/echo {{ password }} |/usr/bin/passwd –stdin {{ username }}

|–extra-vars=VA福特ExplorerS} 变量的再次赋值调用方法

ansible-playbookuseradd.yml –extra-vars “username=ubuntu”

4)playbook— tasks

规格测验:

在某task前面增添when子句就能够达成标准测量试验功效;when语句援助Jinja2语法;
实例:那时候RedHat连串系统时候调用yum安装

例子:

-name: install web server package

yum: name=httpd state=present

when: ansible_os_family == “RedHat”

 item

在task中调用内置的item变量;在某task后边使用with_items语句来定义成分列表;

-name: add four users

user: name={{ item }} state=present

with_items:

-testuser1

-testuser2

-testuser3

-testuser4

细心:迭代中,列表中的各个成分得认为字典格式;

实例:

-name: add two users

user: name={{ item.name }} state=present groups={{ item.groups }}

with_items:

– { name: ‘testuser5’, groups: ‘wheel’ }

– { name: ‘testuser6’, groups: ‘root’ }

5)handlers:处理器;触发器

唯有其关切的原则满足时,才会被触发试行的任务;
实例:配置文件发出变动触发重启服务

-hosts: websrvs
remote_user: root
tasks:
-name: install httpd
yum:name=httpd state=present
-name: install config file
copy: src=/root/httpd.conf   dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
-name: start httpd service
service: name=httpd state=started
handlers:
-name: restart httpd
service: name=httpd state=restarted

 

 

 

4.ansible-playbook的伊始使用

着力成分

Tasks任务、Variables变量、Templates模板、Handlers处理器、Roles角色

playbook的应用,playbook能够把ansible的模块举办整合

cat test_shell.yaml  #playbook的执行模板

  1. ---         #开头三个小-开头
  2. - hosts: webB
  3. tasks:
  4. - name: test
  5. shell: echo "welcome to yunjisaun" >> /tmp/username
  6. - name: test2
  7. shell: echo "welcome to yunjisuan" >> /tmp/username
  8.      – name: install
    httpd
  9.        yum: 
    name=httpd
    state=present
  10.      – name: start
    httpd
  11.        service:
    name=httpd  state=started
    enable=true
  12. 模板说明:
  13. ---  #开头必须有三个小-,顶格写
  14. - hosts:   #正文配置代码的第一级,必须有两个空格(-占一个空格位)
  15. - host: webB   #webB是host参数的值,值和hosts:之间要有一个空格
  16. tasks:        #tasks:表示接下来要执行的具体任务
  17. - name:     #相对于tasks再多缩进两个格(-占一个空格位),表示属于tasks的下一级
  18. - name: test  #test只是要执行的具体命令的名字可以随便写。name:后还是有一个空格要注意
  19. shell:  #表示调用shell模块执行命令相对于tasks仍旧要多缩进两个空格
  20. shell: echo "xxx" >> xxx     #shell:后边还是要有个空格,需要注意。

实施playbook配置文件,ansible-playbook test_shell.yaml #实施playbook配置文件

实例:用ansible-playbook,在两台机械上自动化陈设mysql 数据库

1)策动三台Linux,个中大器晚成台设置好ansible,三台机器相互衔接

2)准备.yaml文件,setup.yaml


  –
hosts: all                                                                               #hosts文件中全部主机
   
vars:                                                                                      #概念变量
    – dst:
“/service/”                                                                     #变量名字为dst
   
tasks:                                                                                   
# 任务
    – name: cp cmake
mysql                                                       #首先个任务名
      copy: src=/root/service/mysql/  dest={{ dst
}}                      #拷贝MySQL下的文本到变量dst中

      notify:  # 假若copy实施完事后~/hosts.dest文件发送了变通,则实践

      – clear copy  # 调用handler
      handlers:
      – name: clear copy
        shell: ‘mv ~/hosts.dest hosts.del’  # 假装删除
    – name: install
mysql                                                             #第三个义务名
      script:
/root/service/mysql/auto_mysql.sh                           #实行脚本模块, 后面跟脚本路线
      register:
print_result                                                            #打字与印刷实施结果
    – debug: var=print_result

3)寻思脚本文件auto_mysql.sh 

#!/bin/bash
#in ansible use
#install myysql
#20180731
mysql_tar=”mysql-5.6.40.tar.gz”
mysql_dir=”mysql-5.6.40″
cmake_tar=”cmake-2.8.6.tar.gz”
cmake_dir=”cmake-2.8.6″
dest=”/service/”

#删旧版本
rpm -e mariadb-libs  –nodeps &>/dev/null
rpm -e mysql mysql-server –nodeps &>/dev/null
#关防火墙
rpm -q make gcc gcc-c++ &>/dev/null
if [ $? -ne 0 ];then
 yum -y install  make gcc gcc-c++ &>/dev/null
fi
#安装cmake

cd $dest
tar xf $cmake_tar -C /usr/src/ &>/dev/null
cd /usr/src/$cmake_dir
./configure &>/dev/null && make &>/dev/null  && make install
&>/dev/null
#删除包
rm -fr /usr/src/$cmake_dir &>/dev/null
cd $dest
rm -fr $cmake_tar
#安装正视
yum -y install ncurses ncurses-devel &>/dev/null
groupadd mysql &>/dev/null
useradd -M -s /sbin/nologin  -g mysql mysql &>/dev/null
#解压源码包

tar xf $mysql_tar -C /usr/src/ &>/dev/null
#安装
cd /usr/src/$mysql_dir
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all  -DSYSCONFDIR=/etc &>/dev/null &&make
&>/dev/null &&make install &>/dev/null
#优化
cd /usr/local/mysql
cp support-files/my-default.cnf  /etc/my.cnf &>/dev/null
#设置数量

yum -y install autoconf &>/dev/null &&
/usr/local/mysql/scripts/mysql_install_db  –basedir=/usr/local/mysql 
–datadir=/usr/local/mysql/data  –user=mysql &>/dev/null
echo “PATH=$PATH:/usr/local/mysql/bin”>>/etc/profile
source  /etc/profile &>/dev/null
chown -R mysql:mysql /usr/local/mysql/ &>/dev/null
cp support-files/mysql.server  /etc/init.d/mysqld &>/dev/null
chmod +x /etc/init.d/mysqld
sed -i -e ‘1a #chkconfig: 35 50 45’ /etc/init.d/mysqld
cd $dest
rm -fr /usr/src/$mysql_dir &>/dev/null
rm -fr $mysql_tar

#开发银行服务

/usr/sbin/chkconfig –add mysqld
/etc/init.d/mysqld start

3)考虑好安装包

cmake-2.8.6.tar.gz  
 mysql-5.6.40.tar.gz平放与剧本同一目录下

4)ansible-playbook setup.yaml

剩余的时间,你可以喝杯茶了,休憩一下。两台机械配置产生,登陆下机器看是还是不是服务运转

mysql -uroot  -p123456  -h ip

中标登入。