ansible安装和及常用模块的使用

ansible环境部署
1.准备6台虚拟机
ansible 192.168.1.40 管理主机
ansible 192.168.1.41 托管主机
ansible 192.168.1.42 托管主机
ansible 192.168.1.43 托管主机
ansible 192.168.1.44 托管主机
ansible 192.168.1.45 托管主机
2.为ansible配置yum仓库
真机]#mkdir /var/ftp/ansible
真机]#cp /linux-soft/04/ansible/* /var/ftp/ansible
真机]#cd /var/ftp/ansible
真机]#createrepo --update .
真机]#createrepo /var/ftp/ansible 创建yum源
3.安装ansible软件
ansible使用以下模块,都需要安装(默认作为依赖被安装)
paramiko,PyYAML,jinja2,httplib2,six
ansible]#yum -y install ansible
查询ansible版本
ansible]#ansible --version

   主机定义与分组

ansible配置文件查找顺序
1)首次检测ANSIBLE_CONFIG变量定义的配置文件
2)其次检测当前目录下的./ansible.cfg
3)再次检测当前用户家目录下~/ansible.cfg
4)最后检查/etc/ansible/ansible.cfg文件
–/etc/ansible/ansible.cfg是ansible的默认配置文件路径
4.修改配置文件
]#vim /etc/ansible/ansible.cfg #仅作为查看信息
11 inventory = /etc/ansible/hosts #主机分组配置文件
61 host_key_checking = False #用户不需要输入yes来同意连接,true则需要输入
]#vim /etc/ansible/hosts
[web]
web1
web2
[db] 添加服务器分组(方便管理机器)
db1
db2
[other]
cache
/etc/ansible/hosts定义分组格式
#表示注释
[组名称]
主机名称或ip地址,其他参数

ansible命令基础
ansible 主机集合 -m 模块名称 -a 模块参数
主机集合 主机名或分组名,多个使用”逗号”分隔
-m 模块名称,默认command模块
-a or --args 模块参数
其他参数
-i inventory文件路径,或可执行脚本
-k 使用交互式登录密码
-e 定义变量
-v 显示详细信息
列出要执行的主机
ansible 主机组 --list-hosts
ansible all --list-hosts #列出所有主机
]# ansible web --list-hosts
]# ansible localhost --list-hosts
]# ansible web,other --list-hosts
批量检测主机
ansible all -m ping -k #交互式输入密码检测主机

部署证书文件
1.创建密钥对
]#ssh-keygen -t rsa -b 2048 -f /root/.ssh/key -N ‘’
2.给所有主机部署密钥
]#ssh-copy-id -i key.pub 主机名称
#-i后面跟密钥文件,因为key.pub不是默认的密钥文件.所以要加i,否则需要输入密码
inventory参数说明
ansible_ssh_port
ssh端口号:如果不是默认端口,通过此变量设置
ansible_ssh_user
默认的ssh用户名
ansible_ssh_pass
ssh密码(这种方式不安全,不建议使用)
ansible_ssh_private_key_file
ssh使用私钥文件,免密远程多台主机

  vars变量定义,用于组名后面,或者所有组
  [all:vars]
  ansible_ssh_privite_key_file=”/root/.ssh/key”
  ansible_ssh_user=”bruno”   #定义管理主机只能连接bruno用户连接所有主机
  ]# ansible all -m ping    #无需输入密码检测主机(已经部署公钥)
  children子组定义,用于引用其他组名称
  分组定义,范围定义样例
   子组定义
    [app:children]
    web
    db
   变量引用
    [other]
    cache ansible_ssh_port=888

ansible模块
1.ansible-doc和ping模块
]# ansible-doc -l #列出ansible所有模块
]# ansible-doc lineinfile
]#ansible-doc -s 模块名称 #ansible模块的简单帮助信息
]#ansible-doc 模块名称 #查看ansible模块帮助
:! ansible-doc 模块名称 #在vim中查看ansible模块帮助
rm -rf /root/.ansible/cp 清除ansible缓存
2.command模块 #系统默认模块,远程执行命令
用法
ansible host-pattern -m command -a ‘[args]’
查看所有主机负载
ansible all -m command -a ‘uptime’
web2 | SUCCESS | rc=0 >>
15:25:12 up 5:32, 2 users, load average: 0.00, 0.01, 0.05
1m负载 5m负载 15m负载
查看日期和时间
ansible all -m command -a ‘date+%F_%T’
command模块注意事项:
1)该模块通过-a跟上要执行的命令可以直接执行,若命令有如下符号则执行不成功
“>”,”<”,”|”,”&”
2)command模块不能解析系统变量
3)该模块不启动shell直接在ssh进程中执行,所有使用到shel的命令执行都会失败
下列命令执行会失败
ansible all -m command -a ‘ps aux|grep ssh’
ansible all -m command -a ‘set’
3.shell模块 #远程命令执行模块

]# ansible web -m shell -a "echo $HOSTNAME"
“echo $HOSTNAME” #先执行命令替换再执行变量替换
将 $HOSTNAME执行的结果在,远程主机执行
]# ansible web -m shell -a 'echo $HOSTNAME'
  #远程执行命令变量解析两次(ansible执行命令是二次解析)


ansible cache -m shell -a ‘touch /tmp/f1’
ansible cache -m shell -a ‘chdir=/tmp touch f1’
        #在cache主机的/tmp下创建文件

4.script模块 #脚本模块(万能模块)
1)在本地写脚本,然后使用script模块批量执行
]#ansible web -m script -a ‘user.sh’
注意:该脚本包含但不限于shell脚本,只要指定Sha-bang解释器的脚本都可以
2) ree_form参数 :必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机
本地,并没有具体的一个参数名叫 free_form,具体解释请参考 command 模块。
3)chdir参数 : 此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之
前,会先进入到 chdir 参数指定的目录中。
4)creates参数 :使用此参数指定一个远程主机中的文件,当指定的文件存在时,就
不执行对应脚本,可参考 command 模块中的解释。
5)removes参数 :使用此参数指定一个远程主机中的文件,当指定的文件不存在时,
就不执行对应脚本,可参考 command 模块中的解释。
原文链接:https://blog.csdn.net/dylloveyou/article/details/80465000
5.yum 模块
使用yum模块包管理器来管理软件包
name:要进行操作的软件包的名字(多个软件包可用”逗号”隔开)
state:动作(installed,removed)
案例: db组安装mariadb
]# ansible db -m yum -a ‘name=“mariadb-server” state=installed’
cache主机卸载lrzsz软件
]# ansible cache -m yum -a ‘name=“lrzsz” state=removed’
6.service模块
service模块
name:必选项,服务名称
enabled:是否开机自启yes|no
sleep:执行restarted,会在stop和start之间沉睡几秒
state:对当前服务执行启动,停止,重启,重新加载等操作
(started,stopped,restarted,reloaded)
ansible远程执行mariadb远程启动并设开机自动
]# ansible db -m service -a ‘name=“mariadb” state=“started” enabled=“yes”’
]#systemctl is-enabled mariadb #查询服务是否开机自启
7.copy模块
template模块
可以调用变量,跟copy的用法一样
只适用来copy配置文件
复制文件到远程主机
1)src:复制本地文件到远程主机,绝对路径和相对路径都可,路径为目录时会递归复制.
若路径以”结尾”,只复制目录里的内容,若不以”/”结尾,则复制包含目录在内的整个内
容类似于(rsync)
2)dest:必选项,远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录
]# ansible all -m copy -a ‘src=/etc/resolv.conf dest=/etc/resolv.conf’
8.lineinfile模块
类似sed的一种行编辑替换模块
path 目标文件
regrexp 正则表达式,要修改的行
line 最终修改的结果
案例:修改my.cnf中bin-log格式,mixed–>row
]# ansible db -m lineinfile -a ’
path=/etc/my.cnf
regexp="^binlog-format"
line=“binlog-format=row”’
9. replace模块
类似sed的一种行编辑替换模块
path 目标文件
regrexp 正则表达式,要替换的内容
replace 替换后的结果
案例 修改my.cnf中bin-log格式,row–>mixed
]# ansible db -m replace -a ’
path=/etc/my.cnf
regexp="=row$"
replace="=mixed"’
lineinfile和replace区别
1)lineinfile修改整行
2)replace 可以修改某行的部分内容
10.setup模块
主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模
块相关,setup模块下经常用的是filter参数.

 filter过滤所需信息
 ]#ansible cache -m setup -a ‘fileter=ansible_distribution’
发布了5 篇原创文章 · 获赞 1 · 访问量 317

猜你喜欢

转载自blog.csdn.net/weixin_46271204/article/details/104415236