HankChow's Blog


  • 首页

  • 归档

  • 关于

  • 标签

  • 搜索

Ansible 的各个模块及相关参数

发表于 2017-02-16
字数统计: 968 | 阅读时长 ≈ 3
  • command:在被控节点上执行命令
    • command 是 Ansible 的默认模块,可以不通过 -m 指明使用该模块
    • 可以直接执行 -a 中的命令,但由于不通过 shell 执行,所以与 shell 有关的变量、重定向、管道等功能无法使用
    • kwargs:
      • chdir:目录名。首先跳转到该目录后再执行命令
  • shell:在被控节点上通过 shell 执行命令
    • 与 command 模块基本相同,而且由于通过 shell 执行,所以可以使用变量、重定向、管道等功能,并且使用所选用户的默认 shell
    • kwargs:
      • chdir:目录名。首先跳转到该目录后再执行命令
  • script:在被控节点上执行主控节点上的脚本
    • 直接在 -a 中指明主控节点上的脚本位置即可,且这个脚本需要有 x 权限
  • ping:检测某个目的节点是否响应
    • 这个检测过程并不向目的节点发送 ping 包,只是反映目的节点是否可控,目的节点即使在可达的情况下也不一定可控
    • 不指定 -a
  • yum:在被控节点上通过 yum 管理软件
    • kwargs:
      • name:软件包名称。如果为 * ,则执行 yum -y updtae;名称前面加 @ 为安装软件包组;名称前面加 @^ 为安装环境组;这个参数也可以是 url,此时通过指定的 rpm 文件进行安装
      • state:软件安装状态。如果为 present、latest 或 installed 则执行安装软件;如果为 absent 或 removed 则执行移除软件
  • copy:从主控节点向被控节点复制文件
    • kwargs:
      • src:主控节点的文件位置。可以是绝对路径或相对路径,如果是一个目录,将会进行递归复制
      • dest:被控节点的文件位置。必须为绝对路径,且如果 src 是一个目录,dest 也必须为一个目录
      • directory_mode:递归设定目录的权限。默认为系统默认权限
      • force:是否覆盖。默认为 yes,即当目标文件和源文件不同时,强制覆盖文件,如果为 no 则只有在目标文件不存在时才复制
  • fetch:从被控节点向主控节点复制文件
    • 与 copy 模块并不仅仅是方向相反,copy 可以复制文件和目录,而 fetch 模块只能复制文件
    • kwargs:
      • src:被控节点的文件位置。
      • dest:文件在主控节点中的保存位置。真实的保存目录需要注意,如果指定了 dest 参数为 /foo,被控节点为 bar,则文件将会保存在 /foo/bar/ 下
      • fail_on_missing:被控节点中的文件不存在时是否报错。默认为 no,当为 no 时即使文件不存在也不会报错,此时主控节点也不会创建相应的目录
  • synchronize:通过 rsync 传输文件
    • kwargs:
      • src:源文件的位置。
      • dest:目标文件的位置。
      • mode:推送模式或拉取模式。默认为推送模式 push,从主控节点向被控节点传输文件
      • delete:是否删除文件使两方一致。两方的一致性以推送方为准,默认为 no
  • service:用于管理服务
    • kwargs:
      • name:服务名称。
      • state:对服务的操作。包括启动(started)、停止(stopped)、重启(restarted)、重新加载(reloaded)
      • enabled:是否开机启动。且 state 和 enabled 两个参数中至少要有一个
      • sleep:在 state=restarted 的时候,指定在 stop 和 start 之间暂停的秒数
  • get_url:通过 http/https/ftp 下载文件
    • kwargs:
      • url:下载的 uri
      • dest:文件下载目标位置。如果 dest 为目录,则使用服务器提供的文件名,或者如果没有提供,将使用远程服务器上的 url 的基本名称。
      • timeout:设置超时时间。默认为 10s
      • headers:指定访问时的请求头。以 key: value 的格式填写

查看文件中的重复行

发表于 2016-12-12
字数统计: 78 | 阅读时长 ≈ 1
1
sort <filename> | uniq -cd

uniq 命令用于报告重复的行,但只能用于相邻的两行,因此需要先用 sort 对文件中的个行进行排序。加入 -d 参数能把重复的行显示出来,加入 -c 参数能显示重复的行重复了多少次。

使用 pymysql 模块时查询返回字典的方法

发表于 2016-12-01
字数统计: 240 | 阅读时长 ≈ 1

使用 pymysql 模块在 MySQL 中进行查询时,如果是使用以下这种默认的查询方法时,调用 fetchone() 和 fetchall() 返回的查询结果将会分别是元组和嵌套元组,只能使用下标去访问查询出来的每个字段的值,相当不方便,也不灵活。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pymysql

connection = {
"host": "",
"user": "",
"passwd": "",
"db": "",
"charset": "utf8"
}

conn = pymysql.connect(**connection)
cursor = conn.cursor()
sql = "blabla"
cursor.execute(sql)
result = cursor.fetchall()

最方便的返回莫过于字典了,字段名作为键名,查询出来的值作为键值,与字段的顺序无关。需要在查询的时候返回字典,只需要在连接参数中指定一个 cursorclass 参数为 pymysql.cursors.DictCursor 即可,使用 fetchone() 和 fetchall() 返回的查询结果分别为字典和以每一行为一个字典组成的列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pymysql

connection = {
"host": "",
"user": "",
"passwd": "",
"db": "",
"charset": "utf8",
"cursorclass": pymysql.cursors.DictCursor
}
conn = pymysql.connect(**connection)
cursor = conn.cursor()
sql = "blabla"
cursor.execute(sql)
result = cursor.fetchall()

CentOS 7 上的 systemctl 配置

发表于 2016-09-09
字数统计: 278 | 阅读时长 ≈ 1

CentOS 7 的服务 systemctl 脚本存放在目录 /usr/lib/systemd/ 下,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务即 /usr/lib/systemd/system/ 目录下。

CentOS 7 的每一个服务以 .service 结尾,一般会分为 3 部分:[Unit]、[Service] 和 [Install]。

[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别

[Service]部分是服务的关键,是服务的一些具体运行参数的设置。
Type=forking 是后台运行的形式,
User=users 是设置服务运行的用户,
Group=users 是设置服务运行的用户组,
PIDFile 为存放 PID 的文件路径,
ExecStart 为服务的具体运行命令,
ExecReload 为重启命令,
ExecStop 为停止命令,
PrivateTmp=True 表示给服务分配独立的临时空间。

[Install]部分是服务安装的相关设置,可设置为多用户的。

注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错。

YAML 语法

发表于 2016-07-20
字数统计: 211 | 阅读时长 ≈ 1

YMAL:YMAL Ain’t Markup Language

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
# 一位职工记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
- Apple
- Orange
- Strawberry
- Mango
languages:
ruby: Elite
python: Elite
dotnet: Lame
  • YAML 总是以 — (三个横杠)作为文件的开始,这是 YAML 格式的一部分;
  • 普通的键值对直接以 key: value 的格式每行存储,冒号后面必须为一个空格;
  • 对于列表,列表中的每个元素都以 - (一个横杠 + 一个空格)开始,且每个元素的缩进相同;
  • 对于字典,字典中的每一个键值对和普通的键值对一样(其实整个文件存储的形式就是键值对),但同一个字典中每个键值对的缩进也要相同;
  • 在值中含有冒号等引起解析歧义的字符时,需要用双引号将整个值包住;
  • 使用 来引用变量。
1…131415…17
HankChow

HankChow

84 日志
74 标签
0%
© 2019 HankChow | Site words total count: 111.3k