1.ansible的安装

ansible自动化运转为工人身份具使用详解

一、ansible简介

1.ansible

ansible是新面世的自动化运转工具,基于Python研究开发。糅合了许多众人周知运转为工人身份具的优点落成了批量操作系统配置、批量先后的配备、批量运作命令等功能。仅需在治本工作站上安装ansible程序配置被管理控制主机的IP消息,被管理控制的主机无客户端。ansible应用程序存在于epel(第叁方社区)源,信赖于广大python组件

参考站点:

澳门金沙国际 1

2.ansible特性

模块化设计,调用特定的模块来形成一定任务,本身是骨干器件,短小精悍;

依照Python语言达成,由Paramiko(python的2个可并发连接ssh主机功用库),
PyYAML和Jinja2(模板化)多少个第3模块完毕;

配备不难,agentless无客户端工具;

基本情势工作;

支持自定义模块功效;

援救playbook剧本,三番五次职务按顺序设置顺序实现;

期望各样命令具有幂等性:

3.ansible架构

ansible core:ansible本身核心模块

host inventory:主机库,定义可管理控制的主机列表

connection plugins:连接插件,一般暗中同意基于ssh协议连接

modules:core modules(自带模块)、custom modules(自定义模块)

playbooks:剧本,根据所设定编排的各类执行到位安顿职分

澳门金沙国际 2

4.配备文件:

(1)ansible应用程序的主配置文件:/etc/ansible/ansible.cfg

(2) Host Inventory定义管理控制主机:/etc/ansible/hosts

依据INI风格;中括号中的字符是组名;二个主机可同时属于多少个组;

示例:

# Ex 1: Ungrouped hosts, specify before any
groupheaders.直接在任何组的头顶前边内定,不属于其余组的主机

green.example.com

blue.example.com

192.168.100.1

192.168.100.10

# Ex 2: A collection of hosts belonging to the’webservers’
group;一批主机属于3个组,例如定义为’webservers’的组

[webservers]

alpha.example.org

beta.example.org

192.168.1.100

192.168.1.110

小心:暗许是以root用户执行,可是依照ssh连接操作要再三输入密码,为方便能够行使基于ssh密钥形式开始展览求证

贰 、ansible应用程序命令

1.ansible-doc发令:获取模块列表,及模块使用格式;

ansible-doc-l:获取列表

ansible-doc-s module_name:获取钦点模块的行使音讯

2.ansible命令格式

ansible [-f forks][-m module_name] [-a args]

指明管控主机,以模式形式表示或者直接给定IP,必须事先定义在文件中;all设置所有

[-f forks]

指明每批管控多少主机,默认为5个主机一批次

[-m module_name]

使用何种模块管理操作,所有的操作都需要通过模块来指定

[-a args]

指明模块专用参数;args一般为key=value格式

注意:command模块的参数非为kv格式,而是直接给出要执行的命令即可;

留意:私下认可读取/etc/ansible/hosts,也足以指明自定义文件路径

-iPATH, –inventory=PATH:指明使用的host inventory文件路径;

常用模块(module_name):

1)command:暗中认可模块,可归纳。在长途主机上拓展操作命令

-a ‘COMMAND’

留神:comand模块的参数非key=value格式,直接提交要推行的指令

[[email protected] ~]# ansible all -m command -a ‘ifconfig’

2)user:

-a’name= state={present(创立)|absent(删除)}
force=(是或不是强制操作删除家目录)system= uid= shell=home=’

[[email protected] ~]# ansible all -m user -a ‘name=ansible
state=present’

3)group:

-a’name=state={present|absent} gid= system=(系统组)’

[[email protected] ~]# ansible all -m group -a ‘name=mygroup
state=presentsystem=true’

4)cron:

-a ‘name=state= minute= hour=day= month= weekday=job=’

[[email protected] ~]# ansible all -m cron -a ‘name=’Time’
state=presentminute=’*/5′ job=’/usr/sbin/ntpdate 172.168.0.1 &>
/dev/null”

5)ping:

无参数

[[email protected] ~]# ansible all -m ping

6)file:文件管理

-a’path= mode= owner=group=state={file|directory|link|hard|touch|absent}
src=(link,链接至何处)’

[[email protected] ~]# ansible all -m file -a
‘path=/tmp/testdirstate=directory’

[[email protected] ~]# ansible all -m file -a ‘path=/tmp/test.txt
state=touchmod=600 owner=user1’

7)copy:

-a’dest=(远程主机上路线) src=(本地主机路径) content=(间接指明内容)owner=
group= mode=’

[[email protected]]# ansible web -m copy -a
‘src=/etc/yum.repos.d/aliyun.repodest=/etc/yum.repos.d/’

8)template

-a ‘dest=src=\’#\'” content= owner=group= mode=’

9)yum:

-a’name=
conf_file=(指明配置文件)state={present|latest|absent}enablerepo=disablerepo=’

[[email protected] ~]# ansible all -m yum ‘name=httpd
state=present’

10)service:

-a’name=state={started|stopped|restarted}enabled=(是还是不是开机自动运转)
runlevel=’

[[email protected] ~]# ansible all -m service -a ‘name=httpd
state=started’

11)shell:

-a’COMMAND’ 运行shell命令

[[email protected] ~]# ansible all -m shell -a echo “123456789”
|passwd –stdin user1′

12)script:

-a’/PATH/TO/SC凯雷德IPT’运转脚本

[[email protected] ~]# ansible all -m script -a ‘/tmp/a.sh’

13)setup:获取内定主机的facts变量;

澳门金沙国际 3

三、Playbooks剧本

1.playbook企业格式:YAML语言格式

playbooks是ansible更强大的配备管理组件,达成基于文本文件编写制定执行的多少个任务,且多次重复执行

(1)YAML简介

YAML:YAML Ain’t Markup Language; Yet Another Markup Language;

好像于半结构化数据,表明式配置;可读性较高的用来抒发资料体系的格式,易于与脚本语言交互

官方站点:

(2)语法格式

1)任何书记结构都用缩进来标识,能够嵌套

2)每一行是二个键值数据key:value,冒号隔离。若想在一行标识要求用{
}和,分隔格式

3)列表用 – 标识

2.inventory参数:主机库ssh参数设置

ansible基于ssh连接inventory中钦定的长途主机时,将以此处的参数钦点的本性实行;

ansible_ssh_port

指定ssh端口

ansible_ssh_user

指定ssh用户

ansible_ssh_pass

指定ssh用户登录是认证密码,明文密码不安全

ansible_sudo_pass

指明sudo时候的密码

实例:

[websrvs]

192.168.0.101 ansible_ssh_port=22 ansible_ssh_user=root
ansible_ssh_pass=xuding

192.168.0.102

留意:在/etc/ansible/hosts中央直机关接定义连接时候的密码不安全,一般建议依据ssh的密钥认证格局贯彻

3.playbooks

(1)主旨因素

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

(2)playbooks中定义任务:

– name: task description注释描述音讯

module_name: module_args 注解模块:定义ansible模块参数

澳门金沙国际 4

(3)ansible-playbook执行命令:

ansible-playbook … [options]

澳门金沙国际 5

4.playbook— 变量

(1)变量命名:字母、数字和下划线组成,仅能以字母开首;

(2)变量种类:

1)facts:由长途主机发回的主机特有的习性消息,这几个音信被保存在ansible变量中;无须表明,可间接调用;

2)自定义变量:

因此命令行传递:ansible-playbook test.yml –extra-vars “host=www
user=test”

通过roles传递

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

实例:

[[email protected] ~]# vim /etc/ansible/hosts中向来定义在主机之后

[web]

192.168.0.101 host=mail

192.168.0.102

192.168.0.103

4)组变量:定义在inventory中的组上的变量(例如在暗中同意的文书/etc/ansible/hosts上编写制定)

[group_name:vars]

var1=value

var2=value

注意:组名要先期存在,实例如下:

[websrvs]

192.168.0.101

192.168.0.102

[websrvs:vars]

host=mail

变量使用示例:

[[email protected]~]# vimuseradd.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 }}

注释:

1) {{ }} 调用变量

2) #ansible-playbook/PATH/TO/SOME_YAML_FILE {
-eVA昂CoraS|–extra-vars=VA奥迪Q7S} 变量的再次赋值调用方法

[[email protected] ~]# ansible-playbookuseradd.yml –extra-vars
“username=ubuntu”

5.playbook— tasks

(1)条件测试:

在某task后边添加when子句即可兑现标准化测试成效;when语句支持Jinja2语法;

实例:当时RedHat连串系统时候调用yum安装

tasks:

-name: install web server package

yum: name=httpd state=present

when: ansible_os_family == “RedHat”

(2)迭代:item

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

tasks:

-name: add four users

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

with_items:

-testuser1

-testuser2

-testuser3

-testuser4

瞩目:迭代中,列表中的每种成分得以为字典格式;

实例:

-name: add two users

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

with_items:

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

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

6.playbook— handlers:处理器;触发器

唯有其关心的标准化满足时,才会被触发执行的职分;

实例:配置文件发出改变触发重启服务

-hosts: websrvs

remote_user: root

tasks:

-name: install httpd

yum:name=httpd state=present

-name: install config file

Ansible权威指南笔记,ansible自动化运转为工人身份具使用详解。copy: src=/root/httpd.confdest=/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

7.playbook模板

templates:

用于转移文书文件(配置文件);模板文件中可应用jinja2表明式,表明式要定义在{{}},也足以总结地仅执行变量替换;

roles:

roles用于落到实处“代码复用”;

roles以特定的层系型格式组织起来的playbook元素(variables,tasks,
templates, handlers);

可被playbook以role的名字间接实行调用;

用法:在roles/下建立[group_name]子目录,并非全部都要创建;例如:

/etc/ansible/roles/(在/etc/ansible/ansible.cfg定义roles目录)

webserver/

files/:此角色中用到的持有文件均放置于此目录中;

templates/:Jinja2模板文件存放地点;

tasks/:职务列表文件;可以有多个,但起码有三个名为main.yml的文本;

handlers/:处理器列表文件;能够有两个,但至少有叁个称作main.yml的文本;

vars/:变量字典文件;能够有多少个,但最少有八个名叫main.yml的文本;

meta/:此剧中人物的非正规设定及依赖关系;

一 、ansible简介
1.ansible
ansible是新出现的自动化运转为工人身份具,基于Python研究开发。糅合了广大老牌运营工具的帮助和益处实…

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

#

1)使用源码安装Python3.5

一、ansible 安装

在托管节点上安装

安装支撑包

ansible 注重于python2.6或更高的本子、paramiko、PyYAML及Jinja2。

python

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

ansible myhost –sudo -m raw -a “yum install -y python2
python-simplejson”

./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

ansible

2)使用pip3安装ansible

make install

将python头文件拷贝到标准目录,以制止编译ansible时,找不到所需的头文件

#python

/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

pyenv

2.模块简单利用

cd /usr/bin

1)ansible的配备文件

mv python python2.6

virutalenv

vim /etc/ansible/hosts

ln -s /usr/local/bin/python

修改yum脚本,使其指向旧版本的python,已幸免其无法运转

etc/ansible: ansible.cfg hosts

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

vim /usr/bin/yum

#ansible.cfg

机器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 编写翻译安装

消除重视关系

inventory

  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

library

一旦大家早已设置了ssh免密钥了。那么就不要求写密码了。例如:webA

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

编写翻译安装

module_name

 
大家假设没有安装免密钥,那么就必要设置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, 但KugaHEL或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

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

[WebServers] 10.10.10.3 10.10.10.4

二 、.基于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

三 、使用ansible命令测试

ansible all -m ping -u root –sudo

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” }

叁 、基本采纳

一 、常用命令

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

ansible-doc -l :获取列表

ansible-doc -s module_name:获取内定模块音信

② 、ansible 命令格式

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

<host-pattern>
指明管理控制主机,以情势表示如故直接钦赐ip,必须先行钦点在文书中;all全数

[-f forks] 指明每批管理控制多少主机,默认是多个主机一批次

[-m module_name] 使用何种模块操作,全部操作都亟需经过模块钦定

[-a args] 指明模块专用参数;args 一般是
key=value格式。注:command模块的参数不是kv方式,而是直接提交要实行的一声令下。

瞩目:<host-pattern>
默许读取/etc/ansible/hosts,也得以指明自定义文件路径
-iPATH,–inventory=PATH:指明使用的 host inventory文件路径;

三 、常用模块介绍

① 、command模块:远程主机上运维命令

例:ansible hosts -m command -a “ls /tmp” 注:command模块也得以简单。

给长途主机添加用户、设置密码:

ansible hosts -a ‘useradd user1’

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

ansible all -m copy -a “src=/etc/fstab dest=/tmp/fstab owner=root
group=root

2)实行ansible远程执行命令测试

平昔那样使用不会中标,只会加上用户密码不会设置成功,不支持管道符,上面介绍shell模块

贰 、shell模块:远程主机在shell进度下运作命令,协理shell特性,也辅助管道符。

mode=644 backup=yes”

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

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

10.10.10.4 | SUCCESS | rc=0 >>

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

ansible-galaxy init,install,list,remove

行使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 }

四 、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-pull

ansible 主机1    -m ping

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

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

⑤ 、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

⑥ 、file模块:file模块包涵了文件、文件夹、一级链接类的创办、拷贝、移动、删除

ansible-doc -l

3)ansible模块command(不帮助管道,不提议接纳)

ansible all -m file -a

ansible-doc ping

 ansible all -m
command -a “pwd”

修改文件的拥有组、人、权限

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

ansible-playbook playbook.yml

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

操作连接的案例

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

ansible-vault encrypt/decrypt xx.yml 

-a
‘name= state={present(创造)|absent(删除)} force=(是还是不是强制操作删除家目录)
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创造3个空文件并定义权限

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

########hosts

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

touch八个空文件,并修改权限

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

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

192.168.1.1

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

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

八 、service模块:服务管理

ntp.mmm.com:222

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

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

玖 、user/group模块:user模块管理用户;group模块管理group

[xxx]

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

ansible all -m user -a ‘name=user1 group=root’ 添加用户,更改属组

xx[10:20].xx.com

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

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

[xxx:vars]

 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更有力的布置管理组件,完成基于文本文件编写执行的四个职分,且数1捌回重复执行。playbook协会格式为利用YAML语言来编排的。

playbook
是由1个或多少个“play”组成的列表。play的主要性职能在于将先期归为一组的主机装扮成事先经过ansible中的task定义好的角色。从根本上讲,所谓的task无非是调用ansible的叁个module。将八个play组织在一个playbook中,即能够让他们联通起来按事先编排的体制生效。

1、例子:

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

xx=aa

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 :列出运营职分的主机

澳门金沙国际 6

image.png

2、playbook介绍

设置在特定条件下接触:

a,某任务的景况在运作后为changed时,可通过“notify”公告给相应的handles;

handles:职分在特定条件下接触;接收到其余职分的通告是被触发;

b,职责能够通过“tags”打标签,而后可在ansible-playbook命令上运用-t钦命举行调用;

cc=bb

参数:backup=yes
===>意思是,假使目的路径下,有与本人同名但不一样内容的文本时,在覆盖前,对目的文件先举办备份。

[webservers:children]

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

xx

6)ansible的script模块批量运作脚本

cc

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

ansible_ssh_host

在指定的机器上举行本地脚本

ansible_ssh_port

7)service:

ansible_ssh_user

-a ‘name= state={started|stopped|restarted} enabled=(是不是开机自动运维)
runlevel=’ [root@localhost ~]# ansible all -m service -a ‘name=httpd
state=started’

ansible_ssh_pass

3.变量类别:

ansible_ssh_private_key_file=

1)facts:由长途主机发回的主机特有的质量新闻,这个消息被保存在ansible变量中;无须评释,可一贯调用;

############################

2)自定义变量: 通过命令行传递:ansible-playbook test.yml –extra-vars
“host=www user=test” 通过roles传递

ansible webs -m service -a “name=httpd state=restarted”

3)主机变量:定义在inventory中的主机之后的变量;间接传送给单个主机的变量

ansible “webs1:webs2”

例子:

ansible “webs1:!xxx”

[root@localhost~]# vim useradd.yml

ansible “webs1:&xx:!xxxx”

  • 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 }}

ansible ~web1*    #

|–extra-vars=VA本田UR-VS} 变量的再一次赋值调用方法

正则匹配主机

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

###################################

4)playbook— tasks

ansible -i inventory

规范测试:

-f

在某task后边添加when子句即可完结规范测试成效;when语句帮衬Jinja2语法;
实例:当时RedHat体系系统时候调用yum安装

线程数

例子:

–private-key

-name: install web server package

-m

yum: name=httpd state=present

-M

when: ansible_os_family == “RedHat”

模块路径

 item

-k

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

证实密码

-name: add four users

-K sudo

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

密码

with_items:

-o

-testuser1

出口成一行

-testuser2

-s  sudo

-testuser3

-T

-testuser4

时间

小心:迭代中,列表中的每一种成分得以为字典格式;

-B

实例:

后台执行命令的时间

-name: add two users

-u

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

用户

with_items:

-l

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

钦定运营的主机

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

###################

5)handlers:处理器;触发器

ansible proxy -f 5 -m ping

只有其关心的口径知足时,才会被触发执行的职务;
实例:配置文件发出改变触发重启服务

ansible proyx -s -m command -a “hostname”

-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

ansible proxy –list

 

time ansible 192.168.1.1 -B 5 -P 2 -T 2 -m command -a ‘sleep 20’ -u root
##

 

 

192.168.1.1

4.ansible-playbook的开首使用

以用户

骨干元素

root

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

执行

playbook的利用,playbook能够把ansible的模块进行重组

sleep 20

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:后边还是要有个空格,需要注意。

#2s

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

,且设置为后台运转格局,执行进程每

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

2s

1)准备三台Linux,当中一台设置好ansible,三台机械互相衔接

出口三遍进程,如

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

5s


还未履行完则结束该职务。

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

ansible apps -a “df -lh”

      notify:  # 假使copy执行完未来~/hosts.dest文件发送了扭转,则进行

ansible apps -m shell -a “free -m”

      – 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

ansible apps -m yum -a “name=redhat-lsb state=present”

3)准备脚本文件auto_mysql.sh 

ansible apps -m yum -a “name=ntp state=present”

#!/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/”

ansible apps -m service -a “name=ntpd state=started enabled=yes”

#删旧版本
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

ansible apps -m command -a “service ntpd status” –limit “192.168.1.22”

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

增加产量用户

#起步服务

ansible db -m user -a ‘name=dba shell=/bin/bash groups=admins,dbagroup

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

append=yes home=/home/dba/ state=present’

3)准备好安装包

ansible db -m user -a ‘name=dba groups=ddd append=no’  #

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

变动用户属性

4)ansible-playbook setup.yaml

ansible db -m user -a ‘name=dba state=absent remove=yes’  #

结余的年华,你能够喝杯茶了,休息一下。两台机器配置到位,登录下机器看是否服务运营

除去用户

mysql -uroot  -p123456  -h ip

ansible db -m user -a “name=tom shell=/bin/bash password=to32cxooiudsof

中标登录。

update_password=always” ##

 

变更密码,密码必须协调

 

sha-512

 

生成

 

ansible xx -m win_user -a “name=stanly password=xxxxxxx
group=Administrators” 

 

##win

 

用户

 

ansible xx -m mysql_user -a “login_host=localhost
login_password=123456

 

login_user=root name=stanly password=123456 priv=zabbix.*:ALL
state=present”

 

###

 

新增

 

mysql

 

用户

 

###########################################################

 

##yaml

 

语法

 

无须采取

 

tab

同等阶层的因素左对齐

##########

########playbook

语法

—  #

开头

– hosts: webservers

vars:

http_pot: 80

max_clients: 222

remote_user: root

tasks:

– name: ensdlfjsd

yum: pkg=httpd state=latest

– name: xx

template: src=/srv/httpd.j2 dest=/etc/httpd.conf

notify: restart apache

– name: xx

service: name=httpd state=started

handlers:

– name: restart apache

service: name=httpd state=restarted

#################################

############shellplaybook


– hosts: all

tasks:

– name: “setup apache”

command: yum install –quiet -y httpd httpd-devel

– name: “copy configure”

command: cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf

command: cp /tmp/httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf

command: service httpd start

command: chkconfig httpd on

####################################################ansible-playbook

./playbook.yml

ansible-playbook –limit xx.com

ansible-playbook –list-hosts  #

列出怎么样主机受影响

–remote-user=tom

#########node.js

不全


– hosts: all

tasks:

– name: gpg

rpm_key: “key={{ item }} state=present”

with_items:

– “”

– name: install remi repo

command: “rpm -Uvh –force {{ item.href }} creates={{ item.creates }}”

with_items:

– href: “”

– creates: “/etc/yum.repos.d/remi.repo”

yum: name=epel-release state=present

service: name=iptables state=stopped

service: name=firewalld state=stopped

yum: name=npm state=present enablerepo=epel

command: npm config set registry

command: npm config set strict-ssl false

npm: name=forever global=yes state=latest

file: “path={{ node_apps_location }} state=directory”

copy: “src=app dest={{ node_apps_location }}”

npm: “path={{ node_apps_location }}/app”

########################################################ansible-playbook

–extra-vars=”node_apps_location=/usr/local/opt/node”

###ansible

设置配备

drupal

playbook-to-automate-drupal-installation-on-ubuntu-14-04/

###ansible

安装配置

tomcat  

###ansible

设置配置

JDK 

###handler

模块

handlers:

– name: restart apache

service: name=apache2 state=restarted

notify: restart memcached

– name: restart memcached

service: name=memcached state=restarted

notify:

– restart apache

– restart memcached

###################

ansible-playbook xx.yml –extra-vars “foo=bar”

ansible-playbook xx.yml –extra-vars “@xx.json”

#

长机变量

host1 xx=bar  {{ hostvars[‘host1’][‘xx’] }}

#gather_facts: no

##

在长途主机上

/etc/ansible/xx.fact

,则

setu

模块将重回

fact

的内容

[users]

admin=xx

###

##

原则判断

– name:

[task xxx]

when: software_version.split(‘.’)[0] == ‘4’

##

##register

– command: my-app –status

register: myapp_result

-command: do-something-to-my-app

when: “‘ready’ in myapp_result.stdout”

#myapp_result.stdout.find(‘xxx’) == -1

####################

##

如果

PHP

7

,则降级

– shell: php –version

register: php_version

– shell: yum -y downgrade php*

when: “‘7.0’ in php_version.stdout”

#####

####

若果主机的

hosts

不存在,就传三个文书过去

– stat: path=/etc/hosts

register: hosts_file

– copy: src=path/local/file dest=/path/remote/file

when: hosts_file.stat.exists == false

################################

#

交互

hosts: all

vars_prompt:

– name: user

prompt: “what is your name”

#######confirm

为用户输入三遍

#########wait_for

模块 

delegate_to

模块

tags

标签 

block

块功能 

roles

功能 

jinja2

语法

#

#######################

######include

功能

tasks:

– include: xx.yml


– include: xx.yml

– include: yy.yml

when: extra_file.stat.exists

################################

ansible-galaxy install username.rolename

################################################################################

####

ansible all -i inventory.py -m ping  #

动态创设主机

相关文章