You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

735 lines
22 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "BlogPosting",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https:\/\/h.cowbay.org"
},
"articleSection" : "post",
"name" : "[筆記] Ansible how to use \x27list\x27 in yaml file ",
"headline" : "[筆記] Ansible how to use \x27list\x27 in yaml file ",
"description" : "\x3cp\x3e這幾天在玩ansible 時,碰到一個問題\x3c\/p\x3e\n\n\x3cp\x3e假如我有個yaml檔作為資料來源檔名是 abc.yml\x3c\/p\x3e\n\n\x3cp\x3e大概長這樣\x3c\/p\x3e\n\n\x3cpre\x3e\x3ccode\x3e \x26quot;teams\x26quot;: [\n {\n \x26quot;chinese_name\x26quot;: \x26quot;TEAM1\x26quot;,\n \x26quot;description\x26quot;: \x26quot;TEAM1\x26quot;,\n \x26quot;gid\x26quot;: 10125,\n \x26quot;location\x26quot;: [\n \x26quot;hq\x26quot;\n ],\n \x26quot;name\x26quot;: \x26quot;aa\x26quot;,\n \x26quot;users\x26quot;: [\n \x26quot;chen\x26quot;,\n \x26quot;chou\x26quot;,\n \x26quot;huani\x26quot;,\n \x26quot;yey\x26quot;,\n \x26quot;wa\x26quot;\n ]\n },\n {\n \x26quot;chinese_name\x26quot;: \x26quot;TEAM2\x26quot;,\n \x26quot;description\x26quot;: \x26quot;TEAM2\x26quot;,\n \x26quot;gid\x26quot;: 10126,\n \x26quot;location\x26quot;: [\n \x26quot;hq\x26quot;\n ],\n \x26quot;name\x26quot;: \x26quot;bb\x26quot;,\n \x26quot;users\x26quot;: [\n \x26quot;chhiao\x26quot;,\n \x26quot;chgc\x26quot;,\n \x26quot;chy\x26quot;,\n \x26quot;hsi\x26quot;,\n \x26quot;li\x26quot;,\n \x26quot;li\x26quot;,\n \x26quot;chgchi\x26quot;\n ]\n }\n\t\t]\n\t\t\n\x3c\/code\x3e\x3c\/pre\x3e",
"inLanguage" : "en",
"author" : "Eric Chang",
"creator" : "Eric Chang",
"publisher": "Eric Chang",
"accountablePerson" : "Eric Chang",
"copyrightHolder" : "Eric Chang",
"copyrightYear" : "2018",
"datePublished": "2018-11-27 16:50:53 \x2b0800 CST",
"dateModified" : "2018-11-27 16:50:53 \x2b0800 CST",
"url" : "https:\/\/h.cowbay.org\/post\/ansible-selectattr\/",
"wordCount" : "219",
"image" : "https://h.cowbay.orghttps://h.cowbay.org/images/post-default-1.jpg"",
"keywords" : [ ""ansible"",""linux"","Blog" ]
}
</script>
<title>[筆記] Ansible how to use &#39;list&#39; in yaml file </title>
<meta name="description" content="some articles about job,food,passion sisters" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="all,follow">
<meta name="googlebot" content="index,follow,snippet,archive">
<link rel="stylesheet" id="ct-tracks-google-fonts-css" href="https://fonts.googleapis.com/css?family=Raleway%3A400%2C700&amp;subset=latin%2Clatin-ext&amp;ver=4.7.2" type="text/css" media="all">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1576476555" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1576476555" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-138954876-1', 'auto');
ga('send', 'pageview');
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
</head>
<body class="post-template-default single single-post single-format-standard ct-body singular singular-post not-front standard">
<div id="overflow-container" class="overflow-container">
<a class="skip-content" href="#main">Skip to content</a>
<header id="site-header" class="site-header" role="banner">
<div class='top-navigation'>
<div class='container'>
<div id="menu-secondary" class="menu-container menu-secondary" role="navigation">
<button id="toggle-secondary-navigation" class="toggle-secondary-navigation"><i class="fas fa-plus"></i></button>
<div class="menu">
<ul id="menu-secondary-items" class="menu-secondary-items">
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/"></a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/ansible">ansible</a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/linux">linux</a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/proxmox">proxmox</a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/ps">ps</a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/%E7%A2%8E%E5%BF%B5">碎念</a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/%E7%AD%86%E8%A8%98">筆記</a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/%E7%BE%A4%E6%9A%89">群暉</a>
</li>
</ul>
</div>
</div>
<ul class="social-media-icons">
<li>
<a href="full%20Social%20profile%20url%20in%20facebook" data-animate-hover="pulse" class="facebook" target="_blank">
<i class="fab fa-facebook-square" title="facebook"></i>
<span class="screen-reader-text">facebook</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20googleplus" data-animate-hover="pulse" class="gplus" target="_blank">
<i class="fab fa-google-plus-g" title="googleplus"></i>
<span class="screen-reader-text">googleplus</span>
</a>
</li>
<li>
<a href="chang0206" data-animate-hover="pulse" class="twitter" target="_blank">
<i class="fab fa-twitter-square" title="twitter"></i>
<span class="screen-reader-text">twitter</span>
</a>
</li>
<li>
<a href="chang0206" data-animate-hover="pulse" class="instagram" target="_blank">
<i class="fab fa-instagram" title="instagram"></i>
<span class="screen-reader-text">instagram</span>
</a>
</li>
<li>
<a href="mailto:mc@hotshraingmy.info" data-animate-hover="pulse" class="email">
<i class="fas fa-envelope" title="email"></i>
<span class="screen-reader-text">email</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20linkedin" data-animate-hover="pulse" class="linkedin" target="_blank">
<i class="fab fa-linkedin-in" title="linkedin"></i>
<span class="screen-reader-text">linkedin</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20stackoverflow" data-animate-hover="pulse" class="stackoverflow" target="_blank">
<i class="fab fa-stack-overflow" title="stackoverflow"></i>
<span class="screen-reader-text">stackoverflow</span>
</a>
</li>
<li>
<a href="changchichung" data-animate-hover="pulse" class="github" target="_blank">
<i class="fab fa-github" title="github"></i>
<span class="screen-reader-text">github</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20pinterest" data-animate-hover="pulse" class="pinterest" target="_blank">
<i class="fab fa-pinterest" title="pinterest"></i>
<span class="screen-reader-text">pinterest</span>
</a>
</li>
<li>
<a href="https://h.cowbay.org/index.xml" data-animate-hover="pulse" class="rss" target="_blank">
<i class="fas fa-rss" title="rss"></i>
<span class="screen-reader-text">rss</span>
</a>
</li>
</ul></div>
</div>
<div class="container">
<div id="title-info" class="title-info">
<div id='site-title' class='site-title'>
<a href="/"> MC部落 </a>
</div>
</div>
<button id="toggle-navigation" class="toggle-navigation">
<i class="fas fa-bars"></i>
</button>
<div id="menu-primary-tracks" class="menu-primary-tracks"></div>
<div id="menu-primary" class="menu-container menu-primary" role="navigation">
<p class="site-description">Whats the Worst That Could Happen?</p>
<div class="menu">
<ul id="menu-primary-items" class="menu-primary-items">
<li class='menu-item menu-item-type-custom menu-item-object-custom '>
<a href="https://h.cowbay.org/">Home</a>
</li>
<li class='menu-item menu-item-type-post_type menu-item-object-page '>
<a href="https://h.cowbay.org/about/">About</a>
</li>
<li class='menu-item menu-item-type-post_type menu-item-object-page '>
<a href="https://h.cowbay.org/contact/">Get in touch</a>
</li>
</ul>
</div>
</div>
</div>
</header>
<div id="main" class="main" role="main">
<div id="loop-container" class="loop-container">
<div class="post type-post status-publish format-standard has-post-thumbnail hentry category-design tag-design tag-standard-2 tag-tagalicious tag-travel entry full-without-featured odd excerpt-1">
<div class='featured-image lazy lazy-bg-image' data-background="https://h.cowbay.org/images/post-default-1.jpg">
</div>
<div class="entry-meta">
<span class="date">27 November</span> <span> / </span>
<span class="author">
<a href="https://github.com/changchichung" title="Posts by Eric Chang" rel="author">Eric Chang</a>
</span>
<span class="category">
<span> / </span>
<a href="/categories/%E7%AD%86%E8%A8%98">筆記</a>
</span>
</div>
<div class='entry-header'>
<h1 class='entry-title'> [筆記] Ansible how to use &#39;list&#39; in yaml file </h1>
</div>
<div class="entry-container">
<div class="entry-content">
<article>
<p>這幾天在玩ansible 時,碰到一個問題</p>
<p>假如我有個yaml檔作為資料來源檔名是 abc.yml</p>
<p>大概長這樣</p>
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
&quot;gid&quot;: 10125,
&quot;location&quot;: [
&quot;hq&quot;
],
&quot;name&quot;: &quot;aa&quot;,
&quot;users&quot;: [
&quot;chen&quot;,
&quot;chou&quot;,
&quot;huani&quot;,
&quot;yey&quot;,
&quot;wa&quot;
]
},
{
&quot;chinese_name&quot;: &quot;TEAM2&quot;,
&quot;description&quot;: &quot;TEAM2&quot;,
&quot;gid&quot;: 10126,
&quot;location&quot;: [
&quot;hq&quot;
],
&quot;name&quot;: &quot;bb&quot;,
&quot;users&quot;: [
&quot;chhiao&quot;,
&quot;chgc&quot;,
&quot;chy&quot;,
&quot;hsi&quot;,
&quot;li&quot;,
&quot;li&quot;,
&quot;chgchi&quot;
]
}
]
</code></pre>
<p>稍微整理一下,比較容易看</p>
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
&quot;gid&quot;: 10125,
&quot;location&quot;: [&quot;hq&quot;],
&quot;name&quot;: &quot;aa&quot;,
&quot;users&quot;: [&quot;chen&quot;,&quot;chou&quot;,&quot;huani&quot;,&quot;yey&quot;,&quot;wa&quot;]
},
{
&quot;chinese_name&quot;: &quot;TEAM2&quot;,
&quot;description&quot;: &quot;TEAM2&quot;,
&quot;gid&quot;: 10126,
&quot;location&quot;: [&quot;hq&quot;],
&quot;name&quot;: &quot;bb&quot;,
&quot;users&quot;: [&quot;chhiao&quot;,&quot;chgc&quot;,&quot;chy&quot;,&quot;hsi&quot;,&quot;li&quot;,&quot;chgchi&quot;]
}
]
</code></pre>
<p>在 ansible playbook 中,我用 include_vars 把這個檔案叫進來</p>
<pre><code>- name: load teams.yml
tags: env
include_vars:
file: files/kw/teams.yml
</code></pre>
<p>這時候在這個執行階段,就會有一個變數叫 teams 裡面有 chinese_name/description/gid 等等這些屬性</p>
<p>其中的 location/users 又是另外一個 list</p>
<p>那如果我想要用users這個清單中的id作為建立帳號的來源</p>
<p>我就可以用底下這段,先把 users 裡面的內容,指給 dc_users 這個 localvar</p>
<p>然後加上 when 的條件,限定只有 name == aa 的 users 才會被指定給 dc_users</p>
<pre><code>- name: set aa_users
tags: env
set_fact:
aa_users: &quot;{{ item.users }}&quot;
when: item.name == 'aa'
with_items: &quot;{{ teams }}&quot;
</code></pre>
<p>這樣子執行下來是沒有問題的,不過就是醜了點 XD</p>
<p>之後要抓 user 帳號時,就可以直接用 aa_users 來跑迴圈</p>
<pre><code>- name: create folder for aa_users
tags: env
file:
path: &quot;/tmp/{{ item }}&quot;
owner: &quot;{{ item }}&quot;
group: &quot;{{ item }}&quot;
state: directory
with_items: &quot;{{ aa_users }}&quot;
</code></pre>
<p>很簡單的概念,因為一開始在 teams 這個 var 裡面</p>
<p>users 這個屬性是一個 list</p>
<p>p.s 講話一定要參雜用英文單字,這樣看起來比較屌&hellip;</p>
<p>所以沒辦法直接在底下的create folder task 直接叫出來</p>
<p>如果直接叫 teams.users ,那會是一個清單</p>
<pre><code> [&quot;chen&quot;,&quot;chou&quot;,&quot;huani&quot;,&quot;yey&quot;,&quot;wa&quot;]
</code></pre>
<p>然後 ansible 也很厲害,就這個樣子,他還是會去忠實的執行建立目錄</p>
<p>所以在 /tmp 底下就會多出一個</p>
<blockquote>
<p>[&ldquo;chen&rdquo;,&ldquo;chou&rdquo;,&ldquo;huani&rdquo;,&ldquo;yey&rdquo;,&ldquo;wa&rdquo;]</p>
</blockquote>
<p>這個樣子的目錄 &hellip;.</p>
<p>所以我的處理方式就是先把這個清單丟給一個local變數 ( aa_users )</p>
<p>後面的task再用這個 {{ aa_users }} 來跑,這樣子就 OK 了</p>
<p>雖說很簡單,但是卡了我一整天吶&hellip;</p>
</article>
</div>
<div class='entry-meta-bottom'>
<div class="entry-categories"><p><span>Categories</span>
<a href="/categories/%E7%AD%86%E8%A8%98" title="View all posts in 筆記">筆記</a>
</p>
</div>
<div class="entry-tags"><p><span>Tags</span>
<a href="/tags/ansible" title="View all posts tagged ansible">ansible</a>
<a href="/tags/linux" title="View all posts tagged linux">linux</a>
</p></div> </div>
<div class="author-meta">
<div class="author">
<img alt='Eric Chang' src="https://www.gravatar.com/avatar/23f8ed94e007297499ac8df1641b3ff5?s=100&d=identicon" class='avatar avatar-72 photo' height='72' width='72'>
<span>
Written by:<a href="https://github.com/changchichung" title="Posts by Eric Chang" rel="author">Eric Chang</a> </span>
</div>
<div class="bio">
<p>塵世裡一個迷途小書僮</p>
<a class="facebook" target="_blank"
href="full%20Social%20profile%20url%20in%20facebook">
<i class="fab fa-facebook-f"
title="facebook icon"></i>
</a>
<a class="googleplus" target="_blank"
href="full%20profile%20url%20in%20googleplus">
<i class="fab fa-google-plus-g"
title="googleplus icon"></i>
</a>
<a class="twitter" target="_blank"
href="chang0206">
<i class="fab fa-twitter-square"
title="twitter icon"></i>
</a>
<a class="linkedin" target="_blank"
href="full%20profile%20url%20in%20linkedin">
<i class="fab fa-linkedin"
title="linkedin icon"></i>
</a>
<a class="email" target="_blank"
href="mailto:mc@hotshraingmy.info">
<i class="fas fa-envelope"
title="email icon"></i>
</a>
<a class="instagram" target="_blank"
href="chang0206">
<i class="fab fa-instagram"
title="instagram icon"></i>
</a>
<a class="stackoverflow" target="_blank"
href="full%20profile%20url%20in%20stackoverflow">
<i class="fab fa-stack-overflow"
title="stackoverflow icon"></i>
</a>
<a class="github" target="_blank"
href="changchichung">
<i class="fab fa-github"
title="github icon"></i>
</a>
<a class="pinterest" target="_blank"
href="full%20profile%20url%20in%20pinterest">
<i class="fab fa-pinterest"
title="pinterest icon"></i>
</a>
</div>
</div>
</div>
</div>
<section id="comments" class="comments">
<div id="disqus_thread"></div>
<script type="application/javascript">
var disqus_config = function () {
};
(function() {
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
return;
}
var d = document, s = d.createElement('script'); s.async = true;
s.src = '//' + "h-cowbay-org-1" + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="https://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</section>
</div>
</div>
<footer id="site-footer" class="site-footer" role="contentinfo">
<h1>
<a href=""> MC部落 </a>
</h1>
<p class="site-description">Whats the Worst That Could Happen?</p>
<div id="menu-footer" class="menu-container menu-footer" role="navigation">
<div class="menu">
<ul id="menu-footer-items" class="menu-footer-items">
</ul>
</div> </div>
<ul class="social-media-icons">
<li>
<a class="facebook" target="_blank"
href="full%20Social%20profile%20url%20in%20facebook" >
<i class="fab fa-facebook-f" title="facebook"></i>
<span class="screen-reader-text">facebook</span>
</a>
</li>
<li>
<a class="googleplus" target="_blank"
href="full%20profile%20url%20in%20googleplus" >
<i class="fab fa-google-plus-g" title="googleplus"></i>
<span class="screen-reader-text">googleplus</span>
</a>
</li>
<li>
<a href="chang0206" class="twitter" target="_blank">
<i class="fab fa-twitter-square" title="twitter"></i>
<span class="screen-reader-text">twitter</span>
</a>
</li>
<li>
<a href="chang0206" class="instagram" target="_blank">
<i class="fab fa-instagram" title="instagram"></i>
<span class="screen-reader-text">instagram</span>
</a>
</li>
<li>
<a href="mailto:mc@hotshraingmy.info" class="email">
<i class="fas fa-envelope" title="email"></i>
<span class="screen-reader-text">email</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20linkedin" class="linkedin" target="_blank">
<i class="fab fa-linkedin-in" title="linkedin"></i>
<span class="screen-reader-text">linkedin</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20stackoverflow" class="stackoverflow" target="_blank">
<i class="fab fa-stack-overflow" title="stackoverflow"></i>
<span class="screen-reader-text">stackoverflow</span>
</a>
</li>
<li>
<a href="changchichung" class="github" target="_blank">
<i class="fab fa-github" title="github"></i>
<span class="screen-reader-text">github</span>
</a>
</li>
<li>
<a href="full%20profile%20url%20in%20pinterest" class="pinterest" target="_blank">
<i class="fab fa-pinterest" title="pinterest"></i>
<span class="screen-reader-text">pinterest</span>
</a>
</li>
<li>
<a href="https://h.cowbay.org/index.xml" data-animate-hover="pulse" class="rss" target="_blank">
<i class="fas fa-rss" title="rss"></i>
<span class="screen-reader-text">rss</span>
</a>
</li>
</ul> <div class="design-credit">
<p>&copy; 2018 Göran Svensson</p>
<p>Nederburg Hugo Theme by <a href="https://appernetic.io">Appernetic</a>.</p>
<p>A port of Tracks by Compete Themes.</p>
</div>
</footer>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1576476555"></script>
</body>
</html>