飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

news2024/12/24 10:19:58

文章目录

        • ansible
        • 配置文件的优先级
        • 尝试开始进行操作
        • ansible常用模块
        • ansible 的playbook
        • 示例
        • 安装php
        • playbook中变量的引用

ansible
yum install -y ansible 
测试是否可用 ansible localhost -m ping
/etc/ansible/ansible.cfg :主配置文件,配置 ansible 工作特性
/etc/ansible/hosts :配置主机清单文件
/etc/ansible/roles/ :存放 ansible 角色的目录

主配置文件存在 /etc/anible/ansible.cfg
指定特权用户
[privilege_escalation]
become=True
become_method=sudo
become_user=user
become_ask_pass=False



ansible;adhoc;playbook;tasks;Roles;Roles方式编排web集群架构;

配置文件的优先级
1) 最先查找 $ANSIBLE_CONFIG 变量
2) 其次查找当前项目目录下 ansible.cfg
3) 然后查找用户家目录下的 .ansible.cfg
4) 最后查找 /etc/ansible/ansible.cfg

Inventory 文件主要用来填写被管理主机以及主机组信息;(逻辑上定义);
默认 Inventory 文件为 /etc/ansible/hosts ;
当然也可以自定义一个文件,当执行 ansible 命令时使用 -i 选项指定 Inventory
文件位置;
配置主机清单
[webservers]
172.16.1.7
172.16.1.8 ansible_become=yes

ansible_become=yes 这个的意思是加上sudo
尝试开始进行操作
ad-hoc执行步骤
1.加载自己的配置文件,默认 /etc/ansible/ansible.cfg ;
2.查找对应的主机配置文件,找到要执行的主机或者组;
3.加载自己对应的模块文件,如 command ;
4.通过 ansible 将模块或命令生成对应的临时 py 文件,并将该文件传输至远
程服务器对应执行用户 $HOME/.ansible/tmp/ansible-tmp-number/XXX.PY ;
5.执行用户家目录的 `` 文件;
6.给文件 +x 执行;
7.执行并返回结果;
8.删除临时 py 文件, sleep 0 退出;

使用 ad-hoc 执行一次远程命令,注意观察返回结果的颜色;
绿色: 代表被管理端主机没有被修改
黄色: 代表被管理端主机发现变更
红色: 代表出现了故障,注意查看提示

在这里插入图片描述

ansible常用模块
command模块
[root@manger ~]# ansible localhost -m command -a 'chdir=/root
echo $PWD'
 ansible localhost -m command -a
'creates=/data/file ifconfig eth0'

shell 模块
参数 选项 含义
chdir chdir /opt 执行ansible时,切换到指定的目录
creates creates /data/file 如果文件存在,则跳过执行
removes removes /data/file 如果文件存在,则执行
ansible localhost -m shell -a "ifconfig eth0|awk
'NR==2' "

scripts 模块
 ansible webservers -m script -a "/data/yum.sh"

copy模块
ansible webservers -m copy -a "src=./httpd.conf
dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"

file模块
 ansible webservers -m file -a
"path=/tmp/foo.conf state=touch mode=666"

ansible webservers -m file -a "path=/tmp/foo
state=directory mode=777"
ansible webservers -m file -a "path=/tmp/foo
state=directory owner=root group=root mode=777 recurse=yes"

等模块,有很多平时用不到,这里做一个大概记录
ansible 的playbook
playbook 是一个 由 yaml 语法编写的文本文件,它由 play 和 task 两部分组
成。
play : 主要定义要操作主机或者主机组
task :主要定义对主机或主机组具体执行的任务,可以是一个任务,也可以是多个
任务(模块)
总结: playbook 是由一个或多个 play 组成,一个 play 可以包含多个 task 任
务。
可以理解为: 使用多个不同的模块来共同完成一件事情。

1) playbook 是对 AD-Hoc 的一种编排方式。
2) playbook 可以持久运行,而 Ad-Hoc 只能临时运行。
3) playbook 适合复杂的任务,而 Ad-Hoc 适合做快速简单的任务。
4) playbook 能控制任务执行的先后顺序。

语法 描述
缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能
使用tabs
冒号 以冒号结尾的除外,其他所有冒号后面所有必须有空格。
短横线
表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别
作为同一列表。
示例
$cat installed_httpd.yml
#1.定义play
#2.定义task、(Installed、Configure、Init、Systemd)


- hosts: webservers
  tasks:
    - name: Installed Httpd Server
      yum:
        name: httpd
        state: present

    - name: Configure Httpd Server
      copy:
        src: ./httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf
        owner: "root"
        group: "root"
        mode: '0644'
        backup: yes
      notify: Restart Httpd Server

    - name: Init Httpd Server
      copy:
        src: ./index.html.j2
        dest: /var/www/html/test.html

    - name: Systemd Httpd Server
      systemd:
        name: httpd
        state: started
        enabled: yes

  handlers:
    - name: Restart Httpd Server
      systemd:
        name: httpd
        state: restarted


上面是用root 用户执行的
下面是用普通用户执行
- hosts: webservers
  become: true
  become_user: root
  tasks:
    - name: Installed Httpd Server
      yum:
        name: httpd
        state: present

    - name: Configure Httpd Server
      copy:
        src: ./httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf
        owner: "nouser"
        group: "nouser"
        mode: '0644'
        backup: yes
      notify: Restart Httpd Server

    - name: Init Httpd Server
      copy:
        src: ./index.html.j2
        dest: /var/www/html/test.html
        owner: "nouser"
        group: "nouser"
        mode: '0644'

    - name: Systemd Httpd Server
      systemd:
        name: httpd
        state: started
        enabled: yes

  handlers:
    - name: Restart Httpd Server
      systemd:
        name: httpd
        state: restarted


检查语法 :ansible-playbook installed_httpd.yml --
syntax-check

执行命令: ansible-playbook installed_httpd.yml 
安装php
cat install_nginx_php.yml
#1.安装nginx
#2.安装php
#3.添加nginx虚拟主机,触发重启
#4.配置php,连接redis;触发重启
#5.部署phpadmin;、


- hosts: webservers
  vars:
    web_site_directory: /ansible/admin2

  tasks:
    - name: Installed Nginx PHP Server
      yum:
        name: "{{ item }}"
        state: present
      loop:
        - nginx
        - php71w
        - php71w-cli
        - php71w-common
        - php71w-devel
        - php71w-embedded
        - php71w-gd
        - php71w-mcrypt
        - php71w-mbstring
        - php71w-pdo
        - php71w-xml
        - php71w-fpm
        - php71w-mysqlnd
        - php71w-opcache
        - php71w-pecl-memcached
        - php71w-pecl-redis
        - php71w-pecl-mongodb
      tags: Install

    - name: Create Nginx Process Runtime Group
      group:
        name: www
        gid: 666
      tags: Install

    - name: Create Nginx Process Runtime User
      user:
        name: www
        uid: 666
        create_home: no
      tags:
        - Install
        - Configure

    - name: Configure Nginx Nginx.conf
      copy:
        src: ./conf/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: 'root'
        group: 'root'
        mode: '0644'
      notify: Restart Nginx Server
      tags: Configure

    - name: Configure Nginx VHosts ansible.oldxu.com;
      template:
        src: ./conf/ansible.oldxu.com.conf.j2
        dest: /etc/nginx/conf.d/ansible.oldxu.com.conf
      notify: Restart Nginx Server

    - name: Check Web Configure
      shell:
        cmd: /usr/sbin/nginx -t
      register: Check_Nginx
      changed_when:
        - Check_Nginx.stdout.find('successful')
        - false

    - name: Configure php php.ini
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
        mode: "{{ item.mode }}"
      loop:
        - { src: "./conf/php.ini.j2", dest: "/etc/php.ini" , mode: "0644" }
        - { src: "./conf/php-fpm.d.www.conf.j2", dest: "/etc/php-fpm.d/www.conf" , mode: "0644" }
      notify: Restart PHP Server

    - name: Systemd Nginx And PHP Server
      systemd:
        name: "{{ item }}"
        state: started
        enabled: yes
      loop:
        - nginx
        - php-fpm


# download code

    - name: Create Web Site Directory
      file:
        path: "{{ web_site_directory }}"
        state: directory
        owner: 'www'
        group: 'www'
        mode: '0755'

    - name: Unarchive Myadmin Code
      unarchive:
        src: file/phpmyadmin.zip
        dest: "{{ web_site_directory }}"
        owner: 'www'
        group: 'www'


  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

    - name: Restart PHP Server
      systemd:
        name: php-fpm
        state: restarted
playbook中变量的引用
变量提供了便捷的方式来管理 ansible 项目中的动态值。 比如 nginx-1.12 ,可能
后期会反复的使用到这个版本的值,那么如果将此值设置为变量,后续使用和修改都
将变得非常方便。这样可以简化项目的创建和维护;

在 Ansible 中定义变量分为如下三种方式:
1) 通过命令行传递变量参数定义
2) 在play文件中进行定义变量
2.1) 通过vars定义变量
2.2) 通过vars_files定义变量
3) 通过inventory在主机组或单个主机中设置变量
3.1) 通过host_vars对主机进行定义
3.2) 通过group_vars对主机组进行定义


vars 形式的变量
- hosts: webservers
  vars:
    web_packages: httpd
    ftp_packages: vsftpd
  tasks:
    - name: Output Variables
      debug:
        msg:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"


输出结果为
    "msg": [
        "httpd",
        "vsftpd"
    ]

在 playbook 中使用 vars_files 指定文件作为变量文件,好处就是其他的
playbook 也可以调用;
[root@ansible project1]# cat vars.yml
web_packages: httpd
ftp_packages: vsftpd

- hosts: webservers
  vars_files:
    - ./vars.yml
  tasks:
    - name: Output Variables
      debug:
        msg:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"



playbook 传送多个变量
ansible-playbook f5.yml -i hosts -e
"web_packages=GeoIP" -e "ftp_packages=telnet"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3个好用的桌面管理软件!点赞

大家是不是觉得自己的桌面有时候特别乱、上班的时候会影响自己的心情。尤其是一些大企业,干净整洁的桌面是领导必须的要求。 今天就为大家推荐3款好用的桌面管理软件,这其中有的是适合企业用的,有的是适合个人用的,大家可根据自己…

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源,该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年,光伏发电总量达到了百万千瓦时。 大量分布式光伏并网,在输出清洁电力的同时&#xff0c…

全志XR806开发板RTOS环境搭建及问题

测评一 RTOS环境搭建及问题 按照官网文档https://xr806.docs.aw-ol.com/rtos/env/说明,RTOS先拉取SDK,由于XR806是Cortex-M33 Star内核然后指定gcc-arm-none-eabi工具链的位置,再编译再烧录,开发过程和ESP32有些许相似&#xff0c…

深入理解Dubbo-7.服务消费调用源码分析

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

媒介盒子:软文推广让你的品牌宣传更高效

软文推广在当今企业的宣传方式中具有至关重要的作用。随着互联网技术的不断发展和社交媒体的广泛使用,软文推广已经成为品牌和广告主的首选。如何在海量信息中脱颖而出,如何让内容在众多信息中获得更高的点击率与转化率,还需要借助软文推广的…

算法通关村第十八关-黄金挑战回溯困难问题

大家好我是苏麟 , 今天带来几道回溯比较困难的题 . 回溯有很多比较难的问题,这里我们看两个,整体来说这两个只是处理略复杂,还不是最难的问题 . 大纲 IP问题 IP问题 描述 : 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 …

UE5 - ArchvizExplorer与Map Border Collection结合 - 实现电子围栏效果

插件地址: https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://www.unrealengine.com/marketplace/zh-CN/product/map-border-collection ArchvizExplorer扩展: https://download.csdn.net/download/qq_17523181/8843305…

独热编码和词向量的简单理解

把单词用向量表示,是把深度神经网络语言模型引入自然语言处理领域的一个核心技术。想要让机器理解单词,就必须要把它变成一串数字(向量)。下面介绍的 One-Hot Encoding(One-Hot 编码)和 Word Embedding &am…

【LittleXi】2023 ICPC ECfinal 出线 官方数据 民间预测

【LittleXi】2023 ICPC ECfinal 出线 官方数据 民间预测 说明: 参考去年、前年上海大学,设置210出线队伍 对6场区域赛(不含港澳)走Z字,每个学校最多三支队伍出线 字符串问题,可能会有几个名额失真,比如南…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传输操作输入信息,比如键鼠等。 【追加input processing组件】 …

PyCharm控制台堆栈乱码问题解决

目录 1、问题描述2、问题原因3、问题解决 1、问题描述 PyCharm环境都已经配置成了UTF-8编码,控制台打印中文也不会出现乱码,但报错堆栈信息中如果有中文会出现中文乱码: 这种该怎么解决呢? 2、问题原因 未将PyCharm编码环境与项目…

Redis - 主从集群下的主从复制原理

主从复制过程 数据同步演变过程 sync 同步 Redis 2.8 版本之前,首次通信成功后, slave 会向 master 发送 sync 数据同步请求。然后 master 就会将其所有数据全部发送给 slave ,由 slave 保存到其本地的持久化文件中。这个过 程…

10个前端开发不容错过的工具网站

作为开发人员,我们经常寻找合适的工具和资源来帮助日常开发工作。但是很多好用的工具网站尤其是国外的网站很多人都错过了。 这里我整理了一份包含 10 个网站的列表,这些网站或许可以帮助到作为前端开发者的你。 1、MDN Web 文档 MDN文档无疑是 Web 开…

Echarts Y轴自定义设置图片

如图Y轴有文字和图片,1-3的图片不同,后面的是特定的css 样式;实现代码 yAxis: {type: category,inverse: true,boundaryGap: false,axisTick: { show: false }, // 是否展示标记点axisLine: { show: false },axisLabel: {// 坐标轴的标签// f…

C++ Qt开发:CheckBox多选框组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍CheckBox单行输入框组件的常用方法及灵活运用…

京东数据平台有哪些-怎么获取京东数据-京东竞品数据分析工具

如今,许多在线上经营的电商品牌方都着手于去做竞品分析,毕竟竞品分析对品牌的品牌运营及品牌战略决策来说有多种好处,包括但不限于:了解市场需求,把握市场竞争格局;了解竞品推广及营销策略;了解…

【Linux】探索Linux进程优先级 | 环境变量 |本地变量 | 内建命令

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 目录 一、进程优先级1.1优先级VS权限1.2为什么要有进程优先级&am…

低成本物联网安全芯片ACL16_S 系列,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核,片内集成多种安全密码模块,包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法,支持真随机数发…

AtCoder Beginner Contest 332 A~F

A.Online Shopping(计算) 题意: 需要购买 N N N种物品,第 i i i种物品的价格为 P i P_i Pi​,且第 i i i件物品需买 Q i Q_i Qi​件。 商店满 S S S元包邮,不满则需支付 K K K元邮费,问需支付多少钱。 分析&#x…

『 Linux 』进程地址空间存在的意义

文章目录 前言🦕🦖 防止进程对物理内存的非法(危险)访问🦖 进程管理模块与内存管理模块的解耦合🦖 实现进程间的独立性 前言🦕 在文章『 Linux 』进程地址空间概念中提到了进程地址空间的部分概念; 这部分概念主要围绕…